nginx가 뭔지 알아보고 이제는 직접 docker-compose 파일 설정을 해보려고 한다.
우선 docker-compose.yaml의 설정 파일 구조를 파악하고 어떤 것을 뜻하는지 알아보려고 한다.
아래의 코드가 설정한 docker-compose.yaml이다.
version: '3'
services:
nginx:
image: nginx:latest
ports:
- 80:80
networks:
- test_net
volumes:
- ./nginx-conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx-conf/sites-available/local.web.tv:/etc/nginx/sites-available/local.web.tv
- ./nginx-conf/sites-available/local.web.tv:/etc/nginx/sites-enabled/local.web.tv
container_name: nginx-front
web:
image: market-front:0.1
environment:
- NODE_ENV=development
networks:
- test_net
ports:
- 8080:8080
- 3000:3000
container_name: nginx-Aapp-front
networks:
test_net:
driver: bridge
우선 하나하나 천천히 뜯어보자.
첫줄에는 version을 적어준다.
첫째줄의 version은 docker-compose의 version을 나타내는 구문이다.
첫줄에 작성하는 version에 따라 호환되는 docker engine의 버전이 달라지는데, 아래 링크 단 문서 참고해서 사용환경의 docker engine의 버전에 맞추어 가장 최신 버전으로 작성한다.
https://docs.docker.com/compose/compose-file/compose-versioning/
https://docs.docker.com/compose/compose-file/compose-file-v3/
실행하고자 하는 각각의 컨테이너들을 적는 부분이다.
services는 다수의 컨테이너를 하나의 서비스로 묶어줄 때 사용한다.
하위에 컨테이너들을 정의하면 해당 컨테이너들은 하나의 서비스로 묶이게 된다.
컨테이너 설정을 위해선 여러가지 옵션들을 설정해야 한다.
image : 컨테이너로 실행할 docker hub나 로컬에 있는 도커이미지 설정.
build : image를 이용해서 이미 빌드된 이미지를 가져오는 것이 아닌, dockerfile에 있는 경로를 지정해 docker-compose 실행 시 이미지를 즉석으로 빌드하여 생성한다.
dockerfile : 빌드할 dockerfile의 이름이 dockerfile이 아닌 경우 파일명을 지정할 수 있다.
ports : 호스트와 컨테이너의 포트 바인딩을 설정한다. dockerfile의 expose랑 비슷.
volumes : 호스트의 지정된 경로로 컨테이너의 볼륨을 마운트하도록 설정한다.
container_name : 컨테이너 이름을 설정한다.
environment : 환경변수를 설정한다. (우선순위 파악 필요)
env_file : environment와 동일하게 환경변수를 설정할 수 있다. environment와의 차이점은 env파일은 이용해 환경변수를 설정할 수 있어 docker-compose.yaml에 secretkey를 넣지 않고 관리할 수 있다.
docker에는 독립적인 네트워크를 구성하여 컨테이너 간의 통신을 할 수 있도록 기능을 제공하고 있다.
docker network의 driver 종류는 다양하게 있는데 우선 동일한 호스트 컴퓨터에 컨테이너들 간의 통신을 위하여 bridge로 설정하였다.
nginx 설정은 기본적으로 nginx.conf를 설정해주었다.
.
.
.
http{
.
.
.
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
를 추가 해줬다. 그리고 sites-enabled에는
server {
listen [::]:80;
listen 80;
server_name www.local-Aapp.tv local.Aapp.tv;
proxy_buffers 16 16k;
proxy_buffer_size 32k;
location / {
# docker-compose 설정 파일의 services 아래 컨테이너의 이름으로 uri 설정 해야 함. web
proxy_pass http://web:8080; or http://nginx-Aapp-front:8080;
}
}
를 추가하여servername으로 들어오면 http://컨테이너이름:8080으로 연결되게끔 설정하였다.
이렇게 설정하면 nginx + nodejs[web]환경을 설정하여 컨테이너로 띄운 것이다.
대성공.
다음에는 음... azure instance를 생성해서 docker-compose를 이용하여 하나의 전체적인 서비스를 띄워 볼 예정이다.
어려울것같다. ㅋ
그럼 이만.