본문 바로가기

[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정

Day16-3: 도커파일(Dockerfile)이란? 작성부터 사용까지 총정리

Dockerfile이란?

코드 형태의 텍스트 문서이며, 여러가지 지시어를 사용하여 이미지를 제작할 수 있다.

일반적으로 이미지를 생성할 때 commit 이나 import 보다 Dockerfile을 사용한다. 

이유로 아래와 같은 장점을 꼽을 수 있다. 

  • 코드 형태로 되어있어 버전 관리가 용이
  • 이미지의 기능을 파악하기 쉬움
  • commit 이나 import 로 지정하기 어려운 CMD ENTRYPOIN 등의 유용한 기능

 

예시) centos 기반에서 apache 서비스를 실행하는 이미지 제작하는 dockfile

작성법은 맨 아래에 따로 정리했습니다.

[admin@localhost docker]$ cat Dockerfile 
FROM centos:latest
MAINTAINER tester
RUN yum -y install httpd
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
ENV WEBPORT 80
EXPOSE ${WEBPORT}
EXPOSE 443
VOLUME /var/www/html
COPY index.html /var/www/html/index.html

 

Build: Docker 이미지 제작

build [option] PATH

-t 옵션을 사용하여 이미지 이름을 지정할 수 있다. 

PATH는 dockerfile 의 경로를 써주면 된다.

아까 dockerfile 을 만들었던 경로로 이동하여 아래와 같이 build 해준다. dockerfile 이 현재 위치에 있기 때문에 . 으로 PATH를 주었다. 

위의 dockerfile 맨 마지막 줄을 보면, index.html을 /var/www/html/index.html 로 복사하라고 나타나있다. 

따라서 build 전에 현재 경로에 index.html을 만들어 주고 빌드해줘야 한다.

docker build -t nobreak/docker:centosweb .

작업이 잘 완료 되었다면, docker imges 명령어로 확인할 수 있다. 

docker images nobreak/docker:centosweb 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nobreak/docker      centosweb           67d5812f9984        37 minutes ago      255MB

Dockerfile을 작성하기 위한 지시어

지시어 설명
FROM 베이스 이미지 지정
RUN 이미지를 지정하면서 실행할 명령 지정
ENTRYPOINT 컨테이너의 어플 지정 ( 컨테이너 시작할 때 실행할 명령어 )
EXPOSE 컨테이너의 포트 지정
ADD 이미지 생성 시 파일 추가
COPY 이미지 생성 시 파일 복사
WORKDIR 컨테이너 작업 디렉토리 지정
MAINTAINER 이미지 작성자 명시
CMD 컨테이너의 어플 지정 ( 컨테이너 시작할 때 실행할 명령어 )
LABEL 이미지의 라벨 지정
ENV 컨테이너의 환경 변수 지정
VOLUME 컨테이너의 볼륨 지정
USER 컨테이너의 사용자 지정

 

RUN, CMD, ENTRYPOINT 지시어들은 exec와 shell 명령어 형식으로 사용할 수 있다. 

exec 형식은 쉘을 통해 실행하지 않으며, 아래와 같이 써줘야 함.

exec ["yum", "-y", "install", "httpd"]
shell yum -y install httpd

이후 vi dockfile 으로 dockfile을 작성해준다.

 

visual studio code 에서 extension 으로 docker를 추가하여 작성할 수 있다고도 한다.


Dockerfile 실습!

조건

  1. 기본 이미지는 ubuntu:latest
  2. ubuntu repository update하고 nginx 웹서버 설치
  3. index.html 파일 작성하고, 이를 /usr/share/nginx/html/ 경로에 복사
  4. 컨테이너 구동시 nginx 실행
  5. 컨테이너의 80번 포트 접근 허용

Dockerfile 생성

vi dockerfile

Dockerfile build

dockerfile build
nginx도 잘 설치되었고, 이후 copy, run, cmd, expose 도 잘 실행이 되었네요!

 

반응형