Series 〉 Docker starts
이전 포스트에서 도커에 대해서 알아봤습니다. 이번 포스트에서는 어떻게 Dockerfile을 작성하는지 알아보고 Dockerfile 작성 실습을 해보면서 도커에 대해 더 자세히 알아보고자 합니다.
Dockerfile 이란?
dockerfile은 도커 이미지를 생성하기 위한 스크립트 파일입니다.
여러 키워드를 사용하여 dockerfile을 작성하면 빌드를 보다 쉽게 수행 할 수 있습니다.
Dockerfile Instruction
dockerfile에서 사용되는 주요 인트럭션(키워드)은 아래와 같습니다.
FROM
From 키워드를 사용하여 base가 되는 image를 지정합니다. 주로 OS 이미지나 런타임 이미지를 지정합니다.
RUN
이미지를 빌드할 때 사용하는 커맨드를 설정할 때 사용합니다.
ADD
이미지에 호스트의 파일이나 폴더를 추가하기 위해 사용합니다. 만약 이미지에 복사하려는 디렉토리가 존재하지 않으면 docker가 자동으로 생성합니다.
COPY
•
호스트 환경의 파일이나 폴더를 이미지 안으로 복사하기 위해 사용합니다.
•
ADD와 동일하게 동작하지만 가장 확실한 차이점은 URL을 지정하거나, 압축파일을 자동으로 풀지 않습니다.
EXPOSE
이미지가 통신에 필요한 포트를 지정할 때 사용합니다.
ENV
•
환경 변수를 지정할 때 사용합니다. 여기서 설정한 변수는 $name, ${name}의 형태로 사용할 수 있습니다.
•
추가로 다음과 같은 문법을 사용하여 사용할 수도 있습니다.
e.i. ${name:-else}: name 정의가 안되어 있다면 'else'가 사용된다는 설정입니다.
CMD
•
도커 컨테이너가 실행될 때 실행할 커맨드를 지정합니다.
•
RUN과 비슷하지만 CMD는 도커 이미지를 빌드할 때 실행되는 것이 아니라 컨테이너를 시작할 때 실행됩니다.
ENTRYPOINT
도커 이미지가 실행될 때 사용되는 기본 커맨드를 지정합니다. (강제)
WORKDIR
•
RUN, CMD, ENTRYPOINT 등을 사용한 커맨드를 실행하는 디렉토리를 지정합니다.
•
-w 옵션으로 오버라이딩 할 수 있습니다.
VOLUME
•
영속(persistent) 데이터를 저장할 경로를 지정할 때 사용힙니다.
•
이 설정을 통해서 호스트의 디렉토리를 도커 컨테이너에 연결할 수 있습니다.
•
주로 휘발성으로 사용되면 안되는 데이터를 저장할 때 사용합니다. (e.g. 데이터베이스)
기타 옵션
•
SHELL
•
LABEL
•
USER
•
ARG
•
STOPSIGNAL
•
HEALTHCHECK
Docker Build
dockerfile을 실행하기 위해서는 docker build 커맨드를 사용합니다.
docker build ${옵션} ${dockerfile 디렉토리}
Bash
복사
•
e.g. 아래와 같이 -t 옵션으로 빌드될 이미지 이름을 지정할 수 있습니다.
# e.g.
docker build -t test .
Bash
복사
생성된 이미지를 컨테이너로 실행하기 위해서는 아래와 같이 run 커매드를 사용합니다.
docker run --name ${컨테이너 이름} -p ${호스트 포트}:${도커 포트} ${이미지}
Bash
복사
•
e.g.
# e.g.
docker run --name test_app -p 80:80 test
Bash
복사
Practice. 도커 파일 작성
간단하게 도커파일을 작성하여 정적파일을 웹서버 컨테이너에 실행하는 실습을 해봅니다.
기존에 Jetbrain에서 제공해주는 Writerside EAP 툴을 활용해서 문서를 작성했던 자료가 있어서 해당 실습에서는 Writerside를 활용한 도커 파일을 작성해 볼 겁니다.
요구사항은 다음과 같습니다.
1.
현재 블로그 소스를 압축 파일로 빌드합니다.
2.
압축 파일을 실습할 디렉토리로 옮겨 압축 파일을 풉니다.
3.
해당 디렉토리에 Dockerfile을 작성합니다.
4.
Dockerfile에 Apache 웹 서버 도커 이미지를 지정합니다.
5.
Apache 웹 서버가 실행될때 기본적으로 연결되는 htdocs 디렉토리에 정적 파일들을 옮깁니다.
6.
작성한 Dockerfile로 이미지를 빌드합니다.
7.
빌드된 이미지로 컨테이너를 생성하여 실행합니다.
Step 1. Writerside 정적 소스를 압축 파일로 빌드
Writerside는 아래 이미지처럼 보다 쉽게 문서 작성 소스를 압축 파일로 빌드할 수있습니다.
Step 2. 압축 파일을 실습할 디렉토리로 옮겨 압축 파일 풀기
압축된 파일을 원하는 디렉토리로 옮기고 압축을 해제합니다.
Step 3. Dockerfile 작성
1.
FROM 구문에 아파치 이미지를 지정합니다.
2.
COPY 구문에 정적파일 전체를 아파치 디렉토리인 htdocs로 옮기는 설정을 작성합니다.
# ./Dockerfile
FROM httpd
COPY ./webHelpMI2-all/** /usr/local/apache2/htdocs/
Docker
복사
Step 4. 작성한 Dockerfile로 이미지 빌드
아래와 같이 도커 이미지 빌드 명령어를 실행합니다.
docker build -t blog-template:1.0 .
Bash
복사
명령어 설명: 도커 이미지 이름(-t )은 blog-template이고 이미지 태그(: )는 버전을 의미하는 1.0으로 도커 이미지를 빌드하고, 명령어 실행 경로(. )에 있는 Dockerfile을 설정합니다.
Step 5. 도커 컨테이너 실행
아래와 같이 도커 컨테이너를 실행합니다.
docker run --name my-blog -p 80:80 -d blog-template:1.0
Bash
복사
명령어 설명: 도커 컨테이너 이름(--name )은 my-blog로 지정하고 호스트의 80포트를 도커 컨테이너의 80포트와 매핑(-p) 또는 포워딩 합니다. 백그라운드에서 데몬(-d )으로 실행(run )하며 blog-template:1.0 이미지로부터 컨테이너를 생성합니다.
Step 6. 확인
localhost로 접근하여 정적 페이지가 정상적으로 나오는지 확인합니다.
More posts like this
Search