Software DesignでDockerを知ってコマンドが覚えられないので自分用に使ってみたまとめです。 みなさんの役にも立つと思い記事にしました。

Dockerのインストールと設定

インストール

sudo dnf install docker

サービスの起動

sudo systemctl start docker
sudo systemctl enable docker

ユーザー権限でDockerを扱う方法

Fedoraデフォルトでは

sudo groupadd docker
sudo usermod -g docker kenken

Docker公式のチュートリアル

とりあえず Dokerのチュートリアルを読んで遊びましょう。

Dockerイメージの取得pull

Dockerイメージを取得するにはpullコマンドを使います。

docker pull centos

イメージの確認images

docker images

コンテナの実行runコマンド

docker run centos
  • centos ソフトウェアのイメージを持っているか確認。
  • Docker Hub からイメージをダウンロード。
  • コンテナにイメージを載せて(読み込んで)「実行」する。
docker run -it centos /bin/bash
[root@cee81536ebd5 /]#

Ctrl+p,Ctrl+qを押すとコンテナが起動したままホストの操作に戻る事が出来ます。そのままexitするとコンテナが終了します。

イメージだけ指定してrunコマンドを実行すると自動でタグ付けされます。また、IDも自動で割り振られます。IDは数字とアルファベットのランダムなものが割り振られますが、タグはユーザーにわかりやすい名前がつけられます。
--nameをつけると任意のコンテナ名がつけられます。

docker run -it --name mycentos centos /bin/bash

-itオプションは以下の意味です。

-i コンテナの標準入力を開く。/bin/bashなどでコンテナを操作する際に指定。
-t tty(端末デバイス)を確保する。/bin/bashなどでコンテナを操作する際に指定。
-d バックグラウンドで実行する。

-dでバックグラウンドで動作

コンテナをバックグラウンドで実行するには、-dオプションを用いて、

docker run -it -d 
docker run -it -d centos

参考: CoreOS dockerのコマンド - 忘れないうちにメモしよう。

コンテナ停止後そのコンテナを削除-rm

docker run -rm -it centos /bin/bash
docker run -rm -it [イメージID]or[イメージ名] /bin/bash

ホストのディレクトリをコンテナにマウントする-v

docker run -it -v [ホストディレクトリ]:[コンテナディレクトリ] [イメージ名]  /bin/bash
docker run -it -v /home/kenken/docker/centos:/root/test centos /bin/bash

コンテナに環境変数を設定する-e

-e [変数名]=[値]でコンテナに環境変数を設定出来ます。下記の例はDocker公式のMySQLを扱う例です。

説明のためmysql準備します。

docker pull mysql
docker run -d --name mymysql -e MYSQL_ROOT_PASSWORD=root mysql

コンテナ同士を連携させる--link

docker pull wordpress
docker run -d --name wordpress -p 8000:80 --link mymysql:mysql wordpress

コンテナの稼働状況を確認するpsコマンド

確認

docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2121ae973b64        centos              "/bin/bash"         4 seconds ago       Up 2 seconds                            stupefied_mirzakhani
d94e92c4254d        centos              "/bin/bash"         5 minutes ago       Up 5 minutes                            evil_murdock
cee81536ebd5        centos              "/bin/bash"         31 minutes ago      Up 31 minutes                           compassionate_lumiere

停止しているコンテナも表示する

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
2121ae973b64        centos              "/bin/bash"         4 minutes ago       Up 4 minutes                                   stupefied_mirzakhani
4cb9d5fafd5c        centos              "/bin/bash"         9 minutes ago       Exited (0) 9 minutes ago                       prickly_archimedes
d94e92c4254d        centos              "/bin/bash"         9 minutes ago       Up 9 minutes                                   evil_murdock
e32ac9745879        centos              "-d"                9 minutes ago       Created                                        elegant_williams
cee81536ebd5        centos              "/bin/bash"         35 minutes ago      Up 35 minutes                                  compassionate_lumiere

コンテナの停止stop

docker stop [コンテナID]or[コンテナ名]
docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
2121ae973b64        centos              "/bin/bash"         4 minutes ago       Up 4 minutes                                   stupefied_mirzakhani
4cb9d5fafd5c        centos              "/bin/bash"         9 minutes ago       Exited (0) 9 minutes ago                       prickly_archimedes
d94e92c4254d        centos              "/bin/bash"         9 minutes ago       Up 9 minutes                                   evil_murdock
e32ac9745879        centos              "-d"                9 minutes ago       Created                                        elegant_williams
cee81536ebd5        centos              "/bin/bash"         35 minutes ago      Up 35 minutes                                  compassionate_lumiere

コンテナ名で停止させるにはNAMESの項目を指定します。 例えば上の例だと

docker stop compassionate_lumiere

IDの項目を指定するならば、

docker stop d94e92c4254d

コンテナの削除rm

指定して削除

docker rm [イメージID]or[イメージ名] 

例を示すと

docker rm compassionate_lumiere

コンテナが停止していないのに削除しようとするとエラーが出ます。

docker rm 2121ae973b64
Error response from daemon: You cannot remove a running container 2121ae973b649a57f47162993d55e36442247821b10fcd08d0585efa603a9c3c. Stop the container before attempting removal or use -f

停止していなくても削除するにはエラーメッセージのように-fオプションをつけます。

docker rm -f 2121ae973b64
docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e32ac9745879        centos              "-d"                20 minutes ago      Created                                 elegant_williams
cee81536ebd5        centos              "/bin/bash"         46 minutes ago      Up 46 minutes                           compassionate_lumiere

docker stopでコンテナを停止すれば、コンテナを削除出来ます。

docker stop [コンテナID]or[コンテナ名]
docker rm [コンテナID]or[コンテナ名]
docker stop compassionate_lumiere
docker rm compassionate_lumiere

すべてのコンテナ削除


docker rm $(docker ps -qa)

イメージの削除rmi

docker rmi [イメージID]or[イメージ名]
docker images 
docker.io/mysql                     latest              f3694c67abdb        9 days ago          400.1 MB
docker.io/hello-world               latest              48b5124b2768        13 days ago         1.84 kB
docker.io/centos                    latest              67591570dd29        6 weeks ago         191.8 MB
docker.io/fedora                    latest              a1e614f0f30e        6 weeks ago         197.1 MB
docker.io/hello-world               latest              48b5124b2768        13 days ago         1.84 kB

イメージを削除するには

docker rmi hello-world

すべてのイメージを削除するには (実行するときは要注意

docker rmi $(docker images -qa)

コンテナ内への操作attach,exe

などとコンテナを起動させている状態で

docker attach [コンテナID]or[コンテナ名]
docker exec -it [コンテナID]or[コンテナ名]
 ps aux

docker attach はコンテナ内の[PID 1]のプロセスに対して接続します。 コンテナ実行時に-i、-tオプションを指定していれば、ログの出力やキーボードからの入力を受付られます。[Ctrl]+[C]、[Ctrl]+[d]などを入力するとシグナルが[PID 1]に直接送信され、プロセスが停止することがあるため注意が必要です。 (centosイメージから作ったコンテナは[Ctrl]+[d]でプロセスが停止しコンテナが終了します。) コンテナを終了させずにホストのプロセスに戻るには前述した[Ctrl]+[p]、[Ctrl]+[q]を押します。

docker execはコンテナに新しいプロセスを追加して実行します。docker attachとは違って別プロセスを追加するのでデバック時に重宝するコマンドです。別プロセスのため/bin/bashプロセスが終了するだけなのでコンテナは停止しない。

execの動作確認

docker run -it cnetos /bin/bash
docker exec -it compassionate_lumiere /bin/bash

コンテナにログインされたあと

ps -ef
 PID TTY      STAT   TIME COMMAND
    1 ?        Ss+    0:00 /bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sb
   14 ?        Ss     0:00 /bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sb
   29 ?        R+     0:00 ps -xe HOSTNAME=cee81536ebd5 TERM=xterm LS_COLORS=rs=

と別プロセスが実行されている(この場合だとPID14)。 コンテナも終了しない。

コンテナの情報(IPなど)

コンテナの情報を表示します。IPAdressが見られます。(サーバー環境を起動させないとIPアドレスが見えない?

docker inspect [コンテナID]or[コンテナ名]
docker inspect e32ac9745879ea0793c17bc
    {
        "Id": "e32ac9745879ea0793c17bc9802a01663a5df1fc6ffd422a82971859edcb2c78",
        "Created": "2017-01-26T09:52:33.652372061Z",
        "Path": "-d",
        "Args": [],
        "State": {
            "Status": "created",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 127,
以下省略

起動してるコンテナすべてのIPアドレスを見るには、

docker inspect `docker ps -l -q` | grep IPAddress | cut -d '"' -f 4
172.17.0.3
172.17.0.3

停止しているコンテナの起動start

startコマンドを使うと現在停止しているコンテナを起動させる事が出来ます。

docker start [コンテナID]or[コンテナ名]
docker stop compassionate_lumiere

オプションが指定されないとコマンド操作が出来ません。

docker start compassionate_lumiere

-a, --attach

起動と同時にコンテナへアタッチします。このオプションで起動した場合はコマンド操作などは出来ません。[Ctrl]+[c]でコンテナを抜ける必要があります。

docker start -a [コンテナID]or[コンテナ名]

-i, --interactive

起動と同時にコンテナにアタッチします。このオプションで接続した場合はインタラクティブモードとなるため、継続してコマンド操作などが可能です。

docker start -i [コンテナID]or[コンテナ名]

イメージの履歴

docker history [イメージID]or[イメージ名]
docker history centos
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
67591570dd29        6 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
           6 weeks ago         /bin/sh -c #(nop)  LABEL name=CentOS Base Ima   0 B                 
           6 weeks ago         /bin/sh -c #(nop) ADD file:940c77b6724c00d420   191.8 MB            
           4 months ago        /bin/sh -c #(nop)  MAINTAINER https://github.   0 B

コンテナのログを表示する

dcoker logs [コンテナID]or[コンテナ名]
docker logs compassionate_lumiere
[root@cee81536ebd5 /]# ls
anaconda-post.log  dev  home  lib64       media  opt   root  sbin  sys  usr
bin                etc  lib   lost+found  mnt    proc  run   srv   tmp  var
[root@cee81536ebd5 /]# exit
[root@cee81536ebd5 /]# exit
[root@cee81536ebd5 /]# ^C
[root@cee81536ebd5 /]# ^C 
[root@cee81536ebd5 /]# ^C
[root@cee81536ebd5 /]# exit
[root@cee81536ebd5 /]# ls
anaconda-post.log  dev  home  lib64       media  opt   root  sbin  sys  usr
bin                etc  lib   lost+found  mnt    proc  run   srv   tmp  var
[root@cee81536ebd5 /]# ps
  PID TTY          TIME CMD
    1 ?        00:00:00 bash
   17 ?        00:00:00 ps
[root@cee81536ebd5 /]# ps -a
  PID TTY          TIME CMD
   18 ?        00:00:00 ps
[root@cee81536ebd5 /]# 
[root@cee81536ebd5 /]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.3  0.0  11776  2772 ?        Ss   03:16   0:00 /bin/bash
root        19  0.0  0.0  47448  3236 ?        R+   03:16   0:00 ps -aux
[root@cee81536ebd5 /]# exit

上の例のようにコンテナでのコマンド履歴が表示されるので便利。 Dockerfileを書くときにも役立ちますね。

コンテナのプロセスを表示するtop

起動しているコンテナのプロセスを表示します。

docker top [コンテナID]or[コンテナ名]
docker top compassionate_lumiere
docker top 60bf1a7ccfcb 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                28962               28946               0                   1月27                pts/3               00:00:00            /bin/bash

コンテナをコミットcommit

docker commit [コンテナID]or[コンテナ名] [リポジトリ[:タグ]]
docker commit compassionate_lumiere kenkenspin/centos
docker images|head
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
kenkenspin/centos                   latest              49e094b24ffb        46 seconds ago      294.7 MB
                                            a1fea63d0b4a        5 minutes ago       294.7 MB
kenkenspin/centos                   httpd               e0e6867a47b7        3 days ago          316 MB
kenkenspin/spin                     latest              3d54e097a985        4 days ago          561 MB

Dockerfileからbuild

docker build -t [イメージID:tag]or[イメージ名:tag] .

カレントディレクトリにDockerfileの中身を以下のように書いて

FROM centos:latest

RUN yum update -y
RUN yum install -y httpd

ADD http/index.html /var/www/html

RUN chown -R apache:apache /var/www/html

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
docker build -t centos:httpd .
Sending build context to Docker daemon 5.632 kB
Step 1 : FROM centos:latest
 ---> 67591570dd29
Step 2 : RUN yum update -y
 ---> Using cache
 ---> d4794a4c913c
Step 3 : RUN yum install -y httpd
 ---> Using cache
 ---> 0fa8bf705b9c
Step 4 : ADD http/index.html /var/www/html
 ---> Using cache
 ---> 58a0c8855775
Step 5 : RUN chown -R apache:apache /var/www/html
 ---> Using cache
 ---> 6dbb44e2bdb9
Step 6 : CMD /usr/sbin/httpd -D FOREGROUND
 ---> Using cache
 ---> e0e6867a47b7
Successfully built e0e6867a47b7
 docker images |head
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
kenkenspin/centos                   latest              49e094b24ffb        11 minutes ago      294.7 MB
                                            a1fea63d0b4a        16 minutes ago      294.7 MB

タグ付けtag

docker tag [イメージID:タグ]or[イメージ名:タグ] 新しいリポジトリ[:タグ]
docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
60bf1a7ccfcb        spin                "/bin/bash"         3 days ago          Up 3 days                               modest_tesla
cee81536ebd5        centos              "/bin/bash"         3 days ago          Up 40 minutes                           compassionate_lumiere

docker commit modest_tesla

docker images |head

REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
                                            c632effdab58        52 seconds ago      561 MB
kenkenspin/centos                   latest              328804cd7497        8 minutes ago       561 MB
   
docker tag c632effdab58 kenkenspin/centos:httpd
docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
kenkenspin/centos                   httpd               dff5d7864d9b        3 minutes ago       561 MB
kenkenspin/centos                   latest              dff5d7864d9b        3 minutes ago       561 MB
                                            49e094b24ffb        41 minutes ago      294.7 MB

レジストリ関連の操作

自分用Docker hubアカウントでDocker hubアカウントを作ります。

Dockerレジストリにログインlogin

docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (kenkenspin): 
Password: 
Login Succeeded

Login Succeededと表示されればLogin成功です。

リポジトリにイメージをアップpush

login出来たらレジストリにイメージを送信します。Docker Hubに送信するには[ユーザー名/リポジトリ]を指定します。送信前にtagコマンドでタグを付けておきます。

docker push kenkenspin/centos
 docker commit compassionate_lumiere
 docker tag 328804cd7497 kenkenspin/centos
 docker push kenkenspin/centos
The push refers to a repository [docker.io/kenkenspin/centos]
3916b2a3c258: Pushed 
b92a341178ed: Pushed 
1fb9c8d9774f: Pushed 
a858666d4841: Pushed 
34e7b85d83e4: Mounted from library/centos 
httpd: digest: sha256:0424d54b27acbd1b4af818808c46211ed414abd22879002b7a78b22c2bd94d22 size: 1367
7fbc50ba74a8: Pushed 
34e7b85d83e4: Layer already exists 
latest: digest: sha256:b5ee1500a6a947ba5f8dec1083a71863584abcfdf0d6e722fe2450f207382b9d size: 741

Docker hub上のイメージを検索search

docker search [検索語]
docker search wordpress

INDEX       NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/wordpress                     The WordPress rich content management syst...   1517      [OK]       
docker.io   docker.io/appcontainers/wordpress       Centos/Debian Based Customizable Wordpress...   33                   [OK]
docker.io   docker.io/bitnami/wordpress             Bitnami Docker Image for WordPress              28                   [OK]
docker.io   docker.io/kaihofstetter/wordpress-cli   Installs a configured and ready to use Wor...   13                   [OK]
docker.io   docker.io/centurylink/wordpress         Wordpress image with MySQL removed.             12                   [OK]
docker.io   docker.io/trafex/wordpress              Wordpress container with Nginx 1.10 & PHP-...   5                    [OK]
docker.io   docker.io/maximiliend/wordpress         A enhanced docker image of WordPress with ...   4                    [OK]
docker.io   docker.io/devgeniem/wordpress-server    Minimal wordpress server with nginx and ph...   2                    [OK]
docker.io   docker.io/dsifford/wordpress            A WordPress docker environment that just w...   2                    [OK]
docker.io   docker.io/scjalliance/wordpress         WordPress with GD and FreeType                  2                    [OK]
docker.io   docker.io/bakudankun/wordpress-ja       WordPress Japanese Edition forked from off...   1                    [OK]
docker.io   docker.io/ddaishin/wordpress            Wordpress日本語最新版 Xdebug OSX...                   1                    [OK]
docker.io   docker.io/dsteinkopf/wordpress          wordpress clone plus some php extensions        1                    [OK]
docker.io   docker.io/appeine/wordpress             Container holding WordPress sources             0                    [OK]
docker.io   docker.io/deardooley/wordpress          Production-ready minimal Wordpress images.      0                    [OK]
docker.io   docker.io/derjudge/wordpress            1:1 clone of docker-library/wordpress with...   0                    [OK]
docker.io   docker.io/ikoptiev/wordpress            Official Wordpress image with max file upl...   0  

Docker Hubからログアウトlogout

docker logout

システム管理用コマンド

バージョン表示version

Dockerクライアントとサーバーのバージョンを表示します。

docker version

Client:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-common-1.12.6-5.git037a2f5.fc25.x86_64
 Go version:      go1.7.4
 Git commit:      037a2f5/1.12.6
 Built:           Wed Jan 18 12:11:29 2017
 OS/Arch:         linux/amd64

Server:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-common-1.12.6-5.git037a2f5.fc25.x86_64
 Go version:      go1.7.4
 Git commit:      037a2f5/1.12.6
 Built:           Wed Jan 18 12:11:29 2017
 OS/Arch:         linux/amd64

Dockerサーバー情報info

docker info
Containers: 7
 Running: 3
 Paused: 0
 Stopped: 4
Images: 37
Server Version: 1.12.6
Storage Driver: devicemapper
 Pool Name: docker-8:4-394314-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: xfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 3.719 GB
 Data Space Total: 107.4 GB
 Data Space Available: 103.7 GB
 Metadata Space Used: 8.184 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.139 GB
 Thin Pool Minimum Free Space: 10.74 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Data loop file: /home/kenken/docker/var/lib/devicemapper/devicemapper/data
 WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
 Metadata loop file: /home/kenken/docker/var/lib/devicemapper/devicemapper/metadata
 Library Version: 1.02.136 (2016-11-05)
Logging Driver: journald
Cgroup Driver: systemd
Plugins:
 Volume: local
 Network: bridge null host overlay
Swarm: inactive
Runtimes: oci runc
Default Runtime: oci
Security Options: seccomp selinux
Kernel Version: 4.9.4-201.fc25.x86_64
Operating System: Fedora 25 (Workstation Edition)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 2
CPUs: 4
Total Memory: 7.55 GiB
Name: z9lus.fedora
ID: TAV5:A55D:J376:S5G7:CZ33:SAM2:RPLG:JFYX:JFLZ:JT2O:WUJF:V7JX
Docker Root Dir: /home/kenken/docker/var/lib
Debug Mode (client): false
Debug Mode (server): false
Username: kenkenspin
Registry: https://index.docker.io/v1/
Insecure Registries:
 127.0.0.0/8
Registries: docker.io (secure)

参考文献

Software Design 2017年2月号 今始めるDocker
Qiita各サイト。