Dockerfile

이미지를 생성하는 법

1. 아무것도 존재하지 않는 이미지(우분투, CentOS 등)로 컨테이너 생성
2. 애플리케이션을 위한 환경을 설치하고 소스코드 등을 복사해 잘 동작하는 것을 확인
3. 컨테이너를 이미지로 커밋

도커는 위와 같은 일련의 과정을 손쉽게 기록하고 수행할 수 있는 빌드 명령어를 제공합니다. 완성된 이미지를 생성하기 위해 컨테이너에 설치해야 하는 패키지, 추가해야 하는 소스코드, 실행해야 하는 명령어와 셸 스크립트 등을 하나의 파일에 기록해 두면 도커는 이 파일을 읽어 컨테이너에서 작업을 수행한 뒤 이미지로 만들어냅니다.

이러한 작업을 기록한 파일의 이름을 Dockerfile이라고 하며, 빌드 명령어는 Dockerfile을 읽어 이미지를 생성합니다. Dockerfile을 사용하면 직접 컨테이너를 생성하고 이미지로 커밋해야 하는 번거로움을 덜 수 있을뿐더러 깃과 같은 개발 도구를 통해 애플리케이션의 빌드 및 배포를 자동화할 수 있습니다.

Dockerfile 작성

간단한 시나리오로 웹 서버 이미지 생성하기

먼저 디렉터리 생성 후 HTML 파일을 미리 만들어 놓습니다.

# mkdir dockerfile && cd dockerfile
# echo test >> test.html
# ls
test.html

해당 디렉토리 내부에서 Dockerfile 이라는 이름의 파일을 저장하고 아래의 내용으로 작성합니다.

#vi Dockerfile

FROM ubuntu:14.04
MAINTAINER alicek106
LABEL "purpose"="practice"
RUN apt-get update
RUN apt-get install apache2 -y
ADD test.html /var/www/html
WORKDIR /var/www/html
RUN ["/bin/bash", "-c", "echo hello >> test2.html"]
EXPOSE 80
CMD apachectl -DFOREGROUND

Dockerfile 명령어 설명

FROM : 생성할 이미지의 베이스가 될 이미지를 뜻합니다. FROM 명령어는 Dockerfile을 작성할 때 반드시 한번 이상 입력해야 하며, 이미지 이름의 포맷은 docker run 명령어에서 이미지 이름을 사용하였을 때와 같습니다.

MAINTAINER : 이미지를 생성한 개발자의 정보를 나타냅니다.

LABEL : 이미지에 메타데이터를 추가합니다. 메타데이터는 '키:값'의 형태로 저장되며, 여러 개의 메타데이터가 저장될 수 있습니다.

RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행합니다.

ADD : 파일을 이미지에 추가합니다. 추가하는 파일은 Dockerfile이 위치한 디렉터리인 컨텍스트(Context)에서 가져옵니다.

WORKDIR : 명령어를 실행할 디렉터리를 나타냅니다.

EXPOSE : Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정합니다.

CMD : CMD는 컨테이너가 시작될 때마다 실행할 명령어를 설정하며, Dockerfile에서 한 번만 사용할 수 있습니다.

작성한 Dockerfile 내용

```
FROM ubuntu:14.04
MAINTAINER alicek106
LABEL "purpose"="practice"

가장 먼저 FROM에서 Dockerfile에서 사용할 베이스 이미지를 ubuntu:14.04로 설정합니다. 
그리고 이미지 MAINTAINER의 이름을 alicek106으로 설정합니다.
Dockerfile에서 생성될 이미지의 라벨을 purpose=practice로 설정합니다.
```

```
RUN apt-get update
RUN apt-get install apache2 -y
ADD test.html /var/www/html

RUN으로 apt-get update, apt-get install apache2 -y 명령어를 차례로 실행합니다.
ADD로 Dockerfile이 위치한 디렉터리에서 text.html 파일을 이미지의 /var/www/html 디렉터리에 추가합니다.
```

```
WORKDIR /var/www/html
RUN ["/bin/bash", "-c", "echo hello >> test2.html"]

WORKDIR으로 작업 디렉터리는 /var/www/html로 변경합니다.
RUN 명령어를 통해 test2.html 파일을 생성합니다.
```
```
EXPOSE 80
CMD apachectl -DFOREGROUND

EXPOSE를 통해 컨테이너가 사용할 포트를 80번으로 설정합니다.
CMD를 통해서 이미지 빌드를 마칩니다.
```

Dockerfile 빌드

# docker build -t mybuild:0.0 ./

명령어를 입력하면 빌드가 실행됩니다.


이런 식으로 Dockerfile에서 작성한 명령어가 step 별로 실행되는 것을 확인할 수 있습니다.

최종적으로 mybuild:0.0 이라는 이름의 이미지가 생성되었습니다.

이제 생성된 이미지로 컨테이너를 실행해봅니다.

# docker run -d -P --name myserver mybuild:0.0
9d24baff2a2f379478fd2237ae331d4d82d2cbb680a72f87d43c2f38a25f2275

동작하는지 확인하기위해 myserver의 컨테이너 포트를 확인하고 접속해 봅니다.

# docker port myserver
80/tcp -> 0.0.0.0:49153

49153 포트를 사용하는 것을 볼 수 있습니다.
이제 GCP 외부 IP:49153을 주소창에 입력해서 apache 서버가 실행되고 있는지 확인합니다.

이렇게 잘 실행되는 것을 확인 할 수 있습니다.

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN