はじめに
初めてDockerを使うため、調べたことを自分用にメモします。
参考にさせていただいたページ
https://hub.docker.com/
https://weblabo.oscasierra.net/docker-ce-install-centos7/
実行環境(ホスト側)
# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
ゴール
ホストPC(CentOS7 64bit)にDockerをインストールして、
CentOS7のDockerイメージを起動させて、
Dockerイメージの変更、保存、破棄を行って、また最初から。をやってみる
以下、やったことメモ
ホストPC側のセットアップ
# yum update
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
読み込んだプラグイン:fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
# yum -y install docker-ce
...
エラー: docker-ce conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
エラー: docker-ce-cli conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest
とな。
# yum remove docker*
...
削除中:
docker x86_64 2:1.13.1-96.gitb2f74b2.el7.centos @extras 65 M
docker-client x86_64 2:1.13.1-96.gitb2f74b2.el7.centos @extras 13 M
docker-common x86_64 2:1.13.1-96.gitb2f74b2.el7.centos @extras 4.4 k
...
で削除対象になるパッケージを確認したところ回避できた.
# yum -y install docker-ce
...
インストール:
docker-ce.x86_64 3:18.09.7-3.el7
依存性関連をインストールしました:
containerd.io.x86_64 0:1.2.6-3.3.el7 docker-ce-cli.x86_64 1:18.09.7-3.el7
完了しました!
# systemctl enable docker
# systemctl start docker
で開始できた。
# ps aux | grep docker
root 83281 0.3 2.8 462248 52492 ? Ssl 15:35 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 83444 0.0 0.0 112724 992 pts/1 S+ 15:37 0:00 grep --color=auto docker
あんまりにもサービス開始にレスポンスがなかったので、
調べてみた。ちゃんと動いていそう。
systemctl stop docker
※止めるときは↑。
CentOSのDockerイメージを作ってみる
# docker pull centos:centos7
centos7: Pulling from library/centos
8ba884070f61: Pull complete
Digest: sha256:a799dd8a2ded4a83484bbae769d97655392b3f86533ceb7dd96bbac929809f3c
Status: Downloaded newer image for centos:centos7
でCentOS7をDockerHubから取得。
# docker run -it -d --name test1 centos:centos7
# docker exec -it test1 /bin/bash
test1という名前のCentOS7をDocker上で実行.
# uname -a
Linux ed00158e3703 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
# exit
で抜けれた。DockerはKernel共有すると聞いたけど、
このunameで取得できるのはホストPCなのか、Docker側なのか、
気になって眠れなかったので調べてみた。
# docker pull centos:centos6
centos6: Pulling from library/centos
ff50d722b382: Pull complete
Digest: sha256:dec8f471302de43f4cfcf82f56d99a5227b5ea1aa6d02fa56344986e1f4610e7
Status: Downloaded newer image for centos:centos6
# docker run -it -d --name test3 centos:centos6
e090c530af6713a4b1dbaa4841a9ff72276f2b9f6417f9de8620b4872ebafb29
# docker exec -it test3 /bin/bash
と、CentOS7と同じ要領でCentOS6を取得、実行。
[root@e090c530af67 /]# uname -a
Linux e090c530af67 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
たしかにkernelが共有されていることを確認。
# docker stop test1
で停止し、
# docker rm test1
で消せると。
サクサクすぎて怖いくらい簡単に消せる。
Dockerイメージを変更、保存、削除、復元をやってみる
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos6 d0957ffdf8a2 4 months ago 194MB
centos centos7 9f38484d220f 4 months ago 202MB
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
この状態からスタート
# docker run -it -d --name test1 centos:centos7
44672aa1dcb04ddbea58b897c3dfb700b873d4f0fc4a2617ea26ad82d69935b7
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44672aa1dcb0 centos:centos7 "/bin/bash" 4 seconds ago Up 3 seconds test1
# docker exec -it test1 /bin/bash
で、test1のDockerイメージを作成して、
test1にbashで入る。
[root@44672aa1dcb0 /]# cd
[root@44672aa1dcb0 ~]# touch test.txt
[root@44672aa1dcb0 ~]# ll
total 4
-rw-------. 1 root root 3415 Mar 5 17:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Jul 15 07:30 test.txt
[root@44672aa1dcb0 ~]# exit
test1上の/root
に、test.txt
を作成してみる。
# docker commit -m "test.txt add" 44672aa1dcb0 centos7-test1-1st
sha256:40d24fae2e41daebf700e7ea38a98052acc6b23f991eddf44d7ef13371927d8d
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7-test1-1st latest 40d24fae2e41 8 seconds ago 202MB
centos centos6 d0957ffdf8a2 4 months ago 194MB
centos centos7 9f38484d220f 4 months ago 202MB
となった状態で、
# docker exec -it test1 /bin/bash
からの
[root@44672aa1dcb0 ~]# vi test.txt
[root@44672aa1dcb0 ~]# ll
total 8
-rw-------. 1 root root 3415 Mar 5 17:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 4 Jul 15 07:40 test.txt
で、なんらかtext.txt
を修正.
# docker stop test1
# docker rm test1
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
で停止→全消し。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7-test1-1st latest 40d24fae2e41 2 minutes ago 202MB
centos centos6 d0957ffdf8a2 4 months ago 194MB
centos centos7 9f38484d220f 4 months ago 202MB
# docker run -it -d --name test1 centos7-test1-1st
88e69cb9ad2f53c1ff784d7c801490fb329d30b3fd0e065abae89ea3f7729838
# docker exec -it test1 /bin/bash
で、再生成してみる。
[root@88e69cb9ad2f /]# cd
[root@88e69cb9ad2f ~]# ll
total 4
-rw-------. 1 root root 3415 Mar 5 17:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Jul 15 07:30 test.txt
復元(もとに戻ること)を確認。
ここまでやって、次アクションが分かるようになった
- Docker network 概論
- https://qiita.com/TsutomuNakamura/items/ed046ee21caca4a2ffd9
- を参考に、イメージ作成時のネットワーク構成を考える。
- 【Docker】Dockerでホストのディレクトリをマウントする
- https://qiita.com/Yarimizu14/items/52f4859027165a805630
- を参考に、ホスト側のディレクトリをDocker側で同捜査できるか考える。
- Dockerでイメージをインポート・エクスポートする
- https://uxmilk.jp/55512
- を参考に、イメージ作成~出力を考える。