ローカルDockerでCentOS立てた時の忘備録 ~Docker基本(pull, run, save, load)~


何について書くのか

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

ありがとうございました。