【Docker】Dockerコマンド・Docker Composeコマンド一覧(随時更新中)
基本コマンド
コマンド一覧確認(docker help)
docker help
バージョン確認(docker version)
docker --version または docker -v
docker version
システム全体の情報(docker info)
docker info
コンテナ管理
実行中のコンテナの一覧を表示(docker ps)
docker ps
出力結果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7737320eb61a myapp "/bin/bash" 27 minutes ago Up 23 minutes 8000/tcp mystifying_kepler
1つのコンテナ(ID:7737320eb61a
)が実行中であることがわかる。
実行中、停止中も含めた全てのコンテナの一覧を表示(docker ps -a)
docker ps -a
実行中のコンテナを停止(docker stop)
docker stop <container>
出力結果
$ docker stop mystifying_kepler
1つのコンテナ(NAME:mystifying_kepler
)が停止されたことがわかる。
既存のコンテナを起動(docker start)
docker start <container>
出力結果
$ docker start mystifying_kepler
1つのコンテナ(NAME:mystifying_kepler
)が開始されたことがわかる。
コンテナ再起動(docker restart)
docker restart <container>
停止中のコンテナを削除(docker rm)
docker rm <container>
コンテナのログを表示(docker logs)
docker logs <container>
docker logs -f <container>
コンテナの名前を変更(docker rename)
docker rename <OLD_NAME> <NEW_NAME>
イメージから新しいコンテナのを起動し、名前を付ける(docker run --name)
docker run --name <CONTAINER NAME> <IMAGE NAME>
イメージから新しいコンテナを作成し、対話型モードを実行(docker run -it)
docker run -it <image>
docker run -it <image> <shell>
-itとは?
・-i
オプションは標準入力(stdin)を開いたままにし、-t
オプションは仮想端末(tty)を割り当てるという意味になる。
・標準入力(Standard Input、略してstdin)は、プログラムが外部からデータを受け取るための一般的なチャネルのこと。
・仮想端末(tty)は、標準入出力先のデバイスとのこと。Dockerにおけるttyは、仮想端末を配置するコマンドである。
<shell>に入る内容とは?
/bin/bash
/bin/sh
/bin/ash
/usr/bin/env python
/bin/zsh
任意のシェルやスクリプト
例)
docker run -it python:latest
docker run -it python:latest /bin/bash
<shell>を指定するかしないかは以下のように分かれる。
BashシェルとREPLシェルは用途が異なる。システム管理や全般的な操作にはBashシェル、プログラミングやデバッグにはREPLシェルがそれぞれ適している。目的に応じて使い分けることが重要である。
コンテナ内でコマンドを実行(シェルを起動せずに)
docker exec <container> <コマンド>
実行中のコンテナに対して対話型シェルを開く(docker exec -it)
docker exec -it <container> <shell>
イメージから新しいコンテナをバックグラウンドで実行(docker run -d)
docker run -d <image>
バックグラウンドでコンテナを実行する必要性
GPTより
非対話的な実行:
バックグラウンドでコンテナを実行することは、対話的な入出力が必要ない場合に適しています。例えば、サービスやデーモンのような長時間実行されるプロセスをバックグラウンドで実行する際に有用です。
スケジュールされたジョブ:
定期的に実行されるジョブやタスクを自動化する場合、バックグラウンドでコンテナを実行しておくと便利です。これにより、タスクが自動的に実行されるようになります。
リソースの効率的な利用:
バックグラウンドで実行されるコンテナは、ホストシステムのリソースを効率的に利用することができます。特に、サービスやアプリケーションが常時起動している場合には、バックグラウンドで実行することで、他のプロセスやサービスとのリソース競合を避けることができます。
ログの管理:
バックグラウンドで実行されるコンテナは、ログをファイルやログサービスにリダイレクトすることができます。これにより、実行ログの効果的な管理が可能になります。
手動操作の回避:
ターミナルやコマンドラインが使用できない状況下で、自動化されたプロセスを実行する場合、バックグラウンドでコンテナを実行することで手動操作を回避できます。
イメージ管理
ローカルにあるDockerイメージの一覧を表示(docker images)
docker images
DockerイメージをDocker Hubから取得する(docker pull)
docker pull <image>
イメージをダウンロードする手順(例:Pythonイメージ)
- 以下のサイトから使用したいimageを選びダウンロードする
-
右上のコマンドをコピーする
-
ターミナルで実行しダウンロードする
docker pull python
- イメージのコンテナを起動する
docker run -it python:latest /bin/bash
- 対話型モードで実行可能となる
$ docker run -it python:latest /bin/bash
root@953bba1d8603:/#
イメージをビルド(docker build)
docker build [ -t <image_name>:<tag_name> <dockerfile_directory> ]
※docker build
のみだとイメージに名前とタグが付かない。
イメージの削除(docker rmi)
docker rmi <image_id> または docker rmi <repository>:<tag>
未使用のイメージを削除(docker image prune)
docker image prune
Dockerレジストリ関連
Dockerレジストリへログイン(docker login)
docker login
Dockerレジストリへログアウト(docker logout)
docker logout
Dockerイメージをレジストリ(Docker Hub)へアップロードする(docker push)
docker push <local_repository_name>/<tagname>
★Docker HubにimageをPushする方法★
docker-compose.ymlファイルに定義されているサービスを起動(docker-compose up)
docker-compose up
※イメージのビルドは行いません。すでにビルドされたイメージが存在する場合、そのイメージを使用してコンテナを起動します。つまり、最新のイメージでない可能性があります。最新のイメージを用いたい場合は、以下の--build
オプションを用いたコマンドを実行します。
docker-compose up --build
--buildの意味
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
上記Dockerfile
のweb
の部分のbuild
キー部分のディレクトリにあるDockerfile
をビルドするという意味になる。上記の例の場合は、カレントディレクトリ(.)にあるDockerfile
を使用してコンテナイメージをビルドすることを示している。
ネットワーク管理
Dockerネットワークの一覧を表示(docker network ls)
docker network ls
Dockerネットワークの作成(docker network create)
docker network rm <NETWORK ID> or <NETWORK NAME>
※オプションで、ドライバ、サブネット、IPレンジなどを指定可能することができる。
docker-compose.ymlファイルでdocker-net-workをCreateするには
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
networks: # この部分の記述をする
- my-network
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
ports:
- "5432:5432"
networks: # この部分の記述をする
- my-network
networks: # この部分の記述をする
my-network:
Dockerネットワークの詳細確認(docker network inspect)
docker network inspect <NETWORK ID> or <NETWORK NAME>
※ネットワークID、名前、ドライバー、サブネット、IPレンジ、接続しているコンテナの情報などを表示することができる。
docker-compose.ymlファイルでdocker-net-workをCreateし、ネットワークとコンテナが同一ネットワーク内にあるか確認する方法
> docker network inspect 45dbd0a440c4
[
{
"Name": "test-python_my-network",
"Id": "45dbd0a440c40a39718eb402f547e85928bf923891161a8df37760530229dbfe",
"Created": "2024-06-23T12:39:33.433387996Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"c317fb7d665633fd0b0c07011a430aa212b5bf743d7fb953bcf809cb5442b4dd": {
"Name": "test-python-db-1", ← データベースのコンテナ
"EndpointID": "9995764498c3b4721088c3606e7265c7c4af3750a9d08b7d77dc2c9b3c1de52f",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
},
"e3f581d2bc8c9bb1fbe8822d6184344e16c2ed256959d242d9addc75901b4e7f": {
"Name": "test-python-web-1", ← アプリケーションのコンテナ
"EndpointID": "e1dd29ff939ec2134af555c3cbed28a456ea713195d3257c05216647f9bc1a1f",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "my-network",
"com.docker.compose.project": "test-python",
"com.docker.compose.version": "2.27.0"
}
}
]
実行中のコンテナを指定したネットワークに接続(docker network connect)
docker network connect <NETWORK NAME> <CONTAINER NAME>
既に起動しているコンテナをネットワークに接続できる
接続したコンテナは、ネットワーク内の他のコンテナと通信できるようになる
実行中のコンテナをネットワークから切断(docker network disconnect)
docker network disconnect <NETWORK NAME> <CONTAINER NAME>
ネットワークに接続しているコンテナを切断できる
切断したコンテナは、ネットワーク内の他のコンテナと通信できなくなる
Dockerネットワークの削除(docker network rm)
docker network rm <NETWORK ID> or <NETWORK NAME>
ボリューム管理
Dockerボリュームの一覧を表示(docker volume ls)
docker volume ls
Dockerボリュームの作成(docker volume create)
docker volume create <VOLUME NAME>
Dockerボリュームの削除(docker volume rm)
docker volume rm <VOLUME NAME>
名前付きボリュームの実行(
docker run -v <VOLUME NAME>:/<コンテナのvolume用ディレクトリ> sample/image:latest
docker run -it --name test-container -v test-volume:/test/_data ubuntu:latest /bin/bash
実行詳細
> docker run -it --name test-container -v test-volume:/test/_data ubuntu:latest /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
9c704ecd0c69: Pull complete
Digest: sha256:2e863c44b718727c860746568e1d54afd13b2fa71b160f5cd9058fc436217b30
Status: Downloaded newer image for ubuntu:latest
root@9e35313638f7:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var
root@9e35313638f7:/# cd test
root@9e35313638f7:/test# ls
_data
root@9e35313638f7:/test# cd _data
root@9e35313638f7:/test/_data# ls
root@9e35313638f7:/test/_data# touch test
root@9e35313638f7:/test/_data# ls
test
root@9e35313638f7:/test/_data#
参考:
Discussion