[Docker] #4 Docker file을 이용한 이미지 생성하기

다채로운·2022년 5월 29일
0

Docker

목록 보기
4/6
post-custom-banner

Docker file

도커파일이란?

도커 이미지를 빌드하는데 필요한 명령어를 순서대로 기술한 텍스트 파일
컨테이너에 설치해야 하는 패키지, 추가해야 하는 소스코드, 실행해야 하는 명령어와 쉘 스크립트 등을 기록한 파일입니다.

도커파일 형식

FROM: 베이스 이미지 지정
▶ ENV :
환경변수 지정
▶ RUN :
컨테이너 내부에서 실행할 명령어 지정 (컨테이너가 실행되기 전에 실행하는 명령어)
▶ COPY :
호스트와 컨테이너 간 파일을 복사
▶ ADD :
호스트에 있는 파일을 컨테이너에 추가
▶ WORKDIR :
컨테이너 작업 디렉터리 지정
▶ EXPOSE :
포트 지정
▶ CMD :
컨테이너가 시작될 때 실행하는 명령어, Dockerfile에서 한번만 지정할 수 있음
▶ ENTRYPOINT :
컨테이너가 시작될 때 실행하는 명령어

도커파일 예시

#베이스 이미지는 ubuntu로 설치한다.
FROM ubuntu

#환경변수 DEBIAN_FRONTEND를 생성하고, 값을 지정한다.
ENV  DEBIAN_FRONTEND=noninteractive

#컨테이너 생성 전에 apt-get을 통해 모듈을 설치한다.
RUN  apt-get update
RUN  apt-get install apache2 -y

#호스트의 hello.html파일을 컨테이너 내부의 /var/www/html 경로에 추가한다.
ADD  hello.html /var/www/html/

#컨테이너의 작업 디렉토리를 /var/www/html로 지정한다.
WORKDIR /var/www/html/

#bash쉘을 통해 컨테이너에 hello2.html을 생성한다.
RUN  [ "/bin/bash", "-c", "echo hello2 >> hello2.html" ]

#컨테이너 포트를 80으로 지정한다.
EXPOSE  80

#컨테이너가 시작될 때 apache를 실행하는 명령어를 수행하도록 한다.
CMD  apachectl -DFOREGROUND

도커파일 예시에 주석을 달아두었으니, 각각의 명령어의 의미를 대충 이해가 되셨을거라고 생각합니다.
그러나 각 명령어에는 몇가지 옵션이 포함되어있습니다.
가장 의문점이 생길 수 있는 두가지 옵션에 대해 살펴보도록하겠습니다.

  1. RUN apt-get install apache2 -y에서 -y 옵션?
    apt-get install을 통해 모듈을 설치하면 중간 중간 yes or no를 묻는 항목이 나오고,
    사용자의 입력이 있어야만 실행되는 프로세스가 있습니다. 사용자 입력을 컨테이너 생성 전에 줄 수 있는 방법이 없으므로 -y 옵션을 통해 모두 yes로 대답하여 모듈을 정상적으로 설치할 수 있습니다.

  2. CMD apachectl -DFOREGROUND에서 -DFOREGROUND 옵션?
    컨테이너 시작될 때 지정한 명령어를 수행하고 명령어 수행을 마치면 상태를 stop으로 변경합니다.
    -DFOREGROUND 옵션을 주지 않으면 apache가 실행되기만 하면 되기 때문에, 컨테이너는 apache를 실행한 뒤 컨테이너를 stop 시켜버립니다.
    apache는 주로 웹서버를 구동할 때 사용하는데 컨테이너가 stop되면 웹서버 자체가 중지되기 때문에 웹서버가 어떠한 입출력도 할 수 없습니다.
    그러므로 웹서버가 계속 서비스를 할 수 있게 하려면 -DFOREGROUND 옵션을 통해 apache가 1회성이 아닌 지속적으로 구동될 수 있게 해주어야합니다.

도커파일 작성하기

vscode를 설치한 뒤, 도커파일을 작성하면 편리합니다.
vscode에서 제공하는 확장 프로그램에서 docker를 설치합니다.

도커파일로 이미지 생성하기

docker image build -t pse27/myweb:1.0 .
docker image build -t (이미지태그) (도커파일 위치 지정)

👉 주의사항!! 도커파일 위치를 정확하게 지정해야합니다.
명령어를 자세히 보시면 맨 끝에 .이 있는 것을 볼 수 있으실겁니다.
.은 현재 디렉토리를 의미하고, 즉 현재 디렉토리에 Dockerfile이라고 명시되어있는 파일이 있으니 참조하여 이미지를 생성해줘!라는 의미입니다.
오타이신줄 알고 빠뜨리면 이미지 생성이 불가능하니 꼭 명심해주시기 바랍니다.

컨테이너 생성하기

이미지를 생성했으니, 이미지의 인스턴스인 컨테이너를 구동하여 보겠습니다.

docker container run -d -P --name myweb pse27/myweb:1.0
docker container run -d -P --name (컨테이너 이름) (이미지이름:버전)

-P옵션을 통해 도커파일에서 EXPOSE로 설정된 포트(80)를 호스트의 임의 포트(55000)으로 연결합니다.

그렇다면 웹서버가 잘 구동되고 있는지 확인해볼까요? 웹브라우저를 켜신 다음 http://localhost:55000/hello.html을 입력해주시면 됩니다.

도커파일을 통해 생성된 hello2.html페이지에도 정상적으로 접근이 되는 것을 확인할 수 있습니다.

profile
네트워크,보안 운영하는 일개미의 velog
post-custom-banner

0개의 댓글