
Docker 입문 #3 【WordPress 환경 구축】
Docker Compose를 사용하여 php + mysql의 wordpress 환경을 로컬로 구축합니다.

webserver 컨테이너 : wordpress가 작동
dbserver 컨테이너 : MySQL이 작동
dataonly 컨테이너: 데이터 저장용
Docker에 만들기
① dataonly 컨테이너 생성
② webserver 컨테이너 · dbserver 컨테이너 생성
③ Docker Compose로 다중 컨테이너 시작
④ 데이터 확인
⑤ MySQL 연결
폴더 구성

먼저, dataonly 컨테이너를 생성하기 위해 이미지를 만듭니다.
(작업 디렉토리는 어디서나)
Dockerfile
※ busybox는 Linux의 폴더 구성과 표준 명령만을 바이너리로 정리한 최소 구성의 Linux
Dockerfile 파일을 작성할 수 있었으므로, 이미지의 작성·이미지로부터 컨테이너 기동까지 단번에 실행합니다
dataonly라는 태그 이름으로 현재 디렉토리 Dockerfile 빌드
terminal
latest: Pulling from library/busybox
로컬에 busybox 이미지가 없기 때문에 DockerHub에서 최신 버전을 PULL하고 있음을 알 수 있습니다.
terminal
dataonly 이미지가 생겼으므로 dataonly 컨테이너를 시작합니다.
조금 까다 롭지만 컨테이너 이름에
이미지 이름 : dataonly
컨테이너 이름 : dataonly
terminal
-i는 Keep STDIN open even if not attached
표준 입력을 계속 열어 주십시오.
-t는 Allocate a pseudo-TTY
의사 tty를 나눈다.
참고: htps //w w. 얌무로. 코m/엔트리/2018/01/11/224932
컨테이너가 생성되었는지 확인
terminal
Docker Compose를 사용하여 여러 컨테이너를 중앙 집중화(오케스트레이션)합니다.
중앙 관리 설정은
docker-compose.yml
webserver 컨테이너 및 dbserver 컨테이너 시작
terminal
확인
terminal
서버가 도달했습니다.
htp://0.0.0.0:80 방문

dataonly에 데이터가 마운트되었는지 확인합니다.
dataonly 컨테이너
마운트 되네요!
그리고 여기서 주목하고 싶은 것은 dataonly 컨테이너가 작동하지 않습니다.
일반 컨테이너는 삭제하면 데이터도 사라져 버리지만,
데이터 볼륨으로 지정된 컨테이너는 컨테이너가 삭제되어도 데이터가 지속됩니다.
또한 컨테이너를 압축 파일이나 이미지화할 때도 실제 데이터가 없기 때문에 안심입니다.
Docker compose에서 시작한 컨테이너를 확인하고 "dbserver"컨테이너의 IP를 표시합니다.
Docker로 구축된 가상 호스트의 컨테이너에 연결
※
또한
Docker의 네트워크가 구축되었기 때문입니다.

매우 기억하는 용어와 명령이 많습니다.
꾸준히 갈 수밖에 없습니다.
수고하셨습니다!
Docker 입문 #1 【Docker란】
Docker 입문 #2 【Docker 튜토리얼】
Docker 입문 #3 【WordPress 환경 구축】
Docker 입문 #4 【CodeIgniter 환경 구축】
Docker 입문 #5 【Ruby on Rails5 환경 구축】
Docker 명령 치트 시트
완성도

webserver 컨테이너 : wordpress가 작동
dbserver 컨테이너 : MySQL이 작동
dataonly 컨테이너: 데이터 저장용
Docker에 만들기
작업 흐름
① dataonly 컨테이너 생성
② webserver 컨테이너 · dbserver 컨테이너 생성
③ Docker Compose로 다중 컨테이너 시작
④ 데이터 확인
⑤ MySQL 연결
폴더 구성

① dataonly 컨테이너 생성
먼저, dataonly 컨테이너를 생성하기 위해 이미지를 만듭니다.
wordpress/dataonly/
아래에 Dockerfile
을 만들었습니다.(작업 디렉토리는 어디서나)
Dockerfile
# ベースとなるイメージをDockerHubから取得
FROM busybox
# 作成者
MAINTAINER YamadaTaro [email protected]
# ボリュームの指定
VOLUME /var/lib/mysql
※ busybox는 Linux의 폴더 구성과 표준 명령만을 바이너리로 정리한 최소 구성의 Linux
DockerFile 빌드
Dockerfile 파일을 작성할 수 있었으므로, 이미지의 작성·이미지로부터 컨테이너 기동까지 단번에 실행합니다
dataonly라는 태그 이름으로 현재 디렉토리 Dockerfile 빌드
terminal
# docker build -t [イメージ名:タグ名] [Dockerfileのあるディレクトリ]
$ docker build -t dataonly .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM busybox
latest: Pulling from library/busybox
56bec22e3559: Pull complete
Digest: sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912
Status: Downloaded newer image for busybox:latest
---> e02e811dd08f
Step 2 : MAINTAINER YamadaTaro [email protected]
---> Running in 55665148e4ee
---> 75145c609162
Removing intermediate container 55665148e4ee
Step 3 : VOLUME /var/lib/mysql
---> Running in 93ee14d417d3
---> 65b4db421524
Removing intermediate container 93ee14d417d3
Successfully built 65b4db421524
latest: Pulling from library/busybox
로컬에 busybox 이미지가 없기 때문에 DockerHub에서 최신 버전을 PULL하고 있음을 알 수 있습니다.
$ docker images
에서 로컬 이미지 확인terminal
$ docker images
17:46:13
REPOSITORY TAG IMAGE ID CREATED SIZE
dataonly latest 65b4db421524 About a minute ago 1.093 MB
busybox latest e02e811dd08f About a minute ago 1.093 MB
dataonly 컨테이너 시작
dataonly 이미지가 생겼으므로 dataonly 컨테이너를 시작합니다.
조금 까다 롭지만 컨테이너 이름에
dataonly
라는 이름을 지정하여 시작합니다.이미지 이름 : dataonly
컨테이너 이름 : dataonly
terminal
# $ docker run [オプション] コンテナ名 イメージ名
$ docker run -it --name dataonly dataonly
/ #
/ # ls -la
total 44
drwxr-xr-x 20 root root 4096 Oct 13 08:54 .
drwxr-xr-x 20 root root 4096 Oct 13 08:54 ..
-rwxr-xr-x 1 root root 0 Oct 13 08:54 .dockerenv
drwxr-xr-x 2 root root 12288 Oct 7 18:18 bin
drwxr-xr-x 5 root root 380 Oct 13 08:54 dev
drwxr-xr-x 2 root root 4096 Oct 13 08:54 etc
drwxr-xr-x 2 nobody nogroup 4096 Oct 7 18:18 home
dr-xr-xr-x 99 root root 0 Oct 13 08:54 proc
drwxr-xr-x 2 root root 4096 Oct 13 08:54 root
dr-xr-xr-x 12 root root 0 Oct 13 08:54 sys
drwxrwxrwt 2 root root 4096 Oct 7 18:18 tmp
drwxr-xr-x 3 root root 4096 Oct 7 18:18 usr
drwxr-xr-x 5 root root 4096 Oct 13 08:54 var
/ # exit で抜ける
-it
옵션 정보-i는 Keep STDIN open even if not attached
표준 입력을 계속 열어 주십시오.
-t는 Allocate a pseudo-TTY
의사 tty를 나눈다.
참고: htps //w w. 얌무로. 코m/엔트리/2018/01/11/224932
컨테이너가 생성되었는지 확인
terminal
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a919ca85d6a7 dataonly "sh" 3 minutes ago Exited (0) 2 seconds ago dataonly
② webserver 컨테이너 · dbserver 컨테이너 생성
Docker Compose를 사용하여 여러 컨테이너를 중앙 집중화(오케스트레이션)합니다.
중앙 관리 설정은
docker-compose.yml
에 설명되어 있습니다.docker-compose.yml
# webサーバーの設定
webserver:
# wordpressのイメージを取得。ローカルにないので、DockerHubから4.9.8-php7.0-apacheを指定して取得
image: wordpress:4.9.8-php7.0-apache
# 80番ポートに転送 ホストポート:コンテナポート
ports:
- "80:80"
# 別コンテナのエイリアスを設定 (リンク)
links:
- "dbserver:mysql"
# dbサーバーの設定
dbserver:
# mysqlのイメージを取得
image: mysql:5.6
# データのマウント先を指定 (先ほど作成したdataonlyコンテナ)
volumes_from:
- dataonly
# 環境変数
environment:
MYSQL_ROOT_PASSWORD: password
③ Docker Compose로 다중 컨테이너 시작
webserver 컨테이너 및 dbserver 컨테이너 시작
terminal
# -d でコンテナをデーモン化
$ docker-compose up -d
:
:
Status: Downloaded newer image for wordpress:latest
Creating wordpress_dbserver_1
Creating wordpress_webserver_1
확인
terminal
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------
wordpress_dbserver_1 docker-entrypoint.sh mysqld Up 3306/tcp
wordpress_webserver_1 docker-entrypoint.sh apach ... Up 0.0.0.0:80->80/tcp
서버가 도달했습니다.
htp://0.0.0.0:80 방문

④ 데이터 확인
dataonly에 데이터가 마운트되었는지 확인합니다.
dataonly 컨테이너
# dataonlyコンテナにアタッチ
$ docker start -ia dataonly
# 「①dataonlyコンテナを生成」 で指定したパス
$ ls /var/lib/mysql/
ib_logfile0 ibdata1 mysql performance_schema wordpress
auto.cnf ib_buffer_pool ib_logfile1 ibtmp1 mysql.sock sys
마운트 되네요!
그리고 여기서 주목하고 싶은 것은 dataonly 컨테이너가 작동하지 않습니다.
일반 컨테이너는 삭제하면 데이터도 사라져 버리지만,
데이터 볼륨으로 지정된 컨테이너는 컨테이너가 삭제되어도 데이터가 지속됩니다.
또한 컨테이너를 압축 파일이나 이미지화할 때도 실제 데이터가 없기 때문에 안심입니다.
MySQL 연결
Docker compose에서 시작한 컨테이너를 확인하고 "dbserver"컨테이너의 IP를 표시합니다.
# Docker composeで立ち上げたコンテナを確認
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------
wordpress_dbserver_1 docker-entrypoint.sh mysqld Up 3306/tcp
wordpress_webserver_1 docker-entrypoint.sh apach ... Up 0.0.0.0:80->80/tcp
# inspectコマンドでコンテナのIPを表示
$ docker inspect wordpress_dbserver_1 | grep IPAddress
"IPAddress": "172.17.0.2",
:
Docker로 구축된 가상 호스트의 컨테이너에 연결
# docker-compose run [オプション] [サービス] [コマンド]
$ docker-compose run dbserver mysql -h 172.17.0.2 -u root -p
# docker-compose.ymlで指定したパスワード
Enter password:password
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
5 rows in set (0.01 sec)
mysql>
※
dbserver
는 docker-compose.yml 로 지정한 명칭입니다. 매우 까다로운또한
docker-compose run
명령으로 실행 한 다음 IP 주소를 지정합니다.Docker의 네트워크가 구축되었기 때문입니다.

마지막으로
매우 기억하는 용어와 명령이 많습니다.
꾸준히 갈 수밖에 없습니다.
수고하셨습니다!
링크
Docker 입문 #1 【Docker란】
Docker 입문 #2 【Docker 튜토리얼】
Docker 입문 #3 【WordPress 환경 구축】
Docker 입문 #4 【CodeIgniter 환경 구축】
Docker 입문 #5 【Ruby on Rails5 환경 구축】
Docker 명령 치트 시트