概要
Windows10にDocker環境を構築したのでいろいろ試してみた
今回はイメージからコンテナを生成/操作するDockerの最も基礎?となるコマンド一覧とまとめ
DockerとDockerコンテナの関連は以下を参照
動作環境とDocker環境構築方法は以下を参照
- Windows 10 Pro 64bit
- Docker for Windows
およその作業時間
1時間
参考書籍
プログラマのためのDocker教科書 第3章
わかりやすくてDockerの入門書的な良本です^^
みんな購入していて売れ行き好調なのか第2版が発売されていたのでリンク更新
使用コマンド一覧
docker create イメージ名
docker start コンテナ名
docker run イメージ名
docker stop コンテナ名
docker rm コンテナ名
docker ps
docker exec コンテナ名 実行コマンド
docker rename 古いコンテナ名 新しいコンテナ名
docker cp コピーファイル コピー先
docker diff コンテナ名
docker commit コンテナ名 ユーザ名/イメージ:タグ名
docker export/import コンテナ名/ファイル名
docker save/load ファイル名 イメージ名
docker stats コンテナ名
docker restart コンテナ名
docker pause/unpause コンテナ名
docker attach コンテナ名
docker top コンテナ名
docker port コンテナ名
docker version
docker info
docker create イメージ名
引数で指定したイメージでコンテナを作成するコマンド
(作成だけでコンテナは起動していない状態)
--nameはオプションのため指定しなくてもいいが、後述のコマンドで扱いやすいようにコンテナ名を指定して実行
> docker create --name "test01" ubuntu
5895e42d62916323965656711815d360bf98899683fc737ad8ac2bc9671c1486
>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5895e42d6291 ubuntu "/bin/bash" 5 seconds ago Created test01
docker ps -aでコンテナ一覧を表示して確認する
create直後はSTATUSがCreatedの状態となる
docker start コンテナ名
引数で指定したコンテナを起動するコマンド
>docker start test01
test01
>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
923e87f7a1f5 ubuntu "/bin/bash" 3 minutes ago Exited (0) 2 seconds ago test01
ubuntuのイメージなど、startのみで特に何も指定していないイメージは起動してすぐに停止する
docker run イメージ名
コンテナの生成/起動を一度に行うコマンド
コンテナ上での処理実行用に様々なオプションが用意されている
いくつかコマンドサンプルを以下に記載
コンテナ内でbashを実行
-iでコンテナの標準出力、-tでtty(端末デバイス)を使う指定をすることで
"#"以降は、コンテナ内のコマンドとなるため通常のLinuxと同様のコマンドが実行可能
(exitの入力でコンテナから出るとともにコンテナが停止する)
>docker run -it --name "test01" ubuntu /bin/bash
root@a090d2d08f07:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@a090d2d08f07:/#
コンテナ起動中は、docker psコマンドでコンテナの状態確認が可能
STATUSがUpとなる
>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a090d2d08f07 ubuntu "/bin/bash" 6 seconds ago Up 5 seconds test01
ネットワーク設定を指定して実行
-pでコンテナの80ポートをホストの8080ポートにマッピングするよう指定して実行
今回はバックグラウンド実行となるよう-dを指定したため、CONTAINER IDが返却される
>docker run -d -p 8080:80 httpd
6a790f3a798dbc9b0fe98fda0b43811424f02f47457b653598fe88fb4455e04a
>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a790f3a798d httpd "httpd-foreground" 6 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp upbeat_hopper
CPU/メモリ/ディレクトリ共有を指定して実行
-pオプションでCPU、-mオプションでメモリを指定する
-vオプションは : の左辺がローカルフォルダ、右辺がコンテナ上のディレクリを指定する
>docker run -c=512 -m=512m -v=C:\Users\user\test01:/var/log --name "test01" ubuntu
注意
ディレクトリ共有にはShared Drivesの設定が必要
(共有するドライブにチェックを入れる)
Settingsの開き方は以下を参照
WindowsでDocker環境を試してみる
Shared Drivesの設定で以下のエラーが出る場合は、エラーメッセージの通りfirewallの設定を見直してみる
(コマンド実行確認のためセキュリティソフトとWindowsFirewallを一時的にOFFにして実行してみたらエラーが解消された)
docker: Error response from daemon: Drive sharing seems blocked by a firewall.
See 'docker run --help'.
docker stop コンテナ名
引数で指定したコンテナを停止するコマンド
>docker stop test01
test01
>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a090d2d08f07 ubuntu "/bin/bash" 22 minutes ago Exited (0) 7 seconds ago test01
docker rm コンテナ名
引数で指定したコンテナを削除するコマンド
>docker rm test01
test01
>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker ps
コンテナの一覧/状態を表示するコマンド
>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a790f3a798d httpd "httpd-foreground" 6 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp upbeat_hopper
停止中のコンテナも表示する場合は-aを付ける
>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b66212ca95 ubuntu "/bin/bash" 5 seconds ago Exited (0) 4 seconds ago test01
docker exec コンテナ名 実行コマンド
コンテナ上でコマンドを実行する
>docker exec -it test01 /bin/bash
root@f6b3175e3c1d:/usr/local/apache2#
例えば、バックグラウンドで起動しているコンテナにアクセスするために、bashを実行してコンテナ内で任意のコマンドを実行するために使用する
docker topコマンドを実行するとbashが起動していることが確認できる
>docker top test01
PID USER TIME COMMAND
7208 root 0:00 httpd -DFOREGROUND
7235 bin 0:00 httpd -DFOREGROUND
7236 bin 0:00 httpd -DFOREGROUND
7237 bin 0:00 httpd -DFOREGROUND
7471 root 0:00 /bin/bash
docker rename 古いコンテナ名 新しいコンテナ名
コンテナ名を変更する
>docker rename test01 test02
docker cp コピーファイル コピー先
コンテナとファイルをやり取りする
- コンテナ上のファイルをローカルに保存する
>docker cp test01:/usr/local/apache2/logs/httpd.pid C:\Users\user\Documents
- ローカルファイルをコンテナ上にコピーする
>docker cp C:\Users\user\Documents\mod_httpd.pid test01:/usr/local/apache2/logs/
docker diff コンテナ名
イメージとコンテナとの差分を表示する
>docker diff test01
C /root
A /root/.bash_history
C /usr/local/apache2/logs
A /usr/local/apache2/logs/httpd.pid
A /usr/local/apache2/logs/mod_httpd.pid
docker commit コンテナ名 ユーザ名/イメージ:タグ名
コンテナからイメージを作成する
>docker commit test01 user/test1:0.1
sha256:e90b3d2f6a7c8473200652d53dcd2c3c18f03869639e1708dc568f37cbc557fc
>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
user/test1 0.1 e90b3d2f6a7c 11 seconds ago 177MB
docker export/import コンテナ名/ファイル名
コンテナをファイル出力(export)し、ファイルからイメージを生成(import)するコマンド
>docker export test01 > test01.tar
>docker import test01.tar
sha256:021d244b9b95f8acbaf357887667b8e86df94085af1140baaa6ec037f94abd3a
>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 021d244b9b95 6 seconds ago 174MB
docker save/load ファイル名 イメージ名
イメージをファイル出力(save)し、ファイルからイメージを生成(load)するコマンド
export/importと違い、イメージをそのままsave/loadするためタグ名等もそのまま復元する
>docker save -o httpdsave.tar httpd
>docker load -i httpdsave.tar
540a7775e563: Loading layer [==================================================>] 3.584kB/3.584kB
f57aec6a98ba: Loading layer [==================================================>] 2.56kB/2.56kB
7e41cdcec3c2: Loading layer [==================================================>] 5.12kB/5.12kB
ab31df24cf72: Loading layer [==================================================>] 46.59MB/46.59MB
c7f490f23a8d: Loading layer [==================================================>] 10.29MB/10.29MB
25b1f3c8c9ad: Loading layer [==================================================>] 3.584kB/3.584kB
Loaded image: httpd:latest
その他のコマンド
コンテナ起動時の環境指定
-eで環境変数指定
-wで作業ディレクトリ指定
> docker run -e 環境変数=値
> docker run -w ディレクトリ
コンテナ稼動確認
> docker stats コンテナ名
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
test01 0.01% 5.48MiB / 973.7MiB 0.56% 828B / 0B 2.92MB / 0B 82
Ctrl + C で停止する
コンテナ再起動
> docker restart コンテナ名
コンテナ中断/再開
> docker pause コンテナ名
>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3ef7a985ed4 httpd "httpd-foreground" 3 minutes ago Up 3 minutes (Paused) 80/tcp test01
> docker unpause コンテナ名
コンテナへの接続
> docker attach コンテナ名
稼動していないと接続できない上に、docker execコマンドがあるため、いまいち使用ケースがわからない、、、
コンテナ上で実行されているプロセス確認
> docker top コンテナ名
PID USER TIME COMMAND
24488 root 0:00 httpd -DFOREGROUND
24516 bin 0:00 httpd -DFOREGROUND
24517 bin 0:00 httpd -DFOREGROUND
24518 bin 0:00 httpd -DFOREGROUND
コンテナのポート転送確認
> docker port コンテナ名
80/tcp -> 0.0.0.0:8080
Dockerバージョン確認
> docker version
Client:
Version: 17.09.1-ce
API version: 1.32
Go version: go1.8.3
Git commit: 19e2cf6
Built: Thu Dec 7 22:22:26 2017
OS/Arch: windows/amd64
Server:
Version: 17.09.1-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: 19e2cf6
Built: Thu Dec 7 22:28:28 2017
OS/Arch: linux/amd64
Experimental: true
Docker実行環境確認
コンテナの状態やイメージ数を確認できる
> docker info
Containers: 6
Running: 1
Paused: 0
Stopped: 5
Images: 27
~~~省略~~~