はじめに
Dockerコマンドの復習のため、記事にまとめてみました。
前提条件
VirtualBoxを使用
ゲストOS CentOS7で検証しました。
実行したコマンド
以下のURLを参考しました。
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/docker/
docker images
最近生成したイメージの一覧
以下は実行例です
[root@localhost overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest 291bf168077c 2 weeks ago 124MB
jasonrivers/nagios latest 0c33dd4f2c3e 3 months ago 794MB
Dockerのイメージの格納場所を調べました。
以下のQiita記事が参考になりました。
https://qiita.com/tifa2chan/items/b9607d80fb58476e4ef5
以下は実行例です
コンテナ(debian)とコンテナ(jasonrivers/nagios)のイメージ情報が記載されています。
[root@localhost overlay2]# cat /var/lib/docker/image/overlay2/repositories.json | python -mjson.tool
{
"Repositories": {
"debian": {
"debian:latest": "sha256:291bf168077c554abde831d52178c76aa8d7dad0e55a2e37a68c2b55a5d92e64",
"debian@sha256:a288aa7ad0e4d443e86843972c25a02f99e9ad6ee589dd764895b2c3f5a8340b": "sha256:291bf168077c554abde831d52178c76aa8d7dad0e55a2e37a68c2b55a5d92e64"
},
"jasonrivers/nagios": {
"jasonrivers/nagios:latest": "sha256:0c33dd4f2c3e98dceada3974cffb2333c4fe4c5a6d53742f7aa1078e3451a7eb",
"jasonrivers/nagios@sha256:d7696a34ac0508268ddd104a9ddc102c198c9ce567531ad6e876e9572c0a64fb": "sha256:0c33dd4f2c3e98dceada3974cffb2333c4fe4c5a6d53742f7aa1078e3451a7eb"
}
}
}
docker ps
以下のURLを参考しました。
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/ps/
実行中のコンテナを表示
以下は例です。実行中のコンテナがないため、表示されていません。
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost overlay2]#
コンテナが停止中も含めてコンテナーすべてを表示します
コンテナ名(debian)はExited 5days agoになっているため、5日前にコンテナを停止しています。
[root@localhost overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Exited (0) 5 days ago debian
fb470a7a23a7 jasonrivers/nagios:latest "/usr/local/bin/star…" 2 months ago Exited (255) 4 days ago 5667/tcp, 0.0.0.0:8888->80/tcp nagios4
docker start
以下のURLを参考しました。
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/start/
jasonrivers/nagios:latestの様なコンテナの名前の場合は、このまま実行するとエラーになります。
docker start <コンテナ名>
[root@localhost overlay2]# docker start jasonrivers/nagios:latest
Error response from daemon: No such container: jasonrivers/nagios:latest
Error: failed to start containers: jasonrivers/nagios:latest
上記の場合は、コンテナIDを指定してコンテナを起動します
[root@localhost overlay2]# docker start fb470a7a23a7
fb470a7a23a7
[root@localhost overlay2]#
コンテナ名を指定してコンテナを起動した例です。
[root@localhost overlay2]# docker start debian
debian
[root@localhost overlay2]#
コンテナが2台起動しました。
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Up 42 seconds debian
fb470a7a23a7 jasonrivers/nagios:latest "/usr/local/bin/star…" 2 months ago Up 6 seconds 5667/tcp, 0.0.0.0:8888->80/tcp nagios4
[root@localhost overlay2]#
docker attach
「docker attach を使えば、ターミナルの標準入力、標準出力、標準エラー出力(あるいはその組み合わせ)を実行中のコンテナーにアタッチすることができます。」と記載されていますが、
コンテナ内のシェルの中に入っている様に見えます。
参考にしたサイト
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/attach/
Docker attach と execの違いが参考になりました。
「どちらも稼働中コンテナへ接続するコマンドである。」だそうです。
https://qiita.com/leomaro7/items/649732faf2f632419f11
コンテナ「debian」へ接続しました。
[root@localhost overlay2]# docker attach c10cd2800f5a
root@c10cd2800f5a:/#
root@c10cd2800f5a:/# cat /etc/debian_version
11.5
root@c10cd2800f5a:/#
注意点
コンテナを接続中にexitを実行するとコンテナが停止してしまいます。
本番環境では気を付けたい操作です。!!
https://www.tohoho-web.com/docker/docker_exec.html
コンテナ「debian」が一つ実行中
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Up 23 seconds debian
コンテナ「debian」へ接続する
[root@localhost overlay2]# docker attach c10cd2800f5a
root@c10cd2800f5a:/#
root@c10cd2800f5a:/# cat /etc/debian_version
11.5
root@c10cd2800f5a:/# exit
exit
コンテナ「debian」が停止したため、何も表示されていません
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost overlay2]#
docker execコマンド
Docker attach同じで指定したコンテナへ接続するコマンドです。
docker execは以下で検証した結果、コンテナに接続後exitコマンドを実行しても
コンテナ自体は停止しないため、安全です。
個人的には「docker exec」の利用をお勧めします。
docker exec -it <コンテナID指定> /bin/bash
コンテナ「debian」が一つ実行中
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Up 2 minutes debian
コンテナ「debian」へ接続する
[root@localhost overlay2]# docker exec -it c10cd2800f5a /bin/bash
root@c10cd2800f5a:/#
root@c10cd2800f5a:/# exit
exit
コンテナ「debian」が一つ実行中
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c10cd2800f5a debian "bash" 5 days ago Up 2 minutes debian
docker run
「docker runはコンテナを起動状態で作成します。」そうです。
以下のサイトが参考になりました。
https://www.tohoho-web.com/docker/docker_run.html
以下はnginxのイメージから
ローカルホストがアクセスするときに使用するポート番号(8080)とコンテナ内では80ポートを指定して、コンテナを起動状態にして作成しています。
[root@localhost overlay2]# docker run --name nginx -d -p 8080:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
3f4ca61aafcd: Pull complete
50c68654b16f: Pull complete
3ed295c083ec: Pull complete
40b838968eea: Pull complete
88d3ab68332d: Pull complete
5f63362a3fa3: Pull complete
Digest: sha256:0047b729188a15da49380d9506d65959cce6d40291ccfb4e039f5dc7efd33286
Status: Downloaded newer image for nginx:latest
e820c2036ef0a12e62fe1c5823af802722066f9d6e81d427ad92a1cbed80306e
[root@localhost overlay2]#
#作成したnginxのコンテナが起動しました
[root@localhost overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e820c2036ef0 nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp nginx
c10cd2800f5a debian "bash" 5 days ago Up 8 minutes debian
ローカルな端末からブラウザで8080ポートを指定してnginxにアクセス出来ました
まとめ
コンテナのコマンドの動作は事前に検証して知っていた方が良いです。
コンテナへ接続コマンドではexitすると、コンテナ自体が停止するものもあるため、注意が必要です。
本記事に一通り必要なコンテナコマンドを記載しました。