# Docker の導入

[TOC]

# Dockerインストール済みの場合



## Ubuntu18.04環境

```bash
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"
```

  • Proxyなし環境

## インストール済みの Docker 情報

特に設定を変更する必要なく Docker が使用できた。



## Docker の設定ファイル

### /etc/default/docker

デフォルト状態であり、次のように何も定義されていない状態である

```bash
% sudo sed -e '/^$/d' -e '/^#/d' /etc/default/docker
```

### /lib/systemd/system/docker.service

```bash
% dpkg -S docker | grep 'docker.service'
docker-ce: /lib/systemd/system/docker.service
```

```bash
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service
Wants=network-online.target
Requires=docker.socket

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
```





## インストール済みの Docker バージョン

### docker -v の結果

```bash
% docker --version
Docker version 18.06.1-ce, build e68fc7a
```



### docker info の結果

```bash
% sudo docker info
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 4
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.15.0-33-generic
Operating System: Ubuntu 18.04 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.819GiB
Name: Vostro-230
ID: CKQA:7IB4:J4FO:JGN5:ZQDQ:R2JE:FRBB:OSHB:XC3C:5OOQ:JYGP:WUAX
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
```



### docker ls の結果

```bash
% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
neko/httpd ver1.0 2912439fd984 5 months ago 261MB
nekochango/httpd ver1.0 5dba800fa703 5 months ago 261MB
enakai00/centos centos6 b8c94c5d2d7c 3 years ago 203MB
enakai00/centos centos7 3bd78cf8ed76 3 years ago 172MB
enakai00/centos latest 3bd78cf8ed76 3 years ago 172MB
```



## Docker の実行

### サンプル hello-world の実行

単にコンソールに表示するだけのアプリ

```bash
% sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/
```

## Docker のライフサイクル

![1551362291485](assets/1551362291485.png)



## Jenkinsci/jenkins イメージの導入

[参考にしたサイト](http://dev.classmethod.jp/tool/jenkins/jenkins-on-docker) より。



### 最新バージョンのイメージを入手する

```bash
% sudo docker pull jenkinsci/jenkins:latest
latest: Pulling from jenkinsci/jenkins
bc9ab73e5b14: Pull complete
193a6306c92a: Pull complete
e5c3f8c317dc: Pull complete
a587a86c9dcb: Pull complete
a4c7ee7ef122: Pull complete
a7c0dad691e9: Pull complete
367a6a68b113: Pull complete
60c0e52d1ec2: Pull complete
c9d22bc43935: Pull complete
3ca00ba19920: Pull complete
2d359ee21fb5: Pull complete
1aedd037c7a0: Pull complete
8f0cbea2fd28: Pull complete
315a720cf60f: Pull complete
ebfd21bd3643: Pull complete
c6d6bb8685be: Pull complete
7a88e65ad190: Pull complete
3b5587c478c2: Pull complete
8c3eec7b3557: Pull complete
7bf544b69d64: Pull complete
fe19092ec048: Pull complete
283ce97c8511: Pull complete
Digest: sha256:3a2753dff50a530c6111f9166e822e49ff108ca076bbbce5026ba0ce80b64044
Status: Downloaded newer image for jenkinsci/jenkins:latest
```



### イメージからコンテナを起動して、接続する

次のように1行目でコンテナイメージを起動して接続しており、2行目で接続後のプロンプトになっている。

2, 3行目は接続先の OS バージョンを表示している。

4, 5行目は jenkins バージョンを表示している。

```bash
% sudo docker run -it jenkinsci/jenkins:latest /bin/bash
jenkins@9f48669a83e6:/$ cat /etc/issue
Debian GNU/Linux 9 \n \l
jenkins@9f48669a83e6:/$ jenkins.sh --version
2.151
```



### プラグインをインストールする

https://www.kaizenprogrammer.com/entry/2018/09/22/165449 より。

> Docker イメージの中には ```install-plugin.sh``` というスクリプトがあり、実行するとインストールされる。

> 以下のように install-plugin.sh にプラグイン名を引数として渡せば、事前にプラグインがインストールされた Jenkins の Docker イメージになります。

#### Dockerfile の作成

以下、RUN の行が実行される

```bash
FROM jenkins/jenkins:2.151
RUN /usr/local/bin/install-plugins.sh docker-slaves github-branch-source:1.8
```

#### docker build の実行

> この Dockerfile があるディレクトリで docker build してみます。

実行前の docker image の結果

```bash
% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ed40d04da2ab About a minute ago 703MB
hello-world latest fce289e99eb9 8 weeks ago 1.84kB
jenkinsci/jenkins 2.151 b589aefe29ff 3 months ago 703MB
jenkinsci/jenkins latest b589aefe29ff 3 months ago 703MB
neko/httpd ver1.0 2912439fd984 5 months ago 261MB
nekochango/httpd ver1.0 5dba800fa703 5 months ago 261MB
enakai00/centos centos6 b8c94c5d2d7c 3 years ago 203MB
enakai00/centos centos7 3bd78cf8ed76 3 years ago 172MB
enakai00/centos latest 3bd78cf8ed76 3 years ago 172MB
```

docker build の実行

```bash
% sudo docker build ./ -t jenkins2.151
Sending build context to Docker daemon 125.4kB
Step 1/2 : FROM jenkinsci/jenkins:2.151
---> b589aefe29ff
Step 2/2 : RUN /usr/local/bin/install-plugins.sh docker-slaves github-branch-source:1.8
---> Running in 6e0030cdeeff
Creating initial locks...
Analyzing war...
Registering preinstalled plugins...
Downloading plugins...
Downloading plugin: docker-slaves from https://updates.jenkins.io/download/plugins/docker-slaves/latest/docker-slaves.hpi
Downloading plugin: github-branch-source from https://updates.jenkins.io/download/plugins/github-branch-source/1.8/github-branch-source.hpi
> docker-slaves depends on workflow-support:2.2;resolution:=optional,docker-commons:1.3.1,durable-task:1.12;resolution:=optional,workflow-step-api:2.3;resolution:=optional
Skipping optional dependency workflow-support
Skipping optional dependency durable-task
Downloading plugin: docker-commons from https://updates.jenkins.io/download/plugins/docker-commons/latest/docker-commons.hpi
Skipping optional dependency workflow-step-api
> github-branch-source depends on github-api:1.75,github:1.14.0,credentials:1.22,scm-api:1.2,git:2.3
Downloading plugin: github-api from https://updates.jenkins.io/download/plugins/github-api/latest/github-api.hpi
Downloading plugin: github from https://updates.jenkins.io/download/plugins/github/latest/github.hpi
Downloading plugin: credentials from https://updates.jenkins.io/download/plugins/credentials/latest/credentials.hpi
Downloading plugin: scm-api from https://updates.jenkins.io/download/plugins/scm-api/latest/scm-api.hpi
Downloading plugin: git from https://updates.jenkins.io/download/plugins/git/latest/git.hpi
> docker-commons depends on authentication-tokens:1.3,credentials-binding:1.12,credentials:2.1.13
Downloading plugin: authentication-tokens from https://updates.jenkins.io/download/plugins/authentication-tokens/latest/authentication-tokens.hpi
Downloading plugin: credentials-binding from https://updates.jenkins.io/download/plugins/credentials-binding/latest/credentials-binding.hpi
> scm-api depends on structs:1.9
Downloading plugin: structs from https://updates.jenkins.io/download/plugins/structs/latest/structs.hpi
> github-api depends on jackson2-api:2.9.7.1
Downloading plugin: jackson2-api from https://updates.jenkins.io/download/plugins/jackson2-api/latest/jackson2-api.hpi
> credentials depends on structs:1.7
> git depends on workflow-scm-step:2.4,workflow-step-api:2.10,credentials:2.1.14,git-client:2.7.0,mailer:1.18,matrix-project:1.7.1,parameterized-trigger:2.33;resolution:=optional,promoted-builds:2.27;resolution:=optional,scm-api:2.2.0,ssh-credentials:1.13,structs:1.10,token-macro:1.12.1;resolution:=optional
Downloading plugin: workflow-scm-step from https://updates.jenkins.io/download/plugins/workflow-scm-step/latest/workflow-scm-step.hpi
Downloading plugin: workflow-step-api from https://updates.jenkins.io/download/plugins/workflow-step-api/latest/workflow-step-api.hpi
Downloading plugin: git-client from https://updates.jenkins.io/download/plugins/git-client/latest/git-client.hpi
> authentication-tokens depends on credentials:1.22
Downloading plugin: mailer from https://updates.jenkins.io/download/plugins/mailer/latest/mailer.hpi
Downloading plugin: matrix-project from https://updates.jenkins.io/download/plugins/matrix-project/latest/matrix-project.hpi
Skipping optional dependency parameterized-trigger
Skipping optional dependency promoted-builds
Downloading plugin: ssh-credentials from https://updates.jenkins.io/download/plugins/ssh-credentials/latest/ssh-credentials.hpi
Skipping optional dependency token-macro
> credentials-binding depends on workflow-step-api:2.18,credentials:2.1.7,plain-credentials:1.3,ssh-credentials:1.11,structs:1.7
Downloading plugin: plain-credentials from https://updates.jenkins.io/download/plugins/plain-credentials/latest/plain-credentials.hpi
> workflow-scm-step depends on workflow-step-api:2.9
> workflow-step-api depends on structs:1.17
> plain-credentials depends on credentials:2.1.16
> ssh-credentials depends on credentials:2.1.17
> mailer depends on display-url-api:1.0
Downloading plugin: display-url-api from https://updates.jenkins.io/download/plugins/display-url-api/latest/display-url-api.hpi
> github depends on credentials:2.1.8,display-url-api:2.0,git:3.4.0,github-api:1.90,plain-credentials:1.1,scm-api:2.2.0,structs:1.10,token-macro:1.11
Downloading plugin: token-macro from https://updates.jenkins.io/download/plugins/token-macro/latest/token-macro.hpi
> matrix-project depends on junit:1.20,script-security:1.13
Downloading plugin: junit from https://updates.jenkins.io/download/plugins/junit/latest/junit.hpi
Downloading plugin: script-security from https://updates.jenkins.io/download/plugins/script-security/latest/script-security.hpi
> junit depends on workflow-api:2.22,workflow-step-api:2.12,script-security:1.30,structs:1.7
Downloading plugin: workflow-api from https://updates.jenkins.io/download/plugins/workflow-api/latest/workflow-api.hpi
> token-macro depends on workflow-step-api:2.7
> git-client depends on apache-httpcomponents-client-4-api:4.5.3-2.0,credentials:2.1.13,jsch:0.1.54.1,ssh-credentials:1.13,structs:1.9
Downloading plugin: apache-httpcomponents-client-4-api from https://updates.jenkins.io/download/plugins/apache-httpcomponents-client-4-api/latest/apache-httpcomponents-client-4-api.hpi
Downloading plugin: jsch from https://updates.jenkins.io/download/plugins/jsch/latest/jsch.hpi
> workflow-api depends on workflow-step-api:2.16,scm-api:2.2.6,structs:1.17
> jsch depends on ssh-credentials:1.14

WAR bundled plugins:


Installed plugins:
apache-httpcomponents-client-4-api:4.5.5-3.0
authentication-tokens:1.3
credentials-binding:1.18
credentials:2.1.18
display-url-api:2.3.0
docker-commons:1.13
docker-slaves:1.0.7
git-client:2.7.6
git:3.9.3
github-api:1.95
github-branch-source:1.8
github:1.29.4
jackson2-api:2.9.8
jsch:0.1.55
junit:1.27
mailer:1.23
matrix-project:1.13
plain-credentials:1.5
scm-api:2.3.0
script-security:1.53
ssh-credentials:1.14
structs:1.17
token-macro:2.6
workflow-api:2.33
workflow-scm-step:2.7
workflow-step-api:2.19
Cleaning up locks
Removing intermediate container 6e0030cdeeff
---> 547e15aa8236
Successfully built 547e15aa8236
Successfully tagged jenkins2.151:latest
```



docker build が完了すると、★の行が追加されている。

```
% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins2.151 latest 547e15aa8236 7 minutes ago 719MB ★
ed40d04da2ab 18 minutes ago 703MB
hello-world latest fce289e99eb9 8 weeks ago 1.84kB
jenkinsci/jenkins 2.151 b589aefe29ff 3 months ago 703MB
jenkinsci/jenkins latest b589aefe29ff 3 months ago 703MB
neko/httpd ver1.0 2912439fd984 5 months ago 261MB
nekochango/httpd ver1.0 5dba800fa703 5 months ago 261MB
enakai00/centos centos6 b8c94c5d2d7c 3 years ago 203MB
enakai00/centos centos7 3bd78cf8ed76 3 years ago 172MB
enakai00/centos latest 3bd78cf8ed76 3 years ago 172MB
```



### docker イメージ内の Jenkins を実行する

https://qiita.com/tomoeine/items/bf69c623c8968dc4f9da より。

上記 ★ のイメージに接続する

書式**

```
docker run [オプション] [REPOSITORY]:[TAG] [コマンド]
```

Jenkins を起動する

```bash
% sudo docker run -it jenkins2.151 /bin/bash
```





### docker イメージを改造する

#### $HOME を変更する

1.** docker 内の /etc/passwd をコピー&ペーストしてホスト上に作成する。

2.** docker 内の /etc/passwd の権限をメモする

3.** docker を停止させる。(docker内で ```exit``` を実行する)

4.** ホストにて、Dockerfile に次の記述を追加する。

```bash
FROM jenkinsci/jenkins:2.151

USER root
COPY passwd /etc/passwd
RUN chmod 644 /etc/passwd
RUN test ! -d /var/lib/jenkins && mkdir /var/lib/jenkins
RUN chown -R jenkins:jenkins /var/lib/jenkins
USER jenkins
RUN cd /var/lib/jenkins
RUN /usr/local/bin/install-plugins.sh docker-slaves github-branch-source:1.8
```

ちなみに、ホスト上に配置した passwd ファイルの中身は次のようにしている。

```bash
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false
jenkins:x:1000:1000::/var/lib/jenkins:/bin/bash
```

5.** docker build を実行する

```bash
% sudo docker build ./ -t jenkins2.151
(--snip--)

---> 0d1a7bd7fca9
Successfully built 0d1a7bd7fca9
Successfully tagged jenkins2.151:latest
```

6.** docker イメージを実行する(下記★★である)

```bash
% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins2.151 latest 0d1a7bd7fca9 8 minutes ago 719MB ★★
547e15aa8236 42 minutes ago 719MB
hello-world latest fce289e99eb9 8 weeks ago 1.84kB
jenkinsci/jenkins 2.151 b589aefe29ff 3 months ago 703MB
jenkinsci/jenkins latest b589aefe29ff 3 months ago 703MB
neko/httpd ver1.0 2912439fd984 5 months ago 261MB
nekochango/httpd ver1.0 5dba800fa703 5 months ago 261MB
enakai00/centos centos6 b8c94c5d2d7c 3 years ago 203MB
enakai00/centos centos7 3bd78cf8ed76 3 years ago 172MB
enakai00/centos latest 3bd78cf8ed76 3 years ago 172MB

% sudo docker run -it jenkins2.151:latest /bin/bash
```

7.** 一旦、```exit``` で docker を抜ける

8.** ホスト上のディレクトリと docker 内のディレクトリを紐付け(マウント)して、docker 内 jenkins を起動する

https://knjname.hateblo.jp/entry/2015/02/10/040833 より。

```bash
% sudo mkdir /var/lib/jenkins
% sudo chown -R 1000 /var/lib/jenkins
% sudo docker run -p 8080:8080 -p 50000:50000 -v /var/lib/jenkins:/var/lib/jenkins jenkins2.151:latest
(--snip--)
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

41a9da2ebaf345748fb0005c9c786a56

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
(--snip--)
```

















# メモ

## Docker を一気に停止させる

```bash
% sudo docker ps -a -q |xargs -I@ sudo docker stop @
```



## Dockerfile

> Docker は Dockerfile から命令を読み込み、自動的にイメージを構築できます。
> Dockerfile にイメージを作り上げる命令を全て記述し、docker build で イメージを構築します。

そこで、プラグイン導入処理を Dockerfile に書き出す。 (https://techblog.recochoku.jp/1022 を参考に進める)

  • FROM

- FROM の書き方は3通りあり、FROM でベースとなるイメージを指定します。
- Dockerfile では、コメントを除いて FROM を一番始めに書く必要があります。

```
FROM
FROM :
FROM @
```

  • COPY

- ```COPY ... ```
- COPY 命令は **** にある新しいファイルやディレクトリをコピーする命令です。
- コンテナ内のファイルシステム上にある **** に指定されたパスに追加します。

  • USER

- USER 命令は各種命令の実行時のユーザを指定します。

  • ENV

- ENV 命令は環境変数の設定を行います。


ホストマシン (= Dockerログイン前) にて次の操作をする。**

```bash
% vim Dockerfile
```

Dockerfile**

```makefile
FROM jenkinsci/jenkins:2.11

# install via apt
USER root

# install jenkins plugins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt

# drop back to the regular jenkins user - good practice
USER jenkins
```

plugins.txt**

```
jenkins@9f48669a83e6:/$ ls -l /usr/share/jenkins/
total 74152

  • rw-r--r-- 1 root root 75924398 Nov 11 20:56 jenkins.war

drwxr-xr-x 1 jenkins root 4096 Nov 11 20:56 ref
```









## Docker オプション一覧

以下、https://qiita.com/wMETAw/items/34ba5c980e2a38e548db より転記した。

```bash
% docker run [オプション] [イメージ名:タグ名] [引数]
```

オプション 説明
------------- ---------------------- -----------------------------------------------------
--name コンテナ名を指定 docker run --name "test" centos
-d バッググラウンド実行 docker run -d centos
-it コンソールに結果を出力 docker run -it --name "test" centos /bin/cal
-p host:cont ポートフォワーディング docker run -d -p 8080:80 httpd
--add-host ホスト名とIPを指定 docker run -it --add-host=test.com:192.168.1.1 centos
--dns DNSサーバを指定 docker run --dns=192.168.1.1 httpd
--mac-address MACアドレスを指定 docker run -it --mac-address="92:d0..." centos
--cpu-shares CPU配分 (全体で1024) docker run --cpu-shares=512 centos
--memory メモリの上限 docker run --memory=512m centos
-v ディレクトリの共有 docker run -v /c/Users/src:/var/www/html httpd
-e 環境変数を設定 docker run -it -e foo=bar centos /bin/bash
--env-file 環境変数リストから設定 docker run -it --env-file=env_list centos /bin/bash
-w 作業ディレクトリを指定 docker run -it -w=/tmp/work centos /bin/bash

## 稼働中のコンテナ操作

説明 コマンド 例(コンテナID=CID)
-------------------- --------------------------------------------------------- ----------------------------------------
コンテナ一覧 docker ps [オプション] docker ps
コンテナ確認 docker stats コンテナID docker stats CID
コンテナ起動 docker start [オプション] コンテナID docker start CID
コンテナ停止 docker stop [オプション] コンテナID docker stop CID
コンテナ再起動 docker restart [オプション] コンテナID docker restart CID
コンテナ削除 docker rm [オプション] コンテナID docker rm CID
コンテナ中断 docker pause コンテナID docker pause CID
コンテナ再開 docker unpause コンテナID docker unpause CID
コンテナ接続 docker attach コンテナID docker attach CID
コンテナログ docker logs [オプション] コンテナID docker logs CID
プロセス実行 docker exec [オプション] コンテナID コマンド [引数] docker exec -it CID /bin/cal
プロセス確認 docker top コンテナID docker top CID
ポート確認 docker port コンテナID docker port CID
コンテナ名変更 docker rename 現在名 新しいコンテナ名 docker rename now new
イメージ差分 docker diff コンテナID docker diff CID
ファイルコピー docker cp コンテナID:ファイル パス docker cp CID:/var/www/a.txt /Users/ryo/
イメージの作成 docker commit [オプション] コンテナID イメージ名[:タグ名] docker commit CID my_image:1.0
イメージを.tarへ出力 docker export コンテナID docker export CID
.tarからイメージ作成 docker import パスorURL - イメージ名[:タグ名] cat src.tar|docker import - web:1.0
イメージ保存 docker save [オプション] 保存ファイル名 [イメージ名] docker save -o src.tar web
イメージロード docker load [オプション] docker load -i sec.tar