Dev./Docker

[Cloud] 배포 - Docker : Dockerfile

Ivan'show 2023. 8. 6.
728x90
반응형

Dockerfile 은 Docker 를 사용하여 컨테이너 이미지를 빌드하는데 사용되는 파일이다.

FROM ubuntu:22.04
LABEL likelion.web.backendauthor="Ivan Kim <xormrdlsrks2@gmail.com>"

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

VOLUME [ "/data", "/etc/nginx/sites-enabled", "/var/log/nginx" ]

WORKDIR /etc/nginx

CMD [ "nginx" ]

EXPOSE 80
EXPOSE 443
  1. FROM ubuntu:22.04: 기반 이미지로 Ubuntu 22.04 버전을 사용하겠다는 의미
  2. LABEL likelion.web.backendauthor="Ivan Kim <xormrdlsrks2@gmail.com>": 이미지에 메타데이터 라벨을 추가 → 이 경우 작성자 정보를 나타냄
  3. RUN apt-get update: 컨테이너 안에서 Ubuntu 패키지 목록을 업데이트
  4. RUN apt-get install -y nginx: nginx 웹 서버를 컨테이너 안에 설치 → 여기서 y 옵션은 프롬프트 없이 자동으로 설치를 진행하라는 의미
  5. RUN echo "\\ndaemon off;" >> /etc/nginx/nginx.conf: nginx 설정 파일에 "daemon off;"을 추가 → nginx 가 데몬 모드가 아닌 포그라운드에서 실행되게 하는 설정
  6. RUN chown -R www-data:www-data /var/lib/nginx: /var/lib/nginx 디렉토리와 그 하위 파일/디렉토리의 소유자와 그룹을 www-data로 변경
  7. VOLUME [ "/data", "/etc/nginx/sites-enabled", "/var/log/nginx" ]: 호스트와 공유할 볼륨을 지정 → 데이터를 컨테이너 밖과 안에서 공유할 수 있게 해줌
  8. WORKDIR /etc/nginx: 이후 명령이 실행될 작업 디렉토리를 **/etc/nginx**로 설정
  9. CMD [ "nginx" ]: 컨테이너가 시작될 때 실행할 명령 == nginx 를 시작하는 명령
  10. EXPOSE 80 과 EXPOSE 443: 80 포트(HTTP)와 443 포트(HTTPS)를 컨테이너에서 열겠다는 의미 → 이 포트들은 nginx 가 웹 트래픽을 받는 데 사용

docker image build (현재 디렉토리에 있는 Dockerfile 참조)

docker build --tag lion:0.2 .
lion@likelion:~/dev_django_app$ docker images
REPOSITORY   TAG         IMAGE ID       CREATED          SIZE
lion         0.2         addb2ef0fbf6   10 minutes ago   176MB
lion         0.1         da34d62d6cc1   19 minutes ago   176MB
ubuntu       22.04       5a81c4b8502e   4 weeks ago      77.8MB
ubuntu       latest      5a81c4b8502e   4 weeks ago      77.8MB
python       3.11-slim   796064d1dd86   7 weeks ago      149MB

빌드 된 이미지로 컨테이너를 띄우기

docker run --name hello-nginx3 -d -p 8000:80 lion:0.2
lion@likelion:~/dev_django_app$ docker ps
CONTAINER ID   IMAGE      COMMAND   CREATED          STATUS          PORTS                           NAMES
20f56e4ae3ee   lion:0.2   "nginx"   10 minutes ago   Up 10 minutes   443/tcp, 0.0.0.0:8000->80/tcp   hello-nginx3

지금 클라우드에서 띄운 서버에서 도커작업을 진행하고 있기 때문에 공인 아이피로 8000번 포트에 접속하게 되면,

 

nginx 가 잘 띄워진 것을 확인 할 수 있다.

내용을 확인을 하자면

vi /etc/nginx/sites-available/default

80 포트로 접속했을 때 nginx 에서 index.nginx-debian.html 을 출력해준다.

그래서 8000포트와 80포트를 비교하자면,

sudo vi /var/www/html/index.nginx-debian.html

body 에서 내용을 살짝 수정해서 비교해보면

내용이 수정된 것을 확인할 수 있다.

이번엔 도커쪽에서 수정을 해보면,

docker ps

#
lion@likelion:~/dev_django_app$ docker ps
CONTAINER ID   IMAGE      COMMAND   CREATED          STATUS          PORTS                           NAMES
20f56e4ae3ee   lion:0.2   "nginx"   53 minutes ago   Up 53 minutes   443/tcp, 0.0.0.0:8000->80/tcp   hello-nginx3
lion@likelion:~/dev_django_app$
docker exec -it {container ID} /bin/bash

#
root@20f56e4ae3ee:/etc/nginx#

<aside> 💡 여기서 좀 당황했던게 vi 명령어가 없었다… 그래서

</aside>

아래 명령어로 vi 명렁어 설치

apt-get update
apt-get install vim

내용 수정

vim /var/www/html/index.nginx-debian.html

결과물

80 포트로 접속하게 되면 서버에서 해당 요청을 Nginx 로 보내서 Nginx 에서 정한 페이지를 보여주게 되고, 8000 포트로 접속하게되면 컨테이너에서 정한 대로

PORTS
0.0.0.0:8000->80/tcp

컨테이너 내부 Nginx 에서 정한 페이지를 보여주게 된다.

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글