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>」とします


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-01-25 (月) 08:57:38 (82d)