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
- FROM ubuntu:22.04: 기반 이미지로 Ubuntu 22.04 버전을 사용하겠다는 의미
- LABEL likelion.web.backendauthor="Ivan Kim <xormrdlsrks2@gmail.com>": 이미지에 메타데이터 라벨을 추가 → 이 경우 작성자 정보를 나타냄
- RUN apt-get update: 컨테이너 안에서 Ubuntu 패키지 목록을 업데이트
- RUN apt-get install -y nginx: nginx 웹 서버를 컨테이너 안에 설치 → 여기서 y 옵션은 프롬프트 없이 자동으로 설치를 진행하라는 의미
- RUN echo "\\ndaemon off;" >> /etc/nginx/nginx.conf: nginx 설정 파일에 "daemon off;"을 추가 → nginx 가 데몬 모드가 아닌 포그라운드에서 실행되게 하는 설정
- RUN chown -R www-data:www-data /var/lib/nginx: /var/lib/nginx 디렉토리와 그 하위 파일/디렉토리의 소유자와 그룹을 www-data로 변경
- VOLUME [ "/data", "/etc/nginx/sites-enabled", "/var/log/nginx" ]: 호스트와 공유할 볼륨을 지정 → 데이터를 컨테이너 밖과 안에서 공유할 수 있게 해줌
- WORKDIR /etc/nginx: 이후 명령이 실행될 작업 디렉토리를 **/etc/nginx**로 설정
- CMD [ "nginx" ]: 컨테이너가 시작될 때 실행할 명령 == nginx 를 시작하는 명령
- 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
반응형
'Dev. > Docker' 카테고리의 다른 글
[Cloud] 배포 - Docker : docker-compose.yml (0) | 2023.08.12 |
---|---|
[Cloud] 배포 - Docker : Dockerfile - Django (0) | 2023.08.11 |
[Cloud] 배포 - Docker : Volume (0) | 2023.08.10 |
[Cloud] 배포 - Docker : Dockerhub (0) | 2023.08.07 |
[Cloud] 배포 - Shell Script : 자동실행 스크립트 (0) | 2023.08.02 |
댓글