[Docker] Compose
2023. 2. 27. 02:11ㆍTools/Docker
0. Compose?
사랑합니다. 이고잉님
솔직히 docker run
명령어를 사용할 때마다 너무 복잡하다고 느낀다.
혹시 옵션이 하나라도 누락되었을까 걱정되기도 한다.
또 도커를 모르는 친구들과 협업할 때 저 docker run
명령어의 옵션을 하나하나 설명하는 것은 ... 좀 그렇다.
compose가 이런 걱정을 덜어줄 수 있다.
1. Compose!
이런 상황을 가정하자
가. 명령어만 사용하기!
만약 정직하게 명령어를 입력한다면…
docker network create wordpress_net
docker \
run \
--name "db" \
-v "$(pwd)/db_data:/var/lib/mysql" \
-e "MYSQL_ROOT_PASSWORD=123456" \
-e "MYSQL_DATABASE=wordpress" \
-e "MYSQL_USER=wordpress_user" \
-e "MYSQL_PASSWORD=123456" \
--network wordpress_net \
mysql:5.7
docker \
run \
--name app \
-v "$(pwd)/app_data:/var/www/html" \
-e "WORDPRESS_DB_HOST=db" \
-e "WORDPRESS_DB_USER=wordpress_user" \
-e "WORDPRESS_DB_NAME=wordpress" \
-e "WORDPRESS_DB_PASSWORD=123456" \
-e "WORDPRESS_DEBUG=1" \
-p 8080:80 \
--network wordpress_net \
wordpress:latest
-v
: bind mount했다. 호스트의 파일 시스템과 연결한다.-e
: 또는--env
로 환경 변수를 설정한다. DB 사용을 위한 id와 passwd를 설정했다.docker network create wordpress_net
+--network wordpress_net
: db와 app 컨테이너를wordpress_net
이라는 동일한 네트워크로 연결시켰다. ip, 포트와 같은 정보 없이 서로의 컨테이너 이름만으로 쉽게 통신할 수 있다.
나. docker-compose.yml 파일
# docker-compose.yml
version: "3.7"
services:
db:
image: mysql:5.7
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: 123456
app:
depends_on:
- db
image: wordpress:latest
volumes:
- ./app_data:/var/www/html
ports:
- "8080:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: 123456
# docker-compose.yml 파일에 있는 디렉토리에서
docker-compose up
- version: "3.7" : https://docs.docker.com/compose/compose-file/
- app 컨테이너에서 데이터베이스에 접속하기 위해 필요한 정보를 환경변수로 입력한다. (보안상 문제가 될 수 있다. 실제 프로덕트에는 사용하지 말자.)
restart: always
: 재시작 정책. 컨테이너가 실행되는 순간부터 감시하며 꺼지면 재시작한다.depends_on: - db
: 의존성 명시다. app은 db에 의존하고 있으므로 db 이미지부터 실행한다.ports: - "8080:80"
: host의 8080번 포트에 app 컨테이너의 80번 포트를 포트포워딩한다.WORDPRESS_DB_HOST: db:3306
: mysql 기본 포트번호는 3306이다. db 컨테이너의 3306 포트에 데이터베이스가 있음을 알려준다. 3306 안 넣어도 돌아간다.docker compose
로 같이 생성된 컨테이너들끼리는 자동으로 하나의 네트워크에 연결된다.
# docker-compose.yml 파일에 있는 디렉토리에서
docker-compose down
- Docker Compose에 정의되어 있는 모든 서비스 컨테이너를 한 번에 정지시키고 삭제합니다.
부가적으로 효과로 우리는 복잡한 컨테이너들 간의 관계를 문서화할 수 있게 되었다.
2. M1이 또~
M1 맥북의 경우 mysql을 설치할 때 다음과 같은 에러가 생길 수 있다
# error
no matching manifest for linux/arm64/v8 in the manifest list entries.
터미널 환경에서는 --platform linux/amd64 \
를 추가한다.
yml 파일에는 platform: linux/amd64
을 추가한다.
# docker-compose.yml
version: "3.7"
services:
db:
image: mysql:5.7
platform: linux/amd64 <- 여기!
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: 123456
...
출처 : https://youtu.be/EK6iYRCIjYs
출처 : https://darrengwon.tistory.com/793
출처 : https://velog.io/@sujeongim/오류-천국-Docker편-Mac-M1-no-matching-manifest-for-linuxarm64v8
'Tools > Docker' 카테고리의 다른 글
[Docker] Github와의 연동 (0) | 2023.02.28 |
---|---|
[Docker] 연습하기 (2) | 2023.02.27 |
[Docker] 가상화된 Docker host에 접근하기 (0) | 2023.02.27 |
[Docker] 이미지 배포 (0) | 2023.02.27 |
[Docker] Commit & Dockerfile (2) | 2023.02.27 |