⭐ https://docs.docker.com/build/ ← 공식문서를 참고하였습니다.
목표: 간단한 웹 서버와 데이터베이스를 함께 구성하는 docker-compose.yml
파일을 작성해보자.
web
과 db
.web
서비스는 nginx
이미지를 사용하고, 80번 포트를 열어줘.db
서비스는 mysql
이미지를 사용하고, 환경 변수로 데이터베이스 이름, 사용자, 비밀번호를 설정해야 해.web
은 nginx
이미지를 사용하고, db
와 연결되도록 네트워크를 설정해줘.db
는 MySQL 이미지를 사용하며, MYSQL_ROOT_PASSWORD
등의 환경 변수를 설정해.docker-compose up
명령어로 두 개의 서비스가 정상적으로 시작되는지 확인해.localhost
로 접속했을 때, nginx
의 기본 페이지가 나오는지 확인해.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
에서 이 설정 파일을 사용하도록 구성해보는 거야.
구체적인 요구사항:
nginx.conf
파일을 작성하여 web
서비스에서 db
에 연결할 수 있는 설정을 추가해.docker-compose.yml
에서 nginx.conf
를 web
컨테이너에 마운트하도록 설정해.이 과제를 통해 컨테이너 간 네트워크 통신과 설정 파일 마운트를 익힐 수 있을 거야. 준비되면 진행해보고, 결과를 공유해줘!
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: