🌱 Infra/Container_Docker

[Docker-Basic (9)] Docker File 사용하기 -실습1 HTTP 웹

mini_world 2020. 9. 29. 11:57
목차 접기

이번 포스팅에서는 가장 중요한 부분중 하나인 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

 

실습이 마무리 되었습니다 :)

고생하셨습니다.

728x90