# 멀티 컨테이너 서비스 구성
이번에는 wordpress와 mysql을 이용한 web application을 구성해 볼 것이다. 구성을 할 때 멀티 컨테이너 서비스를 사용하여 구성을 해볼 것이다. 이번 구성은 다음 그림과 같이 수행을 해볼 것이다.
# 디렉터리 및 볼륨 생성
ubuntu@docker:~$ mkdir my-webdb && cd $_
ubuntu@docker:~$ docker volume create mydb_data
ubuntu@docker:~$ docker volume create myweb_data
먼저 my-webdb라는 디렉터리를 생성하고 이동해준다. 이 디렉터리 안에서 docker 설정 파일 등을 관리할 것이다.
다음으로 mydb_data 와 myweb_data 라는 두 docker 볼륨을 생성해준다.
- mydb_data : Mysql 데이터 베이스 데이터를 저장해준다.
- myweb_data : wordpress 웹 서버의 데이터를 저장해준다.
# 디렉터리 및 볼륨 확인
ubuntu@docker:~/my-webdb$ docker volume ls | grep my
ubuntu@docker:~/my-webdb$ docker inspect --type volume mydb_data
ubuntu@docker:~/my-webdb$ docker inspect --type volume myweb_data
# 네트워크 생성
ubuntu@docker:~/my-webdb$ docker network create my-webdb-net
// 네트워크 확인
ubuntu@docker:~/my-webdb$ docker network ls
// 생성된 네트워크가 제대로 설정이 되엇는지
ubuntu@docker:~/my-webdb$ docker network inspect my-webdb-net
다음으로 my-webdb-net 이라는 네트워크를 생성해줬다. 이 네트워크의 MySQL 과 Worldpress 컨테이너 간의 통신을 담당하는 역할을 한다.
# MySQL 컨테이너 실행
ubuntu@docker:~/my-webdb$ docker run -itd \
--name=mysql_app \
-v mydb_data:/var/lib/mysql \
--restart=always \
-p 3306:3306 \
--net=my-webdb-net \
-e MYSQL_ROOT_PASSWORD=password# \
-e MYSQL_DATABASE=wpdb \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=wppassword \
mysql:8.0-debian
MySQL 8.0 컨테이너를 생성하고 실행해줬다. (설명)
- --name=mysql_app = 컨테이너 이름을 mysql_app으로 지정.
- -v mydb_data:/var/lib/mysql = mydb_data 볼륨을 /var/lib/mysql 경로에 마운트하여 데이터를 저장.
- --restart=always = 컨테이너가 종료되면 자동으로 재시작
- -p 3306:3306 = 호스트와 컨테이너 간의 포트를 매핑하여 외부 클라이언트가 MySQL에 접근할 수 있도록 함.
- --net=my-webdb-net = my-webdb-net 네트워크에 연결.
- -e 옵션 = MySQL 초기 설정(루트 비밀번호, 데이터베이스 이름, 사용자 이름 및 비밀번호)을 지정했다.
# WordPress 컨테이너 실행
ubuntu@docker:~/my-webdb$ docker run -itd \
--name=wordpress_app \
-v myweb_data:/var/www/html \
-v ${myweb-log}:/var/log \
--restart=always \
-p 8888:80 \
--net=my-webdb-net \
-e WORDPRESS_DB_HOST=mysql_app:3306 \
-e WORDPRESS_DB_NAME=wpdb \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=wppassword \
--link mysql_app:mysql \
wordpress:5.7
# 데이터베이스 확인
ubuntu@docker:~/my-webdb$ docker ps
docker exec -it mysql_app bash
mysql -uroot -p
mysql> show databases;
mysql> use wpdb;
mysql> show tables;
# 결과
Docker Compose 정의
# 실행 중인 도커 컨테이너들 다 삭제
ubuntu@docker:~/my-webdb$ docker rm -f $(docker ps -aq)
# Docker Compose 정의
ubuntu@docker:~/my-webdb$ vim docker-compose.yaml
이전에 멀티 컨테이너를 구성할 때는 하나하나 씩 컨테이너를 구성하고 실행하고 했었는데, Docker Compose를 실행하니 각 컨테이너를 하나의 묶음으로 관리할 수 있어서 실행하고 테스트 하는데 너무 많은 도움이 되었다. 앞으로 Docker Compose를 많이 활용해봐야겠다.
'OS > Docker' 카테고리의 다른 글
[Docker] Docker Compose (0) | 2024.11.04 |
---|---|
[Docker] Python Flask 웹 서비스 배포 (1) | 2024.11.04 |
[Docker(go, shell-scr)] Multi-stage Build 이미지 경량화 (0) | 2024.11.04 |
[Docker] 데이터 지속성을 위한 Volume 구성 (0) | 2024.10.30 |
[Docker] scratch 이미지 경량화 (3) | 2024.10.28 |