⭐ 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: