티스토리 뷰
docker-compose : 컨테이너 별로 다른 환경 변수나 이미지 필요하거나 등 다른 설정을 해주어야 한다면 일일이 해당 컨테이너를 만들기는 힘들다. 그 때 필요한 것이 docker-compose 이다. docker-compose.yaml 파일을 통해 각 컨테이너 별로 설정을 해주고 한 번에 또는 각 컨테이너 별로 실행이 가능하다.
테스트 : wordpress 시작하는 컨테이너들을 만들자.
필요 : mysql (wordpress에 쓰일 mysql), wordpress 컨테이너 이미지
전체적인 구성 : 웹에서 연결된 wordpress 컨테이너로 들어오면 wordpress_net 네트워크로 연결된 mysql 컨테이너에서 데이터 불러오는 구조
포트 (로컬호스트) : 호스트 : 8080, wordpress : 80, mysql: 3306 (기본 포트)
1. docker-compose 없이
- mysql 컨테이너와 wordpress 컨테이너가 연결될 수 있는 네트워크 구성
docker network create wordpress_net
- mysql 컨테이너를 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=user" \
-e "MYSQL_PASSWORD=123456" \
--network wordpress_net \
mysql:5.7
컨테이너 이미지 : mysql:5.7
컨테이너 이름 : db
볼륨 : $(pwd)/db_data 와 db 컨테이너의 /var/lib/mysql 연결
환경변수 : -e 옵션과 같이 설정
네트워크 : wordpress_net에 연결
- wordpress 컨테이너를 wordpress_net 네트워크 안에서 동작하게 실행
docker run \
--name app \
-v "$(pwd)/app_data:/var/www/html" \
-e "WORDPRESS_DB_HOST=db" \
-e "WORDPRESS_DB_USER=user" \
-e "WORDPRESS_DB_NAME=wordpress" \
-e "WORDPRESS_DB_PASSWORD=123456" \
-e "WORDPRESS_DEBUG=1" \
-p 8080:80 \
--network wordpress_net \
wordpress:latest
컨테이너 이미지 : wordpress:latest
컨테이너 이름 : app
볼륨 : $(pwd)/app_data 와 app 컨테이너의 /var/www/html 연결
환경변수 : -e 옵션과 같이 설정
네트워크 : wordpress_net에 연결
포트 : 호스트 8080 : wordpress 컨테이너 80
위 모두 실행 결과
잘 연결되었다.
docker-compose 테스트를 위해 실행 중인 컨테이너랑 네트워크, 볼륨으로 연결된 데이터 디렉토리 지우기
(네트워크 지울 시 기본 네트워크 있으니 *로 다 지우면 안 됨)
docker stop $(docker ps -aq)
docker rm -f $(docker ps -aq)
docker network rm wordpress_net
sudo rm -rf *
2. docker-compose 간단하게 만들어서 테스트
- docker-compose.yaml 작성 (전체 구성은 위와 동일)
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: 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_USER: user
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_PASSWORD: 123456
WORDPRESS_DEBUG: 1
docker-compose로 실행 시 해당 컨테이너를 연결하는 네트워크 기본적으로 생성
위와 같이 image, volumes, environments 등으로 필요한 이미지와 데이터가 연결될 볼륨 디렉토리 지정, 환경 변수 설정 등을 할 수 있고,
wordpress 컨테이너의 경우 mysql 컨테이너에서 데이터를 가져와야 하므로 depends on 으로 의존성 설정
컨테이너 이름은 services 아래에 처음으로 지어주면 됨
docker-compose up : 해당 컨테이너 전체 실행
docker-compose down : 해당 컨테이너 전체 종료
=> 각 컨테이너 이름 커맨드로 입력해서 컨테이너 별 실행 가능
마찬가지로 잘 연결되었다.
'메모 > docker' 카테고리의 다른 글
docker image 만들기, hub.docker.com에 push, pull (0) | 2022.03.06 |
---|---|
docker - httpd image 테스트 (0) | 2022.03.05 |
docker 설치 및 hello world (ubuntu 20.04) (0) | 2022.03.05 |
docker 공부 (0) | 2022.03.05 |