「[[.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 build -t sample:1.0 .

--構文
 docker build [Option] [ImageName[:Tag]] [Dockerfileの場所]

--オプション
---イメージ名およびタグ名は「-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

-ImageNameで
 >docker rmi ImageName[:TagName]

*全部ほにゃららする。 [#v0dcfe79]
Bashでのやり方は、ネット上にあるが、~
Windows上CMDでのやり方が不明なので、PowerShellでやる。

※ 以下から、なんとなくパターン化可能なので、
 Bashのコマンドを参考に、PowerShell化できそう。

**コンテナの [#g2136a52]

***停止 [#l5232b16]
 >docker ps -q | %{ docker stop $_ }

***削除 [#d49250e8]
 >docker ps -aq | %{ docker rm $_ }

**イメージの [#c675839d]

***削除 [#d49250e8]
 >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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS