이번 포스팅에서는 가장 중요한 부분중 하나인 DockerFile에 대해서 다루어보도록 하겠습니다!!!
시작하기전에, 도커파일이란 뭘까요? docs.docker.com/engine/reference/builder/
Dockerfile reference
Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command...
docs.docker.com
간단하게 "레시피"라고 볼수 있습니다.
요리를 만들떄 어떻게 만들어야 맛있는지 레시피를 정리하여 정의된 방식대로 요리를 하듯,
컨테이너도 마찬가지로 도커파일을 이용하여 어떻게 만들것인지에 대해 정의합니다.
도커파일을 사용하면 패키지설치, 환경변수 변경, 설정파일 변경등 다양한 작업을 하나하나 컨테이너 만들고 설정을 적용하고 이렇게 여러번 반복할 필요 없이, Dockerfile을 이용하여 정의할 수 있습니다.
이제부터, 도커파일을 간단하게 활용하여 실습해보도록 하겠습니다.
Docker File 예제 (apache Web)
1. Dockerfile 작성
이번에도 새로운 디렉터리를 생성하고 그 경로에서 진행하겠습니다.
[root@docker-worker /]# mkdir /dockerLAB-web
[root@docker-worker /]# cd /dockerLAB-web
Dockerfile을 생성합니다. 대소문자에 주의해주세요!
[root@docker-worker dockerLAB-web]# vim Dockerfile
FROM centos:7
MAINTAINER The CentOS Project <cloud-ops@centos.org>
LABEL Vendor="CentOS"\
License=GPLv2\
Version=2.4.6-40
RUN yum -y --setopt=tsflags=nodocs update && \
yum -y --setopt=tsflags=nodocs install httpd && \
yum clean all
EXPOSE 80
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh
CMD ["/run-httpd.sh"]
run-httpd.sh 스크립트 파일을 작성합니다.
[root@docker-worker dockerLAB-web]# vim run-httpd.sh
#!/bin/bash
rm -rf /run/httpd/* /tmp/httpd*
exec /usr/sbin/apachectl -DFOREGROUND
2. 도커 이미지 빌드
도커 파일을 이용해서 도커 이미지를 생성합니다.
docker build 명령어를 사용합니다 :)
docker build <옵션> <도커파일 경로>
-t(--tag) 옵션은 생성할 이미지 이름을 지정합니다.
[root@docker-worker dockerLAB-web]# docker build -t web-server .
Sending build context to Docker daemon 4.096kB
Step 1/8 : FROM centos:7
7: Pulling from library/centos
75f829a71a1c: Pull complete
Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:7
---> 7e6257c9f8d8
Step 2/8 : MAINTAINER The CentOS Project <cloud-ops@centos.org>
---> Running in 4ef41baed202
Removing intermediate container 4ef41baed202
---> 5b08bd1fe165
Step 3/8 : LABEL Vendor="CentOS" License=GPLv2 Version=2.4.6-40
---> Running in 6c7412c489b5
Removing intermediate container 6c7412c489b5
---> da321585858e
Step 4/8 : RUN yum -y --setopt=tsflags=nodocs update && yum -y --setopt=tsflags=nodocs install httpd && yum clean all
---> Running in 412dee75234c
---> 37c5cbc37671
Step 5/8 : EXPOSE 80
---> Running in 58be0106a293
Removing intermediate container 58be0106a293
---> 97576edd73ee
Step 6/8 : ADD run-httpd.sh /run-httpd.sh
---> 3e1b7bcfeb36
Step 7/8 : RUN chmod -v +x /run-httpd.sh
---> Running in b9cffeee4929
mode of '/run-httpd.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
Removing intermediate container b9cffeee4929
---> eb93504aaa05
Step 8/8 : CMD ["/run-httpd.sh"]
---> Running in d2f6f8d1ecd2
Removing intermediate container d2f6f8d1ecd2
---> d18677cad8de
Successfully built d18677cad8de
Successfully tagged web-server:latest
잘 생성되었는지 확인해봅니다.
[root@docker-worker dockerLAB-web]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web-server latest d18677cad8de 36 seconds ago 260MB
centos 7 7e6257c9f8d8 7 weeks ago 203MB
3. 도커 컨테이너 생성 및 테스트
Dockerfile을 가지고 이미지를 빌드했습니다.
이제 이 이미지로 컨테이너를 실행합니다.
web-server 이미지를 이용해서 web_test라는 컨테이너를 실행합니다.
[root@docker-worker dockerLAB-web]# docker run --name web_test -d -p 80:80 web-server
83765a69d85a559c81c59ef22a13d04458fa95fbe16328d311e94e0df35d6c9a
컨테이너가 잘 실행되었는지 확인합니다.
[root@docker-worker dockerLAB-web]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83765a69d85a web-server "/run-httpd.sh" 6 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp web_test
컨테이너에 접속해서 index.html 파일을 생성합니다.
[root@docker-worker dockerLAB-web]# docker exec -it web_test /bin/bash
[root@83765a69d85a /]# echo "Test WEB Server" > /var/www/html/index.html
[root@83765a69d85a /]# exit
exit
컨데이너가 잘 동작하는지 확인해봅니다 :)
"Test WEB Server"라고 잘 나오네요!!
[root@docker-worker dockerLAB-web]# curl 127.0.0.1
Test WEB Server
실습이 마무리 되었습니다 :)
고생하셨습니다.