TIL. 84 Dockerfile 이란?

조윤식·2022년 9월 16일
0

🚀 Dockerfile 이란?

이런 문제를 간소화하기 위해서 Dockerfile이란게 존재합니다. Dockerfile은 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수설정 등을 기록한 하나의 파일입니다. 그리고 이를 빌드하면 자동으로 이미지가 생성됩니다. 이렇게 되면 앞으로는 애플리케이션 빌드 및 배포를 자동화할 수 있게됩니다.

권장하는 방법은 Dockerfile을 이용해서 빌드하고 배포하는게 더 좋다고 합니다. (애플리케이션 패키지 설치를 명확히 함. 이미지 생성을 자동으로 함. 쉽게 배포 가능 등등)

Dockerfile 작성

VS Code에서 확장도구를 설치하면 쉽게 작성할 수 있을겁니다.

# 1. 우분투 설치
FROM ubuntu:18.04

# 2. 메타데이터 표시
LABEL "purpose"="practice"

# 3. 업데이트 및 아파치 설치
RUN apt-get update
RUN apt-get install apache2 -y

# 4. 호스트에 있는 파일을 추가
ADD test.html /var/www/html

# 5. 작업공간 이동(=cd)
WORKDIR /var/www/html

# 6. 거기서 test2.html 파일생성
RUN ["/bin/bash", "-c", "echo hello > test2.html"]

# 7. 포트 80번 노출 지정
EXPOSE 80

# 8. 컨테이너 생성시 시작명령어
CMD apachectl -DFOREGROUND
  • FROM : 생성할 이미지의 베이스가 될 이미지를 뜻합니다. 반드시 한번 이상 입력해야 합니다.
  • LABEL : 이미지에 메타데이터를 추가합니다. (나중에 원하는 조건의 컨테이너, 이미지 등을 쉽게 찾을 수 있도록 도와주기 때문에 기억해두는게 좋습니다)
  • RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행합니다. (여기서 주의할 점은 설치과정에서 별도의 입력이 불가능하기 때문에 apache2를 설치할 때 뒤에 -y를 붙여줘야 합니다.
  • ADD : 파일을 이미지에 추가합니다. 여기서는 Dockerfile이 위치한 폴더에 test.html 파일을 가져와서 이미지의 /var/www/html 디렉터리에 추가합니다.
  • WORKDIR : 명령어를 실행할 디렉토리. 배시 셸에서의 cd 명령어와 동일한 기능을 합니다.
  • EXPOSE: 이미지에서 노출할 포트를 설정합니다.
  • CMD : 컨테이너가 시작될 때마다 실행할 명령어. Dockerfile에서 한번만 사용할 수 있습니다.

부가적으로 RUN ["/bin/bash", "-c", "echo hello > test2.html"] => /bin/bash 셸을 이용해 echo hello > test2.html를 실행하라는 뜻입니다.

이를 종합해봤을때 ubuntu18:04를 이용해 컨테이너를 생성합니다. 그리고 그 안에서 apt-get update를 하고 아파치를 설치합니다. 호스트에 있는 test.html을 /var/www/html에 추가한다음, 그 폴더로 이동한 후에 test2.html을 생성합니다. 마지막으로 80번 포트를 노출시킬 포트로 설정한 다음 CMD 명령으로 이미지 빌드를 마칩니다.

이제 서버에다가 아래와 같이 해준다음에, 위에서 작성한 도커파일을 추가해줍니다.

$ mkdir dockerfile 
$ cd dockerfile
$ echo test >> test.html

Dockerfile 빌드

앞서 만든 도커파일을 빌드해봅니다.

$ docker build -t mybuild:0.0 ./

-t 옵션은 생성될 이미지 이름을 설정합니다. build 명령 끝에는 Dockerfile이 저장된 경로를 입력합니다. 여기서는 현재 디렉토리라고 입력했습니다.

빌드를 시작하면 step 1부터 9단계까지 자기가 알아서 실행하고 있는 것을 볼 수 있습니다.

이미지도 잘 생성되었으니 컨테이너를 생성하고 실행시켜보겠습니다. 잘 나오는 것을 확인할 수 있습니다.

$ docker run -d -p 80:80 --name myserver mybuild:0.0

기타 Dockerfile 명령어

ENV

환경변수를 설정할 수 있습니다. 개인적으로 저는 많이 썼었습니다.

ENV test /home

export test=/home이랑 같은 의미...

VOLUME

호스트와 공유할 컨테이너 내부의 디렉터리 설정

VOLUME /home/volumn

ARG

build 명령어를 실행할때 추가로 입력받아 도커파일 내에서 사용될 변수의 값을 설정

USER

USER로 컨테이너 내에서 사용될 사용자 계정의 이름이나 UID를 설정하면 그 아래 명령어는 해당 사용자 권한으로 실행되도록 설정(권장)

ADD와 COPY

ADD와 COPY는 기능적으로 같은역할로써 이미지에 파일을 복사해줍니다. 다만 차이점은 COPY은 로컬의 파일만 이미지에 추가할 수 있지만, ADD는 URL 및 tar 파일에서도 파일을 추가할 수 있습니다. (권장되는 방법은 COPY라고 하는군요)

CMD과 ENTRYPOINT

profile
Slow and steady wins the race

0개의 댓글