코린이의 기록

[Docker] Nginx Docker Image 생성 본문

ICT&Tools/Docker

[Docker] Nginx Docker Image 생성

코린이예요 2019. 9. 25. 16:04
반응형

1. Dockerfile 설정

$ sudo vim Dockerfile 

FROM  ubuntu:18.04
MAINTAINER YOUR_NAME <YOUR_MAIL@gmail.com>
 
 
# Install Nginx.
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
 
# Define mountable directories.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
 
#copy origin code to YOUR_DIRECTORY in the container
WORKDIR /app
COPY . .
 
# Define working directory.
WORKDIR /etc/nginx
# Define default command.
CMD ["nginx"]
 
# Expose ports.
EXPOSE 80
EXPOSE 18180
EXPOSE 443
  • FROM : 사용하고자 하는 이미지와 태그 "FROM <이미지>:<태그>"

- Ubuntu ver18.04를 기반으로 이미지를 생성하도록 설정한다.

  • RUN : 셸 스크립트 / 명령어 실행 

- apt-get update로 패키지의 목록을 최신 상태로 업데이트 한 뒤에 nginx를 설치한다. 

- nginx 설치, y 옵션 사용

- nginx.conf에 daemon off; 를 설정시킨다. Nginx 웹 서버를 foreground로 실행시킨다. 

- ubuntu의 경우 www-data로 웹서비스를 위한 퍼미션을 설정해준다. 

  • VOLUME : 도커의 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이라 쓰기가 불가능하다. 때문에 컨테이너 레이어에 변화되는 데이터들이 저장이 되는데 컨테이너가 삭제되면 운용 데이터들도 함께 삭제가 된다. 때문에 이 컨테이너 데이터를 영속적 데이터로 활요할 수 있기위해 Docker는 Data를 안전하게 존속시킬 수 있는 방식으로 세가지 방식을 제공한다. 그중의 하나가 volume이다. (volume, bind mounts, tmpfs) 

[]괄호 안에 있는 데이터가 볼륨으로 설정된다. 

  • WORKDIR : WORKDIR은 RUN, CMD, ENTRYPOINT의 명령이 실행될 디렉터리를 설정한다. 
  • COPY : COPY는 파일을 이미지에 추가한다. "COPY <복사할 파일 경로> <이미지에서 파일이 위치할 경로>" (복사할 파일의 경로는 컨텍스트 아래를 기준으로한다. 컨텍스트 바깥의 절대경로는 사용할 수 없다)
  • CMD :  컨테이너가 무슨일을 하는지 결정하는 최종 단계를 정의하는 명령어 
  • EXPOSE : 호스트와 연결할 포트 번호를 설정한다. "EXPOSE <포트번호>"

 

2. Docker build

Dockerfile 설정에 따라 Docker image를 생성한다.

$ sudo docker build --force-rm --tag admin-ui .
  • --force-rm : 기존에 존재하는 image를 삭제한다
  • --tag : 태그를 설정한다. 

결과 화면

Sending build context to Docker daemon  19.49MB
Step 1/14 : FROM  ubuntu:18.04
 ---> 2ca708c1c9cc
Step 2/14 : MAINTAINER Roseline <sy.yoon@alticast.com>
 ---> Using cache
 ---> 742c2c32021b
Step 3/14 : RUN apt-get update
 ---> Using cache
 ---> 7699b7537e11
Step 4/14 : RUN apt-get install -y nginx
 ---> Using cache
 ---> 1ca686569f8d
Step 5/14 : RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
 ---> Using cache
 ---> 43538b562566
Step 6/14 : RUN chown -R www-data:www-data /var/lib/nginx
 ---> Using cache
 ---> dd770962b9f8
Step 7/14 : VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
 ---> Using cache
 ---> 811992def584
Step 8/14 : WORKDIR /app
 ---> Using cache
 ---> d08bbfcdeda9
Step 9/14 : COPY . .
 ---> 076aa469f3ee
Step 10/14 : WORKDIR /etc/nginx
 ---> Running in 0104e38281a7
Removing intermediate container 0104e38281a7
 ---> d4da8c7f5aed
Step 11/14 : CMD ["nginx"]
 ---> Running in 119b2ba964bd
Removing intermediate container 119b2ba964bd
 ---> 822844f28abf
Step 12/14 : EXPOSE 80
 ---> Running in ae847679d28b
Removing intermediate container ae847679d28b
 ---> 902a95e52a6e
Step 13/14 : EXPOSE 18180
 ---> Running in cc6c04ebde54
Removing intermediate container cc6c04ebde54
 ---> 5f2f0da9291d
Step 14/14 : EXPOSE 443
 ---> Running in 022ceb13ec6f
Removing intermediate container 022ceb13ec6f
 ---> dbccf5dacb2f
Successfully built dbccf5dacb2f
Successfully tagged admin-ui:latest

 

3. 생성된 images 확인

$ sudo docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
admin-ui                  latest              dbccf5dacb2f        31 minutes ago      171MB

 

4. Docker Run

$sudo docker run --name admin-ui -v <host directory>:<container directory> -p 18180:18180 admin-ui

docker run <옵션> <이미지이름> <실행할파일>

  • --name : 이미지 이름을 지정해준다. 이것을 지정해주지 않으면 docker에서 임의로 이름을 지어준다..
  • -v : 호스트와 공유할 디렉터리 목록을 지정해준다. <호스트의디렉터리>:<Docker 컨테이너 디렉터리> 연결.
  • -p : 호스트의 포트(외부)와 컨테이너의 포트(내부)를 연결하고 외부에 노출한다. http://<호스트IP>:<호스트의포트>에 접속하면 컨테이너의 포트로 접속된다. <호스트의 포트>:<컨테이너의 포트>
반응형

'ICT&Tools > Docker' 카테고리의 다른 글

[Docker](Solved) Is the docker daemon running?  (1) 2020.02.26
[Docker] Docker 공부  (0) 2019.09.24
Comments