- 追加された行はこの色です。
- 削除された行はこの色です。
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>Docker]]
*目次 [#c1492759]
#contents
*概要 [#xfc2d950]
Dockerコマンドのチュートリアル的な説明。
*詳細 [#vd90682f]
以下、[[Docker for Windows>https://techinfoofmicrosofttech.osscons.jp/index.php?Docker%20for%20Windows]]での実行結果。
*チュートリアル [#gefc9e57]
**version [#ebe418d5]
>docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
...
**hello world [#cf7a11ff]
-対話実行
--hello world
>docker container run ubuntu:latest /bin/echo 'hello world.'
--OS情報を表示してみる。
>docker container run ubuntu:latest uname -a
-BASH実行
--実行
>docker container run -it --name bash ubuntu /bin/bash
root@041a67b9c5dc:/# dir
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@041a67b9c5dc:/# exit
exit
--再接続のテスト
>docker container run -it --name bash ubuntu /bin/bash
...exitしないで...
>docker container attach bash
root@041a67b9c5dc:/# exit
exit
※ 「docker container run」の詳細は[[コチラ>#tfd54e44]]
**search [#le258f2c]
-検索
>docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
... ... ... ... ...
--構文
docker search [Option] 検索キーワード
--オプション
--- --filter=[ ] : フィルターを使用
--- --limit=n : 結果出力の最大数を指定
--- --no-trunc : 出力内容を省略しない
**system info [#febc09a3]
***基本 [#m6adb14b]
>docker system info
***ディスク [#a7488224]
-概要
>docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 26 10 4.966GB 4.168GB (83%)
Containers 22 0 3.969kB 3.969kB (100%)
Local Volumes 14 0 541.2MB 541.2MB (100%)
Build Cache 0 0 0B 0B
-詳細
>docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
... ... ... ... ... ... ... ...
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
... ... ... ... ... ... ... ...
Local Volumes space usage:
VOLUME NAME LINKS SIZE
... ... ...
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
... ... ... ... ... ... ...
-削減
>docker system prune
--構文
docker system prune [Option]
--オプション
--- --force(-f) : 強制削除
--- --all(-a)=false : すべてのイメージ
**イメージとコンテナの操作 [#lb9b55df]
新しいサブコマンド体系
-docker ps は docker container ls (コンテナの一覧)
-docker images は docker image ls (イメージの一覧)
-docker history は docker image history (イメージの履歴)
***イメージ [#p85a4399]
images系のコマンドは、docker imageサブコマンドになったらしい。
-イメージ名
--ImageName
--<Docker Hub User Name>/ImageName
--<Docker Hub Organization Name>/ImageName
-一覧~
IMAGE IDが同じであれば、実体は同じ。
>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
... ... ... ... ...
--構文
docker image ls [Option] [RepositoryName]
--オプション
--- --all(-a)=false : すべてのイメージ
--- --digests=false : digestの表示有無
--- --no-trunc : 出力内容を省略しない
--- --quiet(-q) : ImageIDのみ表示
-プル~
[[コチラ>#ubfd2aef]]
--構文
---通常
docker image pull [Option] ImageName[:TagName]
---レジストリ指定
docker image pull [Option] [RegHost[:RegPort]/]ImageName[:TagName]
---レジストリ・パス指定
docker image pull [Option] [RegHost[:RegPort]/]XXXX/YYYY
---ダイジェスト値を使う
docker image pull [Option] ImageName[@HashAlg:HashVal]
--オプション
--- -all(-a)=false : すべてのイメージ
--- --disable-content-trust=false : イメージを認証
--イメージ認証の有効化~
上記の「--disable-content-trust=false」を設定しなくても認証するようになる。
---Windows
>set DOCKER_CONTENT_TRUST=1
---Linux
$export DOCKER_CONTENT_TRUST=1
-調査
--例
---基本
>docker image inspect ubuntu
[... JSON ...]
---OS
>docker image inspect -f="{{ .Os}}" ubuntu
[... JSON ...]
--構文
docker image inspect [Option] ImageName [ImageName...]
--オプション
--- --format(-f)="" : フォーマット指定
-タグ~
リネームではなく、別名の追加になる。
>docker image tag hello-world daisukenishino77/hello-world2:hogehoge
--構文
docker image tag ImageName1 ImageName2[:TagName]
--オプション~
なし。
-削除
>docker image rm daisukenishino77/hello-world2:hogehoge
--構文
docker image rm [Option] ImageName [ImageName...]
--オプション
--- --force(-f) : 強制削除
--- --no-prun : 中間イメージを削除しない
-削減
>docker image prune
--構文
docker image prune [Option]
--オプション
--- --force(-f) : 強制削除
--- --all(-a)=false : すべてのイメージ
-SaveとLoad
--Save
>docker image save -o save.tar nginx:latest
---構文
>docker image save [Option] 保存ファイル名 [ImageName]
---オプション
保存ファイル名を指定する場合は「-o」を指定する。
--Load
>docker image load -i save.tar
---構文
>docker image load [Option] 保存ファイル名
---オプション
保存ファイル名を指定する場合は「-i」を指定する。
***コンテナ [#h61e19d2]
container系のコマンドは、docker containerサブコマンドになったらしい。
-一覧
>docker container ls(ps)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... ... ... ... ... ... ...
>※ コンテナはimageファイルでもcontainerプロセスでもあるのでls, psをサポート。
--構文
docker container ls [Options]
--オプション
--- --all(-a)=false : すべてのイメージ
--- --filter(-f) : Filter output based on conditions provided
--- --format : Pretty-print containers using a Go template
--- --last(-n) : Show n(-1) last created containers (includes all states)
--- --latest(-l) : Show the latest created container (includes all states)
--- --no-trunc : Don’t truncate output
--- --quiet(-q) : Only display numeric IDs
--- --size(-s) : Display total file sizes
-調査
--構文
docker container inspect [Option] ContainerName [ContainerName...]
--オプション
--- --format(-f)="" : フォーマット指定
--- --size(-s) : 合計ファイルサイズを表示
-リネーム
docker container rename OldName NewName
-その他の操作と差分確認
--ファイルのコピー~
Docker for Windowsでは、ホストはWindowsになる。
>docker cp c:\camera.log bash:/etc/cameralog
---コンテナからホスト
docker cp ContainerID:/FilePath /FilePath
---ホストからコンテナ
docker cp /FilePath ContainerID:/FilePath
--Diffの取得~
ファイルのコピーの実行結果のDiffを取る。
---確認
>docker container diff bash
C /etc
A /etc/cameralog
C /root
A /root/.bash_history
---確認
>docker container start -i bash
root@ff0359cb31e4:/# dir
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@ff0359cb31e4:/# cd etc
root@ff0359cb31e4:/etc# dir
... cameralog
**WWWサーバの構築と実行 [#j1fb7979]
***ダウンロード [#ubfd2aef]
>docker image pull nginx
※ 詳しくは、[[コチラ>#p85a4399]]を参照。
***構築 [#d008f809]
-コンテナに入って行うか、
-[[Dockerファイル]]を使用して行う。
***実行 [#tfd54e44]
>docker container run --name www_server -d -p 8080:80 nginx
-構文
docker container run [Option] ImageName[:Tag|Digest] [OS Command] [Parameter]
-オプション~
Docker run リファレンス — Docker-docs-ja ドキュメント~
http://docs.docker.jp/engine/reference/run.html
--バックグラウンド実行
---実行後、削除したり(--rm)、
---結果によって再開(--restart=[])したりできる。
--ネットワーク設定
---ネットワーク接続
---ポートマッピング(NAPT)
---DNS, HOSTS設定
---ホスト名、IP, MAC設定
--リソース指定
---CPU
---Memory
---Volume
--環境設定
---環境変数
---読み取り専用
---作業ディレクトリ
---ユーザ名
***アクセス [#z47395d1]
http://localhost:8080/
***識別子 [#ze806f0c]
>docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
beb3d097cd67 ... ... ... ... ... www_server
※ コンテナ識別子としては、「CONTAINER ID」、「NAMES」が使用できる。
***確認 [#f17e2310]
-ポート転送の確認
>docker container port www_server
>docker container port beb3d097cd67
80/tcp -> 0.0.0.0:8080
-ステータス確認
>docker container stats www_server
>docker container stats beb3d097cd67
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
beb3d097cd67 www_server ... ... ... ... ...
-プロセス確認
>docker container top www_server
>docker container top beb3d097cd67
PID USER TIME COMMAND
... ... ... ...
-ログ確認
>docker container logs -t www_server
>docker container logs -t beb3d097cd67
2019-12-10T03:13:38.250183500Z 172.17.0.1 - - [10/Dec/2019:03:13:38 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" "-"
2019-12-10T03:13:38.250318000Z 2019/12/10 03:13:38 [error] 6#6: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost:8080", referrer: "http://localhost:8080/"
***[[調査>#h61e19d2]] [#j0d50d8d]
>docker container inspect www_server
>docker container inspect beb3d097cd67
***停止 [#u46f29d4]
コンテナの停止。
>docker container stop www_server
>docker container stop beb3d097cd67
-構文
--ContainerName
docker container stop [Option] ContainerName [ContainerName]
--ContainerID
docker container stop [Option] ContainerID [ContainerID]
-オプション
-- --time(-t) n : 停止時間
***再開 [#h0087f99]
停止しているコンテナの再開。
>docker container start www_server
>docker container start beb3d097cd67
-構文
--ContainerName
docker container start [Option] ContainerName [ContainerName]
--ContainerID
docker container start [Option] ContainerID [ContainerID]
-オプション
-- --attach(-a) : STDOUT、STDERR にアタッチ
-- --interactive(-i) : STDIN にアタッチ
***再起動 [#u780803f]
コンテナの再起動。
>docker container restart www_server
>docker container restart beb3d097cd67
-構文
--ContainerName
docker container restart [Option] ContainerName [ContainerName]
--ContainerID
docker container restart [Option] ContainerID [ContainerID]
-オプション
-- --time(-t) n : 再起動時間
***中断・再開 [#m6e0c005]
コンテナの中断・再開。
-中断
>docker container pause www_server
>docker container pause beb3d097cd67
--構文
--ContainerName
docker container pause ContainerName
--ContainerID
docker container pause ContainerID
--オプション~
なし
-再開
>docker container unpause www_server
>docker container unpause beb3d097cd67
--構文
--ContainerName
docker container unpause ContainerName
--ContainerID
docker container unpause ContainerID
--オプション~
なし
***削除 [#n7bb58c6]
コンテナの削除。
>docker container rm www_server
-構文
--ContainerName
docker container rm [Option] ContainerName [ContainerName]
--ContainerID
docker container rm [Option] ContainerID [ContainerID]
-オプション
-- --force(-f) : 強制削除
-- --volume(-v) :
**ネットワーク [#i26844ae]
***一覧 [#j9051b59]
>docker network ls
-構文
docker network ls [Option]
-オプション
-- --filter=[ ] : フィルターを使用
-- --no-trunc : 出力内容を省略しない
-- --quiet(-q) : ネットワークIDのみ表示
***作成 [#a74dca03]
>docker network create --driver=bridge www_network
-構文
docker network create [Option] NetworkName
-オプション
--network create — Docker-docs-ja ドキュメント~
http://docs.docker.jp/engine/reference/commandline/network_create.html
***調査 [#m687cb87]
-[[コンテナ側>#j0d50d8d]]
-ネットワーク側
>docker network inspect www_network
***接続 [#l8e52754]
-接続
>docker network connect www_network www_server
--構文
--ContainerName
docker network connect [Option] NetworkName ContainerName
--ContainerID
docker network connect [Option] NetworkName ContainerID
--オプション
--- --ip : ipv4 address
--- --ip6 : ipv6 address
--- --alias : Alias Name
--- --link : 他のContainerへのリンク
-起動時に接続
>docker container run --name www_server --net=www_network -d -p 8080:80 nginx
--構文
docker container run [Option] ImageName[:Tag|Digest] [OS Command] [Parameter]
--オプション(--net="")
--- 'none': コンテナにネットワーク機能を付けない
--- 'host': コンテナ内でホスト側ネットワーク・スタックを使用
--- 'bridge' : ブリッジ上でコンテナ用に新しいネットワーク・スタックを作成
--- 'container:<name|id>': 他のコンテナ用ネットワーク・スタックを再利用
--- 「docker network create」コマンドで作成したNetworkName
***切断 [#be3efaae]
>docker network disconnect www_network www_server
***削除 [#v15c345f]
>docker network rm www_network
**イメージの作成と登録 [#dc9017f9]
***作成 [#w8fe69f8]
-Dockerファイルを docker build して作成
Dockerファイルを docker build して作成~
(カレントディレクトリの場合も「.」を指定)
>docker build -t sample:1.0 .
--構文
-構文
docker build [Option] [ImageName[:Tag]] [Dockerfileの場所]
--オプション
---イメージ名およびタグ名は「-t」で指定する。
---ファイル名は「-f」で指定する。
-オプション
--イメージ名およびタグ名は「-t」で指定する。
--ファイル名は「-f」で指定する。
-コンテナから作成
>docker container commit -a "daisuke nishino" www_server daisukenishino77/www_server2:hogehoge
--構文
docker container commit [Option] ContainerID [ImageName[:Tag]]
--オプション
--- --author(-a)="" : 作者
--- --message(-m)="" : コミット・メッセージ
--- --pause(-p)=true : コンテナをコミット時に一時停止(pause)する
--- --change(-c)=[] : イメージをコミット時の Dockerfile 命令を追加指定
***登録 [#x383948e]
-ログイン
>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: daisukenishino77
Password:
Login Succeeded
--構文
docker login [Option] [Server]
--オプション
--- --username(-u)
--- --password(-p)~
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
-プッシュ
--Docker Hub
>docker image push daisukenishino77/hello-world2:hogehoge
---構文
docker image push [ImageName[:Tag]]
---オプション~
なし。
--[[Docker Trusted Registry>Dockerレジストリ#m67bd8d1]]
---タグを以下の様に変更
docker image tag LocalImageName [RegistryのAddress:Port]/ImageName[:hogehoge]
---プッシュ
docker image push [RegistryのAddress:Port]/ImageName[:hogehoge]
---プル
docker image pull [RegistryのAddress:Port]/ImageName[:hogehoge]
-ログアウト
>docker logout
Removing login credentials for https://index.docker.io/v1/
--構文
docker login [Server]
--オプション~
なし。
***削除 [#sc5fffab]
-ImageIDで
--削除
>docker rmi ImageID
--[[一括削除>#d49250e8]]
-ImageNameで
--削除
>docker rmi ImageName[:TagName]
--[[一括削除>#d49250e8]]
*設定して再コンテナ化 [#s7e7b82e]
**コンテナのターミナルに入る [#b5577f19]
-イメージで
>docker run -t -i [ImageName[:Tag]] /bin/bash
-コンテナで
>docker exec -it [ContainerID] /bin/bash
**設定 [#ja611d1f]
例:[[Mosquito>https://techinfoofmicrosofttech.osscons.jp/index.php?Mosquitto]]
**コンテナの再コンテナ化 [#od7d3770]
ただし、Dockerfileの方が再現性が高いらしい。
>docker container commit beb3d097cd67 www_server2
-構文
docker container commit [Option] ContainerID [ImageName[:Tag]]
-オプション
-- --author(-a)="" : 作者
-- --message(-m)="" : コミット・メッセージ
-- --pause(-p)=true : コンテナをコミット時に一時停止(pause)する
-- --change(-c)=[] : イメージをコミット時の Dockerfile 命令を追加指定
*全部ほにゃららする。 [#v0dcfe79]
Bashでのやり方は、ネット上にあるが、~
Windows上CMDでのやり方が不明なので、PowerShellでやる。
※ 以下から、なんとなくパターン化可能なので、
Bashのコマンドを参考に、PowerShell化できそう。
**コンテナの [#g2136a52]
***停止 [#l5232b16]
-Bash
$ sudo docker stop $(sudo docker ps -aq)
-PowerShell
>docker ps -q | %{ docker stop $_ }
***削除 [#d49250e8]
-Bash
$ sudo docker rm -f $(sudo docker ps -aq)
-PowerShell
>docker ps -aq | %{ docker rm $_ }
**イメージの [#c675839d]
***削除 [#d49250e8]
-Bash
$ sudo docker rmi $(sudo docker images -q)
-PowerShell
>docker images -q | %{ docker rmi $_ }
*参考 [#wbcef824]
-Windows Server 2016 でよく使う Docker コマンド - しばやん雑記~
https://blog.shibayan.jp/entry/20161130/1480510392
**docs.docker.com [#fe6a6b46]
-docker | Docker Documentation~
https://docs.docker.com/engine/reference/commandline/docker/
-Docker ドキュメント日本語化プロジェクト — ドキュメント~
http://docs.docker.jp/index.html
--http://docs.docker.jp/engine/reference/commandline/toc.html
--http://docs.docker.jp/machine/reference/toc.html
--http://docs.docker.jp/compose/reference/toc.html
--http://docs.docker.jp/swarm/reference/index.html
**Qiita [#cf034b87]
-Dockerコマンドメモ~
https://qiita.com/curseoff/items/a9e64ad01d673abb6866
-docker コマンド チートシート~
https://qiita.com/voluntas/items/68c1fd04dd3d507d4083
-docker container / image コマンド新旧比較~
https://qiita.com/zembutsu/items/6e1ad18f0d548ce6c266
-削除
--Docker一括削除コマンドまとめ~
https://qiita.com/boiyama/items/9972601ffc240553e1f3
--Dockerイメージとコンテナの削除方法~
https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae
-Docker for Windowsでイメージからコンテナを生成/操作してみる~
https://qiita.com/fkooo/items/ad7d023b59df71cc9a60