docker 사용하기2 (with docker-compose , nodejs , nginx)

jay·2022년 3월 11일
1

Docker

목록 보기
2/4
post-thumbnail

이전 글

docker multi container

이번 글에는 docker-compose를 사용해서 nginx , nodejs multi container 환경을 만드려고 합니다.

자세한 내용은 docker hub nginx , docker-compose를 확인해주세요.

폴더 구성

root directory에 아래와 같이 구성되어 있습니다.

오늘은 docker-compose를 사용해서 서버를 열기 위해 아래와 같이 구성해줍니다.

nginx.conf , Dockerfile

nginx.conf

upstream nodeserver {
    server node:3000;
}
server {
    listen 80;

    location /node {
        proxy_pass      http://nodeserver/;
        rewrite /node/(.*) /$1 break;
        proxy_redirect    default;
        proxy_set_header  Host $host;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Host $server_name;
    }
}

Dockerfile

# nginx image
FROM nginx:latest

# default.conf 삭제
RUN rm /etc/nginx/conf.d/default.conf

# 작성한 nginx.conf 복제
COPY nginx.conf /etc/nginx/conf.d/

여기서 default.conf를 삭제해줘야 하는데

/etc/nginx/nginx.conf 파일에서 conf.d/*.conf 모든 파일을 포함하는 script가 작성되어 있습니다.

default.conf 파일에도 80 port를 listen하고 있어 서버가 동작하지 않습니다.

docker-compose.yml

docker-compose.yml에는 버전에 따라서 작성하는 방법이 다릅니다.

잘 정리해주신 분이 계셔서 이 글을 참고하시면 좋을 것 같습니다.

저는 "3" 버전 기준으로 작성하겠습니다.

version: "3"
services:
  nginx:
    container_name: "nginx"
    build:
      # nginx directory를 root로 사용
      context: ./nginx
      # ./nginx/Dockerfile을 사용해서 build
      dockerfile: Dockerfile
    ports:
      - "80:80"
    depends_on:
      - node
  node:
    container_name: "node"
    build:
      # velog directory를 root로 사용
      context: ./velog
      # ./velog/Dockerfile을 사용해서 build
      dockerfile: Dockerfile
    ports:
      - "3000:3000"

위와 같이 작성

이제 root로 가서 docker-compose up --build command를 입력하면 이전 글에서 했던 것 처럼 docker build . --tag docker_nodejs , docker run -p 3000:3000 docker_nodejs 같은 command로 번거롭게 docker를 실행하지 않아도 됩니다.

localhost:3000 => localhost/node

잘못된 부분이나 제대로 이해하지 못하고 있는 부분이 있다면 언제든 지적해주시면 감사하겠습니다.

혹은 궁금하신 부분이나 docker를 제외한 것들도 질문해주시면 최대한 답변드리도록 노력하겠습니다. 감사합니다.

다음 글에는 nextjs를 container로 같이 올리는 방법을 작성하도록 하겠습니다.

profile
Generalist

0개의 댓글