何について書くのか
DockerでCentOSイメージコンテナを立て、アプリケーション環境を用意したが保存をしたい。
始めはイマイチ忘れてよくわからなくなる。
やったことベースで簡潔に纏めておきたかった。
コマンド自体はたくさんあるが、必要最低限のものだけ記載したので
私とやりたいことが似ていたら役立つかもしれません。
ローカル、と記載している理由は、いつもAWS上で使っていましたが
今回は自身のMac上で行ったため、です。
イメージを持ってくる
これから記載するのはすでに公開されているイメージを引っ張ってくる場合です。
「あーMacでCentOS7の検証したいな〜」 という場合は
# docker pull centos:centos7
これで持って来れます。
もちろん「単純に分離したいだけ」「自作のイメージを配布したいだけ」などなら
自分で作るので別にいいんですが、大体の場合私は
ローカルでCentOSなどのイメージを持ってきたいなんて場合が多い。
イメージさ、どこから持ってくるの?
Dockerhubです。
https://hub.docker.com
普通のCentosであればこの辺りを使います
https://hub.docker.com/_/centos?tab=tags
あ、もちろんサイトにわざわざ行かなくても、コマンドで探したりもできます。
他の用途だと、例えば
Deep LearningのためPython×TensorFlow環境用意するの面倒で
Kerasとか色々環境用意するのだるいな…
なんて時もベースイメージとしてこの辺り持って来れば済みます。
しかも、プロセスとして機能するDocker、メモリなりCPUを制限させておけば暴走の心配がほぼない。分離。
https://hub.docker.com/r/tensorflow/tensorflow/
↑よく使ってた
では、やっていきます。
欲しいイメージの検索。こちらはCentOSの場合。
# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5520 [OK]
ansible/centos7-ansible Ansible on Centos7 122 [OK]
jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.6.1810 x86… 111 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 99 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 62
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 57 [OK]
tutum/centos Simple CentOS docker image with SSH access 44
centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 39
kinogmt/centos-ssh CentOS with SSH 29 [OK]
centos/php-56-centos7 Platform for building and running PHP 5.6 ap… 22
pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 10
nathonfowlie/centos-jre Latest CentOS image with the JRE pre-install… 8 [OK]
drecom/centos-ruby centos ruby 6 [OK]
mamohr/centos-java Oracle Java 8 Docker image based on Centos 7 3 [OK]
darksheer/centos Base Centos Image -- Updated hourly 3 [OK]
…
ギャーイッパイデテキタ ( ◠‿◠ )
ここで行ってる検索は、Dockerhubでここに文字入れてるのと同じようなものです。(filter可)

Ubuntuイメージでやってみるの巻
ではこれから試しにUbuntuイメージを持ってきます。
念の為まずはイメージ検索します。
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 9855 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 334 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 228 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 186 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 99 [OK]
…
あ、大丈夫ですね。ちゃんとイメージ公開されています。
では一番上のOfficialイメージにしましょう。
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
35c102085707: Pull complete
251f5509d51d: Pull complete
8e829fe70a46: Pull complete
6001e1789921: Pull complete
Digest: sha256:d1~c94d90
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
なにもタグを指定しないとlatestを引っ張る模様。
https://hub.docker.com/_/ubuntu?tab=description
イメージの確認
持ってきたイメージを確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest a2a15febcdf3 6 days ago 64.2MB
※今後、REPOSITORY:TAGでよく指定する機会があります。
立ち上げ
では、実際に立ち上げてみます。
$ docker run -ti ubuntu:latest /bin/bash
root@df0c54ef3b07:/#
立ち上がって入れました。
root@df0c54ef3b07:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
…
確認できました。
Dockerコンテナが立ち上がっているのか確認するときは
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cfb97fea54fe ubuntu:latest "/bin/bash" About a minute ago Up About a minute peaceful_villani
です。
※以下補足です。
docker runにて
|オプション|説明|
|:---|:---:|--:|
|-ti| コンテナのプロセスにttyを割り当てる。|
|/bin/bash |bashで起動|
イメージの保存と読込
試しにdocker内でファイルを作成しておきます(新しくUbuntu立てた)
root@e7ff353d5a71:~# touch meguro
root@e7ff353d5a71:~# ls
meguro
現在のイメージは以前の状態。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest a2a15febcdf3 7 days ago 64.2MB
コンテナをイメージに変換して
$ docker commit be6e776efcc4 ubuntu:meguntu
sha256:~e67r2d
saveコマンドでイメージ保存!
$ docker save ubuntu:meguntu > meguntu.tar
確認。できてる!
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu meguntu 63322548e865 2 minutes ago 64.2MB
(今起動しているコンテナを停止。こうやってIDで指定もできる。)
$ docker stop be6e776efcc4
be6e776efcc4
(イメージも持っていない状態にします)
$ docker rmi ubuntu:meguntu
Untagged: ubuntu:meguntu
果たして保存されているのか?
ロードする
$ docker load < meguntu.tar
61f77b8c33fa: Loading layer [==================================================>] 2.048kB/2.048kB
Loaded image: ubuntu:meguntu
確認。できてる
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest a2a15febcdf3 7 days ago 64.2MB
では動かしてみる。本当に保存できてた…?
$ docker run -ti ubuntu:meguntu /bin/bash
root@d8eab066c577:/# cd
root@d8eab066c577:~# ls
meguro
できてたー!
まとめ
ということで、ローカルDockerでCentOSを立て、構築など変更をし、そのイメージ保存/ロードまでできました。
保存したイメージ、dockerhubで公開なり配布をすれば、Dockerのメリットを享受できますね。
少しでも、役に立った!復習できた!
と思って頂けたら、いいね!お願いしますm(_ _)m
ありがとうございました。