docker

よく使うdockerコマンド集

コンテナ

コンテナの一覧を表示

docker ps -a

コンテナ作成

docker run [オプション] <イメージ名> [実行コマンド]

コンテナ作成の具体例

※以下はCentOS 8.3で試したコマンドなので他のイメージでは適用できないものもあると思います。

ターミナルを使う(-tでtty割り当てて、-iで標準入力できるようにする)
docker run -it <イメージ名>
バックグラウンド実行(-dオプション)
docker run -itd <イメージ名>
コンテナに名前をつける(名前をつけない場合はランダムに名前がつけられる)
docker run -itd --name <コンテナ名> <イメージ名>
systemctlを使う
docker run --privileged -itd <イメージ名> /sbin/init
コンテナのポートを外部に公開
docker run --privileged -itd -p <ホスト端末のポート>:<コンテナのポート> <イメージ名> /sbin/init

# 例えば以下のように設定した場合、コンテナの22番ポートをホスト端末の10022番ポートとして公開しているので"<ホストのIP>:10022"でコンテナにSSH接続可能となる
docker run --privileged -itd -p 10022:22 <イメージ名> /sbin/init
ホストのディレクトリを共有
docker run -v [ホストディレクトリの絶対パス]:[コンテナの絶対パス] -it <イメージ名> /bin/bash 

コンテナログイン

docker exec -it <コンテナ名> /bin/bash
または
docker attach <コンテナ名>

attachだと「/bin/bash動いてない場合に詰む」・「間違ってコンテナを落とす」といった問題が起きやすいので、個人的にはexecが好み。

コンテナ起動(作成済みコンテナ)

docker start <コンテナ名 or コンテナID>

コンテナ停止

docker stop <コンテナ名 or コンテナID>

コンテナ状態確認

docker inspect <コンテナ名 or コンテナID>

コンテナが突然死を迎えてしまった場合にこの結果から原因が分かることもあるのでかなり重宝しています。

コンテナ削除

docker rm <コンテナ名 or コンテナID>

イメージ

イメージ取得

docker pull <イメージ名>

「イメージ名」は“レジストリのアドレス:ポート番号/リポジトリ:タグ”のことです。
127.0.0.1:5000/myrepo/httpd:v0.0.1“みたいなやつです。
レジストリやタグを省略すると、Docker Hubからlatestのものが取得されます。

イメージ削除

docker rmi <イメージID>

ダウンロード済みのイメージ一覧

docker images

Docker Hub/プライベートレジストリ(v1)上のタグ一覧

curl -s https://<レジストリのアドレス>:<ポート番号>/v1/repositories/<リポジトリ>/tags

# 例(docker hubからcentosのタグ一覧を取得)
curl -s https://registry.hub.docker.com/v1/repositories/centos/tags

プレイベートレジストリ(v2)上のイメージ一覧

curl -X GET <レジストリのアドレス>:<ポート番号>/v2/_catalog

イメージ一括削除

docker images -aq | xargs docker rmi --force

イメージ作成

docker commit <コンテナ名> [イメージ名]

※イメージ名をつけない場合はrepository=<none>, <tag>=<none>でイメージが作成されます。

イメージをファイルに書き出す

docker save -i <出力ファイルのパス> <イメージ名 or イメージID>

# ↓のように、一つのファイルに複数イメージを書き出すことも可能です。
docker save -i hoge.tar image1 image2 image3

※イメージIDで書き出すと、後で読み込んだ時にrepository=<none>, <tag>=<none>になるのでイメージ名で指定した方がいいと思います。

イメージをファイルから読み込む

docker load -i <入力ファイルのパス>

タグ

タグ設定

docker tag <イメージID または イメージ名> <新しいイメージ名>

タグ削除

docker rmi <イメージ名>

docker rmi --force <イメージID>で削除することで、イメージと関連するタグ全てを削除可能

認証

Docker Hubログイン

docker login

プライベートレジストリログイン

docker login <URL(アドレス):ポート>

ネットワーク

ネットワーク一覧

docker network ls

参考

リポジトリの一覧取得方法
https://stackoverflow.com/questions/31251356/how-to-get-a-list-of-images-on-docker-registry-v2
DockerHub Dockerイメージのタグ一覧を取得するコマンドを作る
docker images を全削除する

コメント

タイトルとURLをコピーしました