Dockerfile이란 docker에서 이미지를 기반으로 새로운 이미지를 스크립트 형식을 통해서 새로운 이미지를 생성할 수 있는 이미지 설정파일을 말합니다.
기존 이미지로 생성하여 추가로 설정해야 될 부분이 있을 때, 사전 준비작업으로 많이 사용됩니다.
1. Dockerfile 디렉토리 생성
docker 공식 문서에 의하면, Dockerfile을 빈 디렉토리에 저장하는 것이 좋다고 나와있으며, /root 경로에 디렉토리를 만들지 말라고 써있습니다.
이유는 dockerfile을 만든 뒤 build 과정을 거칠때, 해당 디렉토리를 context로 인식하기 때문입니다.
그러므로 디렉토리를 생성하여 분리시키는 작업이 필요하며, 필요한 파일을 추가하는 것이 좋습니다.
# mkdir /usr/local/src/Dockerfile
2. Dockerfile 작성
ubuntu 16.04 기반에서 apache와 php를 연동하는 dockerfile을 작성하였습니다.
# vi /usr/local/src/Dockerfile/dockerfile
FROM ubuntu:16.04
MAINTAINER lena04
ENV DEBIAN_FRONTEND noninteractive
# 업데이트 및 apache, php 설치
RUN apt-get update && apt-get -y install apache2 php libapache2-mod-php
# PHP 연동
RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost/g' /etc/apache2/sites-available/000-default.conf
# 공유할 볼륨 지정
VOLUME ["/var/www/html" "/etc/httpd"]
# 포워딩 할 포트 지정
EXPOSE 80 443
# Context 에서 index.html과 phpinfo 페이지 가져오기
ADD index.html /var/www/html
ADD phpinfo.php /var/www/html
# docker run 시 아파치 시작
ENTRYPOINT apachectl -D FOREGROUND
[설명]
1) FROM
FROM <이미지>:<태그>
기초가 되는 이미지를 지정합니다. 반드시 설정해야 하며, 맨 처음에 와야합니다.
2) MAINTAINER
MAINTAINER <작성자 정보>
이미지를 생성한 사람의 정보를 설정합니다. 작성자 정보의 경우 형식은 자유입니다. 해당 부분은 생략할 수 있습니다.
3) RUN
RUN <명령>
FROM에서 생성한 이미지 위에서 명령을 실행합니다. 주로 패키지 설치나 기본 설정에 사용됩니다.
4) VOLUME
VOLUME <컨테이너 디렉토리>
디렉토리의 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정합니다.
볼륨을 호스트의 특정디렉토리와 연결을 하려면,
이미지 생성 후, docker run 명령어를 사용시에 -v 옵션과 함께 <호스트 볼륨>:<컨테이너 볼륨> 형식으로 사용하면됩니다.
5) EXPOSE
EXPOSE <포트번호>
컨테이너와 호스트간에 연결할 포트를 설정합니다.
6) ADD / COPY
ADD <복사할 파일경로> <이미지에서 파일이 위치할 경로>
COPY <복사할 파일경로> <이미지에서 파일이 위치할 경로>
ADD와 COPY는 파일을 추가하는 명령어입니다.
차이점은 COPY의 경우 로컬에서만 파일을 가져올 수 있으며, 파일 자체를 가져옵니다.
ADD의 경우, url를 통해 외부 파일을 가져올 수 있으며, tar로 압축된 파일을 풀어서 가져옵니다.
7) ENTRYPOINT
ENTRYPOINT <명령>
컨테이너가 시작됬을 때, 명령을 실행하는 부분입니다.
dockerfile에서 한번만 사용할 수 있습니다.
8) ENV
ENV <환경변수> <값>
환경변수를 설정합니다.
3. dockerfile 이미지 생성
# docker build -t 이미지명:라벨명
apache-php:test 라는 라벨로 이미지를 만들어주었습니다.
4. docker 컨테이너 실행
# docker run -it -d --name 컨테이너명 -p 80:80 -p 443:443 이미지명:라벨명
# docker run -it -d --name 컨테이너명 -p 80:80 -p 443:443 -v 호스트볼륨:컨테이너볼륨 이미지명:라벨명
'DOCKER' 카테고리의 다른 글
Docker registry 구성 (0) | 2019.06.10 |
---|---|
Docker Hub 사용하기 (0) | 2019.06.09 |
Docker 명령어 (0) | 2019.06.05 |
Docker 설치 (0) | 2019.06.05 |
Docker란 (0) | 2019.06.05 |