반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- gradle
- 국가직
- 자바스크립트에러처리
- react
- 통영에어비앤비
- 돈암동맛집
- 통영예쁜카페
- tomcat7
- 방이편백육분삼십성신여대
- 한성대맛집
- 방이편백육분삼십
- springboot
- 영화추천
- 통영여행
- 꼴뚜기회
- ubuntu자바설치
- 파이썬
- npm
- ELK
- 퇴사후공무원
- 공무원
- 성신여대맛집
- 통영
- 서울숲누룽지통닭구이
- 한남동맛집
- JavaScript
- 스페인여행
- 뚝섬역맛집
- 성신여대편백집
- 성북구맛집
Archives
- Today
- Total
코린이의 기록
[Docker] Nginx Docker Image 생성 본문
반응형
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