728x90
<Docker 실습 :: MYSQL과 WORDPROCESS 연동해 관리>
- docker compose: 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구
- YAML 파일을 사용하여 컨테이너, 서비스, 네트워크 및 볼륨을 정의하며, 이를 통해 손쉽게 멀티컨테이너 애플리케이션을 관리
<실습>
ubuntu@host1:~/Labs/ch08$ mkdir myweb_data mydb_data
ubuntu@host1:~/Labs/ch08$ ls
mydb_data myweb_data
1. 도커 볼륨 생성
- mydb_data와 myweb_data 생성
ubuntu@host1:~/Labs/ch08$ docker volume create mydb_data
mydb_data
ubuntu@host1:~/Labs/ch08$ docker volume create myweb_data
myweb_data
ubuntu@host1:~/Labs/ch08$ docker volume ls
DRIVER VOLUME NAME
local 3c6934ae8b00c0075ee164b4adf4db3efd685465b23936fbe61323800a1d100a
local 5037ad84f479fac50914cb017c195a48592bb122348b30fc498e17b700b93526
local 7218ff99f0ef01950ab25d481f4e099e049adf6c750e5c76cd9bf9b797ed465c
local 8144d9495439098a90a41e9e592acba434b5da7463d42ff6908c487ac3a99805
local mydb_data
local myweb_data
2. 도커 네트워크 생성 및 확인
- 네트워크: my-webdb-net
ubuntu@host1:~/Labs/ch08$ docker network create my-webdb-net
ubuntu@host1:~/Labs/ch08$ docker network ls
NETWORK ID NAME DRIVER SCOPE
f757fbc75ea2 bridge bridge local
a10c647d79d1 host host local
**2be25d7803aa my-webdb-net bridge local**
2785de26c8d7 none null local
3. 도커 컨테이너 생성 및 확인
- MYSQL 컨테이너
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
- WORDPRESS 컨테이너 생성
docker run -itd \\
--name=wordpress_app \\
-v myweb_data:/var/www/html \\
-v ${PWD}/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@host1:~/Labs/ch08$ docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a545a17eba7 wordpress:5.7 "docker-entrypoint.s…" 12 seconds ago Up 11 seconds 0.0.0.0:8888->80/tcp, :::8888->80/tcp wordpress_app
4313bd4df776 mysql:8.0-debian "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql_app
1. 워드프레스 생성 확인
2. MYSQL 생성 확인 및 데이터 확인
ubuntu@host1:~/Labs/ch08$ docker container exec -it mysql_app bash
<MYSQL 접속>
root@4313bd4df776:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 37
Server version: 8.0.35 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| **wpdb** |
+--------------------+
5 rows in set (0.00 sec)
>> **wpdb** 파일 확인
mysql> use wpdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_wpdb |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0.01 sec)
4. 로그 기록 확인
- /Labs/ch08/myweb-log/apache2에 로그 기록 존재
ubuntu@host1:~/Labs/ch08$ ls
mydb_data myweb-log myweb_data myweb_log
ubuntu@host1:~/Labs/ch08$ cd myweb-log/
ubuntu@host1:~/Labs/ch08/myweb-log$ ls
apache2
ubuntu@host1:~/Labs/ch08/myweb-log$ cd apache2/
ubuntu@host1:~/Labs/ch08/myweb-log/apache2$ ls
access.log error.log other_vhosts_access.log
<access.log 로그 확인>
ubuntu@host1:~/Labs/ch08/myweb-log/apache2$ cat access.log
<error.log 기록 확인>
ubuntu@host1:~/Labs/ch08/myweb-log/apache2$ cat error.log
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
[Wed Jan 17 07:59:18.417410 2024] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.21 configured -- resuming normal operations
[Wed Jan 17 07:59:18.417470 2024] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
sh: 1: /usr/sbin/sendmail: not found
sh: 1: /usr/sbin/sendmail: not found
5. 구동 중인 컨테이너 종료 및 삭제
ubuntu@host1:~/Labs/ch08/myweb-log/apache2$ docker stop mysql_app wordpress_app
mysql_app
wordpress_app
ubuntu@host1:~/Labs/ch08$ docker container rm wordpress_app mysql_app
wordpress_app
mysql_app
>> 각 컨테이너가 잘 구동되는 것을 확인했음
<docker container compose 기능 이용>
1. docker-compose.yaml 파일 생성
ubuntu@host1:~/Labs/ch08$ mk docker-compose.yaml
docker-compose.yaml mydb_data myweb-log myweb_data myweb_log
<docker-compose.yaml 내용>
version: "3.9"
services:
# 첫 번째 서비스 정의.
mydb:
# 도커 허브에서 제공하는 mysql:8.0 이미지 선택.
image: mysql:8.0-debian
# 서비스 컨테이너 이름 지정.
container_name: mysql_app
# 최상위 레벨에 정의 mydb_data 볼륨 지정.
volumes:
- mydb_data:/var/lib/mysql
# 수동 제어를 제외한 컨테이너 종료 시 자동 재시작.
restart: always
# 호스트 운영체제와 컨테이너의 3306 포트를 바인드한다.
# workbench 같은 클라이언트 도구와 연결하기 위해 필요하다.
ports:
- "3306:3306"
# 최상위 레벨에 정의한 backend-net을 기본 네트워크로 지정한다.
networks:
- backend-net
# 서비스가 사용할 환경 변수 지정한다.
environment:
MYSQL_ROOT_PASSWORD: password#
MYSQL_DATABASE: wpdb
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
# 두 번째 서비스를 작성한다.
myweb:
# myweb 서비스가 실행되기 전에 mydb 서비스를 먼저 실행하는 의존성을 설정한다.
depends_on:
- mydb
# wordpress:5.7 이미지 지정한다.
image: wordpress:5.7
# 서비스 컨테이너 이름을 지정한다.
container_name: wordpress_app
# 호스트 운영체제의 8888 포트와 컨테이너의 80 포트를 바인드한다.
ports:
- "8888:80"
# backend-net으로 mydb 서비스와 동일 네트워크로 지정하고,
# 외부 연결을 위한 네트워크를 위해 fronetend-net 지정을 가정한다.
# docker network connect ~ 명령으로 두 번째 네트워크를 추가하는 것과 같다.
networks:
- backend-net
- frontend-net
# 컨테이너 데이터 지속성을 위해 도커 볼륨기법과 바인드 마운트 기법을 사용한다.
volumes:
- myweb_data:/var/www/html
- ${PWD}/myweb-log:/var/log \\
# 수동 제어를 제외한 컨테이너 종료 시 자동 재시작한다.
restart: always
# 서비스가 사용할 환경 변수를 지정한다.
environment:
WORDPRESS_DB_HOST: mydb:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wpdb
# 도커 컴포즈 애플리케이션이 사용할 네트워크 생성. docker network create와 동일하다.
networks:
frontend-net: {}
backend-net: {}
# 도커 컴포즈 애플리케이션이 사용할 볼륨 생성. docker volume create와 동일하다.
volumes:
mydb_data: {}
myweb_data: {}
2. 두 개의 컨테이너 같이 구동 ( docker compose up )
ubuntu@host1:~/Labs/ch08$ docker compose up
ubuntu@host1:~/Labs/ch08$ ps
PID TTY TIME CMD
56504 pts/5 00:00:00 bash
58467 pts/5 00:00:00 ps
3. 컨테이너 내리기 ( docker compose down )
ubuntu@host1:~/Labs/ch08$ docker compose down
[+] Running 4/4
✔ Container wordpress_app Removed 0.0s
✔ Container mysql_app Removed 0.0s
✔ Network ch08_frontend-net Removed 0.6s
✔ Network ch08_backend-net Removed 0.3s
version: "3.9"
services:
# 첫 번째 서비스 정의.
mydb:
# 도커 허브에서 제공하는 mysql:8.0 이미지 선택.
image: mysql:8.0-debian
# 서비스 컨테이너 이름 지정.
container_name: mysql_app
# 최상위 레벨에 정의 mydb_data 볼륨 지정.
volumes:
- mydb_data:/var/lib/mysql
# 수동 제어를 제외한 컨테이너 종료 시 자동 재시작.
restart: always
# 호스트 운영체제와 컨테이너의 3306 포트를 바인드한다.
# workbench 같은 클라이언트 도구와 연결하기 위해 필요하다.
ports:
- "3306:3306"
# 최상위 레벨에 정의한 backend-net을 기본 네트워크로 지정한다.
networks:
- backend-net
# 서비스가 사용할 환경 변수 지정한다.
environment:
MYSQL_ROOT_PASSWORD: password#
MYSQL_DATABASE: wpdb
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
# 두 번째 서비스를 작성한다.
myweb:
# myweb 서비스가 실행되기 전에 mydb 서비스를 먼저 실행하는 의존성을 설정한다.
depends_on:
- mydb
# wordpress:5.7 이미지 지정한다.
image: wordpress:5.7
# 서비스 컨테이너 이름을 지정한다.
container_name: wordpress_app
# 호스트 운영체제의 8888 포트와 컨테이너의 80 포트를 바인드한다.
ports:
- "8888:80"
# backend-net으로 mydb 서비스와 동일 네트워크로 지정하고,
# 외부 연결을 위한 네트워크를 위해 fronetend-net 지정을 가정한다.
# docker network connect ~ 명령으로 두 번째 네트워크를 추가하는 것과 같다.
networks:
- backend-net
- frontend-net
# 컨테이너 데이터 지속성을 위해 도커 볼륨기법과 바인드 마운트 기법을 사용한다.
volumes:
- myweb_data:/var/www/html
- ${PWD}/myweb-log:/var/log \\
# 수동 제어를 제외한 컨테이너 종료 시 자동 재시작한다.
restart: always
# 서비스가 사용할 환경 변수를 지정한다.
environment:
WORDPRESS_DB_HOST: mydb:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wpdb
# 도커 컴포즈 애플리케이션이 사용할 네트워크 생성. docker network create와 동일하다.
networks:
frontend-net: {}
backend-net: {}
# 도커 컴포즈 애플리케이션이 사용할 볼륨 생성. docker volume create와 동일하다.
volumes:
mydb_data: {}
myweb_data: {}
- 두 개의 컨테이너 같이 구동
ubuntu@host1:~/Labs/ch08$ docker compose up
ubuntu@host1:~/Labs/ch08$ ps
PID TTY TIME CMD
56504 pts/5 00:00:00 bash
58467 pts/5 00:00:00 ps
- 컨테이너 내리기
ubuntu@host1:~/Labs/ch08$ docker compose down
[+] Running 4/4
✔ Container wordpress_app Removed 0.0s
✔ Container mysql_app Removed 0.0s
✔ Network ch08_frontend-net Removed 0.6s
✔ Network ch08_backend-net Removed 0.3s
'클라우드 + DevOps > Docker' 카테고리의 다른 글
Docker 컨테이너 구축 실습으로 docker 명령어 알아보기 (3): Portainer, 리눅스 알파인 (0) | 2024.02.08 |
---|---|
Docker 컨테이너 구축 실습으로 docker 명령어 알아보기 (2): MySQL, MariaDB (0) | 2024.02.07 |
Docker 컨테이너 구축 실습으로 docker 명령어 알아보기 (1): Rocky, NginX (1) | 2024.02.06 |
Docker를 이용한 레지스트리 서버 이용 (1) | 2024.02.05 |
가상머신 Virtual Box에서 Docker 접속하기 (0) | 2024.02.02 |