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 실습!
조건
- 기본 이미지는 ubuntu:latest
- ubuntu repository update하고 nginx 웹서버 설치
- index.html 파일 작성하고, 이를 /usr/share/nginx/html/ 경로에 복사
- 컨테이너 구동시 nginx 실행
- 컨테이너의 80번 포트 접근 허용
Dockerfile 생성
Dockerfile build
'[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정' 카테고리의 다른 글
Day17:도커 프라이빗 이미지 저장소 | Kubernees(쿠버네티스) 설치 | 쿠버네티스기본 | 파드(Pods) | 컨트롤러(Controller) (0) | 2020.07.29 |
---|---|
Day16-2: 도커 볼륨 | 도커 네트워크 (0) | 2020.07.28 |
Day16-1: 도커 실행 및 컨테이너 관리 (0) | 2020.07.28 |
Day15-2: 도커 설치하는 법 | 도커 명령어 정리 | 컨테이너 실행 및 관리 (0) | 2020.07.27 |
Day15-1: 클라우드 개념, 도커(Docker) 학습 (0) | 2020.07.27 |