背景
表題にある通り、インターネットに接続していないオフライン環境で、尚且つ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を引っ張ってきます。
$ sudo yum update
$ sudo yum install -y docker
$ sudo service docker start
Starting cgconfig service: [ OK ]
Starting docker: . [ OK ]
次にDockerコマンドを利用し、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
[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を確認しましょう。
[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で丸めます。
[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を導入します。
[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の起動をします。
[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してください。
[root@docker01 docker]# ls
wordpress.tar mysql.tar
[root@docker01 docker]# docker load -i wordpress.tar
[root@docker01 docker]# docker load -i mysql.tar
[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のコンテナを構築します。
[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
[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コンテナが立ち上がってないよ、とエラーが出ましたがコンテナの構築は完了しました。
[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
なので立ち上げてあげましょう。
[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!
おわりに
CentOSの6と7でコマンドがガラッと変わるので6系で構築しよ〜と思ったのですが、思ったよりDockerのバージョンが上がるのが早く、自分遅れてるなあと思った次第です。
CentOS 7用のDockerパッケージが以下にありますが、4半期に2回ごとくらいで更新があるようです。
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/