Docker Compose 구성해보기
- DB(MySQL) 서버와 해당 DB의 유저 리스트를 조회하는 WebApp을 개발하여 Compose로 실행해본다.
- DB 서버는 기존의 my-mysql 이미지를 사용한다.
API Server 컨테이너 만들기
프로그램 작성
db_controller.py
import json
from os import getenv
import pymysql
def get_data():
conn = pymysql.connect(
host=getenv("MYSQL_HOST"),
port=int(getenv("MYSQL_PORT")),
user=getenv("MYSQL_USER"),
password=getenv("MYSQL_PASSWORD"),
db="mysql",
charset='utf8'
)
cursor = conn.cursor()
sql = "SELECT user, host FROM user"
cursor.execute(sql)
rows = cursor.fetchall()
conn.close()
return json.dumps(rows)
import json
from fastapi import FastAPI
from db_controller import get_data
app = FastAPI()
@app.get("/")
async def user_info():
result = get_data()
return {"message": result}
Dockerfile 작성
Dockerfile
FROM python:3.10-buster
RUN pip install fastapi uvicorn PyMySQL cryptography
COPY ./main.py ./db_controller.py ./start-server.sh /opt
CMD ["./opt/start-server.sh"]
빌드
docker build -t api_server:0.0.1 .
컨테이너 실행
docker run -itd --name api-server \\
-p 8080:8080 \\
-e MYSQL_HOST=172.17.0.2 \\
-e MYSQL_PORT=3306 \\
-e MYSQL_USER=devinu \\
-e MYSQL_PASSWORD=devinu \\
api_server:0.0.1
Docker Compose 작성
yaml 편집을 위한 vim 설정
~/.vimrc
set autoindent expandtab tabstop=2 shiftwidth=2
Docker compose 파일 작성
docker-compose.yaml
services:
db:
image: my_mysql:0.0.1
ports:
- "3306:3306"
volumes:
- mysqldb:/var/lib/mysql
environment:
- MYSQL_USER=devinu
- MYSQL_PASSWORD=devinu
api-server:
depends_on:
- db
image: api_server:0.0.1
ports:
- "8080:8080"
environment:
- MYSQL_HOST=db
- MYSQL_PORT=3306
- MYSQL_USER=devinu
- MYSQL_PASSWORD=devinu
volumes:
mysqldb: {}
Docker Compose 실행
포그라운드 실행
docker compose up
백그라운드 실행
docker compose up -d
<aside> 💡 compose 실행 시 기본적으로 커스텀 네트워크가 생성되어 Docker0 네트워크가 아닌 해당 네트워크에 컨테이너가 생성됨
</aside>
컨테이너 확인
docker compose ps
Docker Compose 중지
docker compose stop
Docker Compose 종료
모든 컨테이너 중지(stop) 후 삭제(rm) + 네트워크 삭제
docker compose down
<aside> 💡 의존 볼륨과 이미지는 삭제되지 않음
</aside>
모든 컨테이너 중지 후 삭제 + 네트워크 삭제 + 모든 볼륨 및 이미지 삭제
docker compose down --rmi local -v
'Docker' 카테고리의 다른 글
| 이미지 저장소 [정리] (0) | 2024.07.17 |
|---|---|
| 나만의 이미지 만들기 [정리] (1) | 2024.07.17 |
| 다양한 도커 이미지 실행해보기 [정리] (0) | 2024.07.17 |
| 볼륨 [정리] (0) | 2024.07.17 |
| 컨테이너 포트 포워딩 [정리] (0) | 2024.07.17 |