Closed RVIRUS0817 closed 5 years ago
dockerについて勉強したことをまとめていきます。
Dockerは、インフラ関係やDevOps界隈で注目されている技術の一つで、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム
Dockerは、Linuxのコンテナ技術を使ったもので、よく仮想マシンと比較される。VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かすが、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができる。そのため、軽量で高速に起動、停止などが可能である。
% tree wordpress
wordpress
├── dataonly
│ └── Dockerfile
└── docker-compose.yml
wordpress/dataonly/以下にDockerfileを作成する
% cat dataonly/Dockerfile
# ベースとなるイメージをDockerHubから取得
FROM busybox
# 作成者
MAINTAINER Sakashita d0m4n0t8@gmail.com
# ボリュームの指定
VOLUME /var/lib/mysql
busybox=最小構成のlinux ボリュームとは「データを永続化できる場所」のことで、 外部HDDのようなイメージ。データのマウント先になる。 dbserverにマウントする。
% 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という名前のコンテナを起動する
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
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
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
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コンテナは稼働していないが、データボリュームとして指定しているので、 データはコンテナが停止していても永続的に保存される
% 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",
% 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のデータベースが確認できる
issueを作成ましたご確認おねがいします!
要件
docker-composeでdockerfileからコンテナを作り、wordpressを構築する
参考
https://qiita.com/yu-croco/items/bf54f007c84aba7c8da6 https://qiita.com/wMETAw/items/710bbbb328b78757463a