⭐ https://docs.docker.com/build/ ← 공식문서를 참고하였습니다.

과제 1: 기본적인 Docker Compose 파일 작성

목표: 간단한 웹 서버와 데이터베이스를 함께 구성하는 docker-compose.yml 파일을 작성해보자.

  1. 설정 요구사항:
  2. 기본 구성 예시:
  3. 확인 사항:
version: "3"
services:
  web:
    image: nginx:latest
    container_name: mynginx
    ports:
      - "80:80"
    networks:
      - composenet01
  db:
    image: mysql:latest
    container_name: mydbmysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: "example"
      MYSQL_USER: "user"
      MYSQL_PASSWORD: "password"

networks:
  composenet01:

[1] 환경 변수 보안

→ 실제 프로덕션 환경에서는 .env 파일 사용하여 정보 관리

→ docker-compose.yml과 같은 디렉터리에서 보관

MYSQL_PASSWORD=password

environment:
      MYSQL_DATABASE: "example"
      MYSQL_USER: "user"
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

다음 단계:

이제 다음 과제를 제시할게. web 서비스가 db 서비스에 접근할 수 있도록 nginx 설정을 변경해보자. 이를 위해 nginx.conf 파일을 작성하고, docker-compose에서 이 설정 파일을 사용하도록 구성해보는 거야.

구체적인 요구사항:

이 과제를 통해 컨테이너 간 네트워크 통신과 설정 파일 마운트를 익힐 수 있을 거야. 준비되면 진행해보고, 결과를 공유해줘!

events {}

http {
    upstream mydb {
        server mydbmysql:3306;  # Docker Compose의 `db` 서비스 이름과 동일하게 설정
    }

    server {
        listen 80;

        location /db {
            proxy_pass <http://mydb>;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

version: "3"
services:
  web:
    image: nginx:latest
    container_name: mynginx
    ports:
      - "80:80"
    // 로컬의 nginx.conf 파일을 컨테이너 내로 마운트
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf  
    networks:
      - composenet01

  db:
    image: mysql:latest
    container_name: mydbmysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: "example"
      MYSQL_USER: "user"
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql

networks:
  composenet01:

volumes:
  mysql_data: