dockerを使ってみる
docker search †
コンテナにできるイメージを探します. postgresqlを含むイメージを求めるなら
[illya@s ~]$ docker search postgresql --filter "stars=50"
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
postgres The PostgreSQL object-relational database sy… 8832 [OK]
sameersbn/postgresql 156 [OK]
paintedfox/postgresql A docker image for running Postgresql. 77 [OK]
bitnami/postgresql Bitnami PostgreSQL Docker Image 77 [OK]
[illya@s ~]$
「docker search &color(magenta){<検索語>}:」な感じです。いろいろ表示されますが、フィルター機能を使って絞り込めるみたい.
他に下記サイトでも調べられる.
https://hub.docker.com/search?q=&type=image
ここでは単純にOSをコンテナにしたいと思います.
[illya@s ~]$ docker search centos --filter "is-official=true"
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6382 [OK]
[illya@s ~]$
しかし、「docker search」ではtagまでは調べられない。なので結局上記のサイトで調べることになる.
っで調べた結果CentOS7は「centos:centos7.9.2009」として用意されているような
docker pull †
イメージをダウンロードします
[illya@s ~]$ docker pull centos:centos7.9.2009
ダウンロードしたデータは /var/lib/docker/devicemapper/devicemapper/data に収めれれているような..
っで、これまでにダウンロードしたイメージは「docker images」で調べられる
[illya@s ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7.9.2009 8652b9f0cb4c 2 months ago 204MB
[illya@s ~]$
docker run †
コンテナの状態を意識しながらコマンドを実行する必要があるかも
まずはイメージからコンテナを作ります.
[illya@s ~]$ docker run -it --rm --name centos7test centos:centos7.9.2009 bash
[root@fc2bddf171ce /]#
「-it」はinteractiveでtty(ターミナル)を使う意味で、コマンドプロンプトが使えるとかの意かな.
「--rm」はこのコンテナは「exit」で消える事を意味する.
「--name」はコンテナに名前を付けてみた. 「--rm」を入れたので意味がないけど
「--cpuset-cpus=0,1,2」でcpuリソース制限が加えられるとあるが、topコマンドからは確認できない. どうすればいいのかは不明
終了するには「exit」とします.
次に「--rm」を外してコンテナを作ります
[illya@s ~]$ docker run -it --name centos7test centos:centos7.9.2009 bash
[root@1829df2ba5db /]#
この状態で他のターミナルから「docker ps」を実行すると
[illya@s ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1829df2ba5db centos:centos7.9.2009 "bash" 57 seconds ago Up 56 seconds centos7test
[illya@s ~]$
となる. 先ほどと同じように「exit」を行うと
[root@1829df2ba5db /]# exit
exit
[illya@s ~]$
コンテナから降りるが、「docker ps -a」ではまだコンテナ「1829df2ba5db」は存在している.
「--rm」を加えるとexitした後でコンテナは消える
[illya@s ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1829df2ba5db centos:centos7.9.2009 "bash" 2 minutes ago Exited (0) 34 seconds ago centos7test
[illya@s ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[illya@s ~]$
docker start †
STATUSが「Exited」なのでコンテナはあるけど、動いていないとなる. 再びこのコンテナを使うには「docker start」で起動させる必要がある
[illya@s ~]$ docker start centos7test
他の端末とかで確認すると
[illya@s ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1829df2ba5db centos:centos7.9.2009 "bash" 13 minutes ago Up 28 seconds centos7test
[illya@s ~]$
とある. コンテナは起動した. そしてそれに接続してみる
[illya@s ~]$ docker attach centos7test
[root@1829df2ba5db /]#
次に、「exit」ではコンテナが停止してしまうので、停止せずコンテナを降りる. それには「Ctrl-p」「Ctrl-q」を押下する
[root@1829df2ba5db /]# read escape sequence
[illya@s ~]$
となって、他の端末とかで確認すると
[illya@s ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1829df2ba5db centos:centos7.9.2009 "bash" 16 minutes ago Up 3 minutes centos7test
[illya@s ~]$
となる。
docker exec †
起動しているコンテナに再びアクセスしてプロセスを確認してみます
[illya@s ~]$ docker attach centos7test
[root@1829df2ba5db /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 23:05 pts/0 00:00:00 bash
root 15 1 0 23:11 pts/0 00:00:00 ps -ef
[root@1829df2ba5db /]#
PID[1]がbashであることが分かる. ここで一旦コンテナから「Ctrl-p」「Ctrl-q」で降りて
[root@1829df2ba5db /]# read escape sequence
[illya@s ~]$
次に、「docker exec -it」で繋ぐと
[illya@s ~]$ docker exec -it centos7test /bin/bash
[root@1829df2ba5db /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 23:05 pts/0 00:00:00 bash
root 16 0 0 23:14 pts/1 00:00:00 /bin/bash
root 30 16 0 23:14 pts/1 00:00:00 ps -ef
[root@1829df2ba5db /]#
とPID[1]以外にPID[16]でしかもTTYが異なるプロセスが表れる. 既存のプロセスに影響なく内部に潜り込めた.
ここで「exit」としてもPID[16]のプロセスが落ちるだけで、既存のプロセスには影響がなく
[illya@s ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1829df2ba5db centos:centos7.9.2009 "bash" 24 minutes ago Up 11 minutes centos7test
[illya@s ~]$
という感じでコンテナは稼働し続ける.
docker stop †
稼働中のコンテナを停止するには「docker stop」を使用する
[illya@s ~]$ docker stop centos7test
別の端末からは
[illya@s ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[illya@s ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1829df2ba5db centos:centos7.9.2009 "bash" 27 minutes ago Exited (137) 6 seconds ago centos7test
[illya@s ~]$
と「docker ps -a」でSTATUSが「Exited」となった.
docker commit †
作ったコンテナにアプリを入れてみます. まずコンテナを立ち上げて
[illya@s ~]$ docker start centos7test
centos7test
[illya@s ~]$ docker exec -it centos7test /bin/bash
[root@1829df2ba5db /]#
それからyumでアプリを入れる. httpdとphpを入れてみた
[root@1829df2ba5db /]# yum install httpd php
これでダウンロードしたimage(centos:centos7.9.2009)から異なった内容となる. 「yum install httpd php」で
っでこのコンテナをimageにするには「docker commit」を行う
コンテナから「Ctrl-p」「Ctrl-q」で降りて
[root@1829df2ba5db /]# read escape sequence
[illya@s ~]$
[illya@s ~]$ docker commit centos7test centos:centos7.9.httpd
sha256:a6d417d604e7cb81dd56c0cb8a243fa79a6a8be2bb520178cecabdfe182d272e
[illya@s ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7.9.httpd a6d417d604e7 21 seconds ago 348MB
centos centos7.9.2009 8652b9f0cb4c 2 months ago 204MB
[illya@s ~]$
と新たにイメージが作れる.
docker rm †
動いているコンテナは削除できない.
なのでコンテナを一旦停止してから削除します
[illya@s ~]$ docker stop centos7test
[illya@s ~]$ docker rm centos7test
docker rmi †
イメージを削除するには「docke rmi <image>」とします