naoya0408 / menta

0 stars 0 forks source link

dockerでwordpressを動かす #25

Closed RVIRUS0817 closed 4 years ago

RVIRUS0817 commented 5 years ago

要件

docker-composeでdockerfileからコンテナを作り、wordpressを構築する

参考

https://qiita.com/yu-croco/items/bf54f007c84aba7c8da6 https://qiita.com/wMETAw/items/710bbbb328b78757463a

naoya0408 commented 5 years ago

dockerについて勉強したことをまとめていきます。

dockerとは何なのか

naoya0408 commented 5 years ago

dockeを使うメリット

軽量なホストマシン上で隔離された環境を利用できる

naoya0408 commented 5 years ago

dockerの原則

1つのコンテナにつき1プロセス

naoya0408 commented 5 years ago

dockerでwordpressを動かす

ファイル構成

% tree wordpress
wordpress
├── dataonly
│   └── Dockerfile
└── docker-compose.yml

①dataonlyコンテナを作成する

wordpress/dataonly/以下にDockerfileを作成する

% cat dataonly/Dockerfile

# ベースとなるイメージをDockerHubから取得
FROM busybox

# 作成者
MAINTAINER Sakashita d0m4n0t8@gmail.com

# ボリュームの指定
VOLUME /var/lib/mysql

busybox=最小構成のlinux ボリュームとは「データを永続化できる場所」のことで、 外部HDDのようなイメージ。データのマウント先になる。 dbserverにマウントする。

Dockerfileをビルドする

% docker build -t dataonly .

Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM busybox
latest: Pulling from library/busybox
fc1a6b909f82: Pull complete
Digest: sha256:954e1f01e80ce09d0887ff6ea10b13a812cb01932a0781d6b0cc23f743a874fd
Status: Downloaded newer image for busybox:latest
 ---> af2f74c517aa
Step 2/3 : MAINTAINER Sakashita d0m4n0t8@gmail.com
 ---> Running in 489b1221f9ac
Removing intermediate container 489b1221f9ac
 ---> cfc997e7d409
Step 3/3 : VOLUME /var/lib/mysql
 ---> Running in bf93f47d1ea7
Removing intermediate container bf93f47d1ea7
 ---> bf4ed90dbdab
Successfully built bf4ed90dbdab
Successfully tagged dataonly:latest

作成したイメージにタグ名(dataonly)を付与する

作成されたイメージの確認

% docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
dataonly            latest              bf4ed90dbdab        2 minutes ago       1.2MB
busybox             latest              af2f74c517aa        11 days ago         1.2MB

dataonlyという名前でイメージが作成されたことがわかる

dataonlyコンテナの起動

作成したdataonlyというイメージを元にdataonlyという名前のコンテナを起動する docker run -it --name コンテナ名 イメージ名 dataonlyというイメージを元にdataonlyという名前のコンテナを起動してコンテナ内でコマンドを実行するという意味のコマンドとなる

% docker run -it --name dataonly dataonly

/ # ls -la
total 44
drwxr-xr-x    1 root     root          4096 Apr 14 12:24 .
drwxr-xr-x    1 root     root          4096 Apr 14 12:24 ..
-rwxr-xr-x    1 root     root             0 Apr 14 12:24 .dockerenv
drwxr-xr-x    2 root     root         12288 Apr  2 04:32 bin
drwxr-xr-x    5 root     root           360 Apr 14 12:24 dev
drwxr-xr-x    1 root     root          4096 Apr 14 12:24 etc
drwxr-xr-x    2 nobody   nogroup       4096 Apr  2 04:32 home
dr-xr-xr-x  182 root     root             0 Apr 14 12:24 proc
drwx------    1 root     root          4096 Apr 14 12:24 root
dr-xr-xr-x   13 root     root             0 Apr 14 12:24 sys
drwxrwxrwt    2 root     root          4096 Apr  2 04:32 tmp
drwxr-xr-x    3 root     root          4096 Apr  2 04:32 usr
drwxr-xr-x    1 root     root          4096 Apr 14 12:24 var

/ # exit

exitで抜けることができる。コンテナも停止する。

作成されたコンテナの確認

-aオプションをつけることで停止中のコンテナも表示することができる

% docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
c44598f025a7        dataonly            "sh"                9 minutes ago       Exited (0) 9 seconds ago                       dataonly

② webserverコンテナ・dbserverコンテナの生成

docker-composeを使うと、複数のコンテナから構成されるサービスを従来よりも簡単に管理できるようになる。docker-composeを導入すると、コンテナの構成を次のようなYAMLファイルで管理できる。

% less docker-compose.yml

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による複数コンテナの起動

2つのコンテナを起動させデーモン化する

% docker-compose up -d

Pulling dbserver (mysql:5.6)...
5.6: Pulling from library/mysql
27833a3ba0a5: Pull complete
864c283b3c4b: Pull complete
cea281b2278b: Pull complete
8f856c14f5af: Pull complete
9c4f38c23b6f: Pull complete
688342d0934f: Pull complete
1f90d0188066: Pull complete
6d31565f1a00: Pull complete
12062e921a90: Pull complete
066ae780ca9a: Pull complete
f6eece737bcc: Pull complete
Pulling webserver (wordpress:4.9.8-php7.0-apache)...
4.9.8-php7.0-apache: Pulling from library/wordpress
a5a6f2f73cd8: Pull complete
633e0d1cd2a3: Pull complete
fcdfdf7118ba: Pull complete
4e7dc76b1769: Pull complete
c425447c8835: Pull complete
75780b7b9977: Pull complete
33ed51bc30e8: Pull complete
7c4215700bc4: Pull complete
639b7d0ed708: Pull complete
e1df4ccb0bb1: Pull complete
657a147cbf42: Pull complete
229c264b8af4: Pull complete
5cef04289959: Pull complete
c2009df7e1e8: Pull complete
d882a2430e1b: Pull complete
121e52b27342: Pull complete
77ffca27a50d: Pull complete
78a8778abec4: Pull complete
Creating wordpress_dbserver_1 ... done
Creating wordpress_webserver_1 ... done

起動したコンテナの確認

% 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

ブラウザで80番ポートを指定してアクセスする

スクリーンショット 2019-04-14 21 52 19

MYSQLに接続する

dataonlyコンテナを起動し、データがマウントされているか確認する

% docker start -ia dataonly # -iaオプションは標準入出力へ接続するオプション

/ # ls -la /var/lib/mysql/
total 110616
drwxr-xr-x    5 999      999           4096 Apr 14 13:15 .
drwxr-xr-x    3 root     root          4096 Apr 14 12:24 ..
-rw-rw----    1 999      999             56 Apr 14 12:50 auto.cnf
-rw-rw----    1 999      999       50331648 Apr 14 13:15 ib_logfile0
-rw-rw----    1 999      999       50331648 Apr 14 12:50 ib_logfile1
-rw-rw----    1 999      999       12582912 Apr 14 13:15 ibdata1
drwx------    2 999      999           4096 Apr 14 12:50 mysql
drwx------    2 999      999           4096 Apr 14 12:50 performance_schema
drwx------    2 999      999           4096 Apr 14 12:50 wordpress

データがマウントされていることがわかる。 dataonlyコンテナは稼働していないが、データボリュームとして指定しているので、 データはコンテナが停止していても永続的に保存される

dbserverコンテナに入るためにIPアドレスを検索する

% 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

% docker inspect wordpress_dbserver_1 | grep IPAddress

            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

dbserverコンテナのMYSQLにアクセスする

% docker-compose run dbserver mysql -h172.17.0.2 -u root -p  # ipアドレスを指定してrootユーザでログインする

Enter password:   # docker-compose.ymlで指定したパスワードを入力する

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.43 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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を表示
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordpress          |
+--------------------+
4 rows in set (0.00 sec)

wordpressのデータベースが確認できる

naoya0408 commented 5 years ago

issueを作成ましたご確認おねがいします!