docker-compose nginx+ nodejs[web] 설정하기.

wonjun.Aden·2022년 9월 26일
3
post-thumbnail

nginx + nodejs 설정하기

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을 적어준다.
첫째줄의 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

실행하고자 하는 각각의 컨테이너들을 적는 부분이다.
services는 다수의 컨테이너를 하나의 서비스로 묶어줄 때 사용한다.
하위에 컨테이너들을 정의하면 해당 컨테이너들은 하나의 서비스로 묶이게 된다.

container 상세 설정

컨테이너 설정을 위해선 여러가지 옵션들을 설정해야 한다.
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를 넣지 않고 관리할 수 있다.

networks

docker에는 독립적인 네트워크를 구성하여 컨테이너 간의 통신을 할 수 있도록 기능을 제공하고 있다.

docker network의 driver 종류는 다양하게 있는데 우선 동일한 호스트 컴퓨터에 컨테이너들 간의 통신을 위하여 bridge로 설정하였다.

nginx 설정

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를 이용하여 하나의 전체적인 서비스를 띄워 볼 예정이다.
어려울것같다. ㅋ
그럼 이만.

profile
아프리카의 BackEnd Developer 장원준입니다.

0개의 댓글