Docker 입문 #3 【WordPress 환경 구축】

Docker 입문 #3 【WordPress 환경 구축】

2022-10-05 last update

12 minutes reading 인프라 도커 WordPress 입문
Docker Compose를 사용하여 php + mysql의 wordpress 환경을 로컬로 구축합니다.

완성도





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 명령 치트 시트