オフライン環境にあるCentOS6.9上にDockerを導入し、WordPressを構築する

#背景
表題にある通り、インターネットに接続していないオフライン環境で、尚且つCentOS6系というめちゃくちゃレガシーなシステムにDockerを構築しなければならないことになったので、その手順を紹介いたします。

なお、RHELは以下リンクにて明確にDocker on RHEL6はサポートしないと宣言しているので、良い子はなるたけ推奨環境で構築しましょうね。
`The version of docker that is maintained and supported by Red Hat is only available on RHEL 7 and above.`
https://access.redhat.com/solutions/1378023

じゃあどうするのかと言うと、Docker 1.7まではCentOS6に対応していたので、それを使って構築をしていくことになります。(Dockerの最新Verは2018/03/29現在なんと18。1.8ではなく18です。10倍だぞ10倍。)

#前提環境
-オフラインの環境
CentOS 6.9 64bit

-オンラインの環境（今回こちらでDocker及びWordPressのコンポーネントをDLする）
Amazon Linux AMI release 2017.09

-自分のPC
Mac OS X

#流れ
【オンライン環境にて】
Dockerを導入する
Docker pullでWordPressとMySQLのimageをDLする
imageをtarで丸めて自分のPCに転送する

【自分のPCにて】
Docker 1.7のrpmをDLしておく
オンライン環境から転送されたtarと、Docker1.7のrpmをオフライン環境に転送する

【オフライン環境にて】
転送されたrpmをyum localinstallで実行し、Dockerを導入する
転送されたtarをDocker loadで展開し、それをImageとしてコンテナを構築する


#手順
【オンライン環境にて】
Dockerを導入してImageを引っ張ってきます。

```shell:Dockerの導入
$ sudo yum update
$ sudo yum install -y docker
$ sudo service docker start
Starting cgconfig service:                                 [  OK  ]
Starting docker:    .                                  [  OK  ]
```

次にDockerコマンドを利用し、Imageを作成します。

```shell:WordPressのImage作成
[root@*** ~]# docker pull wordpress
Using default tag: latest
latest: Pulling from library/wordpress
2a72cbf407d6: Pull complete 
273cd543cb15: Pull complete 
ec5ac8875de7: Pull complete 
9106e19b56c1: Pull complete 
ee2f70ac7c7d: Pull complete 
7257ad6985e8: Pull complete 
18f5c2055da2: Pull complete 
85293a6fdd80: Pull complete 
9e797eeb0c14: Pull complete 
09b55b88e646: Pull complete 
2cd18314711e: Pull complete 
88b610931a5f: Pull complete 
b90052b881e9: Pull complete 
36317e1f49af: Pull complete 
6dbef1d5801a: Pull complete 
f98e14d31e08: Pull complete 
dbc1b2b39588: Pull complete 
280991283b71: Pull complete 
5c4360fbc4f6: Pull complete 
0623bccc9390: Pull complete 
Digest: sha256:b6189dc683704a5011f64d71166f3e712d64816d96750ba4636bcbf137c00903
Status: Downloaded newer image for wordpress:latest
```

```shell:MySQLのImage作成
[root@*** ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
2a72cbf407d6: Already exists 
38680a9b47a8: Pull complete 
4c732aa0eb1b: Pull complete 
c5317a34eddd: Pull complete 
f92be680366c: Pull complete 
e8ecd8bec5ab: Pull complete 
2a650284a6a8: Pull complete 
5b5108d08c6d: Pull complete 
beaff1261757: Pull complete 
c1a55c6375b5: Pull complete 
8181cde51c65: Pull complete 
Digest: sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c
Status: Downloaded newer image for mysql:latest
```

pullしたImageを確認しましょう。

```shell:imageの確認
[root@*** ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           latest              53046cdd8f97        6 days ago          408MB
mysql               latest              5195076672a7        2 weeks ago         371MB
```

次にImageをtarで丸めます。

```shell:tarで丸める。
[root@*** ~]# docker save -o wordpress.tar wordpress
[root@*** ~]# docker save -o mysql.tar mysql
[root@*** ~]# ls
docker  mysql.tar  wordpress.tar

```

これら2つのtarファイルを自分のPCにscpして転送します。
その手順は割愛しますが、Permissionを変更してあげないと転送時にErrorが出るので注意してください。




【自分のPCにて】
以下リンクにアクセスし、適当なディレクトリに保存します。
`https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm`

このrpmと、先に転送してきたmysql.tarとwordpress.tarをオフライン環境にscpで転送します。
rpmはどこに置いてもいいですが、/usr/local/srcに配置しています。
tarも別にどこでもいいですが、きれいに置きたい方は先にオフライン環境でDockerを導入しておいて、/root/docker配下に置くと良いです。

【オフライン環境にて】
まずはDockerを導入します。

```shell:Dockerの導入
[root@docker01 ~]# ls /usr/local/src/
docker-engine-1.7.1-1.el6.x86_64.rpm
[root@docker01 ~]# 
[root@docker01 ~]# 
[root@docker01 ~]# cd /usr/local/src/
[root@docker01 src]# pwd
/usr/local/src
[root@docker01 src]# 
[root@docker01 src]# yum localinstall --nogpgcheck docker-engine-1.7.1-1.el6.x86_64.rpm
読み込んだプラグイン:fastestmirror, security
ローカルパッケージ処理の設定をしています
(中略)

インストール:
  docker-engine.x86_64 0:1.7.1-1.el6                                                             

依存性関連をインストールしました:
  libcgroup.x86_64 0:0.40.rc1-24.el6_9                                                           

完了しました!
```

Dockerの起動をします。

```shell:Dockerの起動
[root@docker01 docker]# /etc/init.d/docker start
Starting docker:	                                   [  OK  ]
```

※起動せずにDockerコマンドを打つと以下エラーが出ます。

```
[root@docker01 docker]# docker load -i wordpress.tar
Post http:///var/run/docker.sock/v1.19/images/load: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
```


続いて転送してきたtarをDockerコマンドにて展開します。
tarは/root/dockerに配置していたので、適当にcdしてください。

```shell:imageの展開
[root@docker01 docker]# ls
wordpress.tar  mysql.tar
[root@docker01 docker]# docker load -i wordpress.tar
[root@docker01 docker]# docker load -i mysql.tar
```

```shell:imageの確認
[root@docker01 docker]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
wordpress           latest              b2a52346184e        6 days ago          407.8 MB
mysql               latest              b826e5c7185f        2 weeks ago         371.4 MB
```

展開したimageを指定する形でMySQLとWordPressのコンテナを構築します。

```shell:MySQLコンテナの構築
[root@docker01 docker]# docker run --name wordpress-mysql -e MYSQL_ROOT_PASSWORD=password -e MYSQL_USER=root -e MYSQL_PASSWORD=password -e MYSQL_DATABASE=wordpressdb -d mysql
ccd24ab5afebade6d9e86f87cc13b9eaf2b326792e3fffdcab97591affa0d319
```

```shell:WordPressコンテナの構築
[root@docker01 docker]# docker run --name tvc-wordpress -p 8080:80 --link wordpress-mysql:mysql -d wordpress
c4ece2aa07254f6485a0ce19f1f4a0f6c864efec8e6515c6d7c9b2d7a792eaf0
Error response from daemon: Cannot start container c4ece2aa07254f6485a0ce19f1f4a0f6c864efec8e6515c6d7c9b2d7a792eaf0: Cannot link to a non running container: /wordpress-mysql AS /tvc-wordpress/mysql
[root@docker01 docker]# 
```

wordpress-mysqlコンテナが立ち上がってないよ、とエラーが出ましたがコンテナの構築は完了しました。

```shell:コンテナの確認
[root@docker01 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
57b1568bc9da        wordpress           "docker-entrypoint.s   3 seconds ago                                               some-wordpress      
515ec7ecb8f8        wordpress           "docker-entrypoint.s   43 seconds ago                                              tvc-wordpress       

```

なので立ち上げてあげましょう。

```shell:コンテナの起動
[root@docker01 docker]# docker start wordpress-mysql 
wordpress-mysql
[root@docker01 docker]# docker start tvc-wordpress 
tvc-wordpress
[root@docker01 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                  NAMES
c4ece2aa0725        wordpress           "docker-entrypoint.s   11 minutes ago      Up 2 seconds        0.0.0.0:8080->80/tcp   tvc-wordpress       
ccd24ab5afeb        mysql               "docker-entrypoint.s   12 minutes ago      Up 41 seconds       3306/tcp               wordpress-mysql     
```

これでWordPressが立ち上がったので、実際にアクセスしてみましょう。

アクセス先は
`http://<オフライン環境のIP>:8080`
です。
こんな表示が出ればOK！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/167392/7b1ecf43-184a-a255-fb0e-43f2f7d4c746.png)


#おわりに
CentOSの6と7でコマンドがガラッと変わるので6系で構築しよ〜と思ったのですが、思ったよりDockerのバージョンが上がるのが早く、自分遅れてるなあと思った次第です。
CentOS 7用のDockerパッケージが以下にありますが、4半期に2回ごとくらいで更新があるようです。
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/