Intro
이전 포스팅에서는 Jupyter 서버를 구축해봤었죠. 이번에는 nginx 웹서버를 간단하게 구축해볼 것입니다.
이번에도 docker 와 docker compose 를 사용할 건데요, 이 도구들을 사용하는 이유는 이전 포스팅과 마찬가지입니다.
(1) 애플리케이션을 쉽게 구축할 수 있고
(2) 호스트 시스템과 격리된 환경에서 애플리케이션을 실행할 수 있으며
(3) 환경과 애플리케이션을 쉽게 백업하고 복원할 수 있기 때문입니다.
Docker 및 Docker Compose 준비
Docker와 Docker Compose 설치 방법 및 기본 사용법은 이전 포스팅과 동일하므로 아래 링크를 참고하시기 바랍니다.
Docker Compose 제작
이번에는 별도로 Docker 이미지를 pull 하지 않고, docker-compose.yml
파일을 작성해 웹 서버를 구축해보겠습니다.
이전의 Jupyter 서버 구축과는 달리, 이번 Nginx 웹 서버는 추가적인 설정 없이 바로 사용할 수 있습니다. 따라서 도커허브에서 최신 Nginx 이미지를 받아와 바로 실행하도록 docker-compose.yml
파일을 작성할 것입니다.
1
sudo vi docker-compose.yml
docker compose 에서 웹 서버만 실행하는 경우
먼저 docker-compose.yml 파일을 작성해보겠습니다. 만약 웹서버 하나만을 서비스 할 것이라면 아래와 같이 nginx 웹서버만 명세하면 됩니다.
1
2
3
4
5
6
7
8
9
10
version: "3"
services:
home_webserver:
image: nginx:latest
ports:
- 80:80
restart: always
volumes:
- /path/on/host:/path/in/container
docker compose 에서 어려 서비스를 실행하는 경우
저와 같이 웹서버 뿐만 아니라 jupyter 서버도 함께 docker-compose 로 관리한다면, 두 서비스를 하나의 docker-compose.yml 파일에 작성해주면 됩니다. 아래처럼요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: "3"
services:
home_webserver:
image: nginx:latest
ports:
- 80:80
restart: always
volumes:
- /path/on/host:/path/in/container
jupyter:
image: jupyter:1.0.0
ports:
- 18888:8888
restart: always
volumes:
- /path/on/host:/path/in/container
command: jupyter lab --allow-root
docker compose 실행
위와 같이 docker-compose.yml 파일을 작성한 뒤, docker compose up -d
명령어로 파일에 명시된 서비스들을 실행시켜줍니다.
1
sudo docker compose up -d
참고로, 이미 docker compose 파일에 명시된 서비스 중 실행 중인 서비스가 있을 경우 docker compose up
명령어는 해당 서비스에 영향을 주지 않습니다.
bind mount
이번 포스팅에서 주목할 부분은 Bind Mount입니다. Bind Mount는 호스트 시스템의 특정 디렉토리를 컨테이너 내부의 경로에 마운트하는 기능입니다. 예시에서 보듯이, 아래와 같은 형식으로 사용합니다.
1
2
3
4
5
volumes:
- /path/on/host:/path/in/container
# 왼쪽이 호스트의 디렉토리 경로
# 오른쪽이 컨테이너 안쪽 경로
Bind Mount를 사용하는 이유는 바로 업데이트의 편의성 때문입니다. 웹사이트 내용을 수정하려고 매번 컨테이너에 접속해 파일을 수정하는 것은 복잡합니다. 하지만 호스트의 디렉토리를 컨테이너 내부의 웹서버 경로에 마운트하면, 호스트에서 직접 파일을 수정할 수 있어 훨씬 간편합니다.
자세한 내용은 아래 포스트를 참고해주세요.
# Docker 8. 호스트와 컨테이너 간 디렉토리 공유 docker volumes
포트포워딩
외부에서 웹 서버에 접근할 수 있도록 홈 네트워크의 가장 상단에 있는 공유기에서 포트포워딩 설정을 해줘야 합니다. 공유기의 설정 페이지에 접속한 후, 외부에서 접근할 포트(예: 80번 포트)를 내부 서버의 8080 포트로 매핑해줍니다.
테스트
성공!