はじめに
この記事は、自分がdockerでよく利用したコマンドを自分用に書き残したものです。
環境
- macOS Catalina 10.15.7
- Docker version 19.03.13
Dockerイメージの取得
DockerHub等からimageを取得する。
docker pull ubuntu
イメージの確認
取得したイメージをimagesで取得。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-python latest 91d4b5ba1c2d 4 weeks ago 605MB
ubuntu 18.04 56def654ec22 8 weeks ago 63.2MB
上記の場合、ubuntuとubuntu-pythonというimageがある。
imageの削除
docker rmi [imageID or image名]
ubuntu-pythonを消す場合、
docker rmi ubuntu-python
docker rmi 91d4b5ba1c2d
docker rmi 9
で消すことができる。
IDは前方一致のため、最後のコマンドでは9から始まるimageIDを持つimageがすべて削除される。
Dockerfileからimageを作成
docker build -t [image名]:[TAG名] [Dockerfileのディレクトリ]
コンテナ(停止した)からimageを作成
docker commit [コンテナ名 or コンテナID] [image名]:[TAG名]
コンテナの起動
作成したimageからコンテナを起動する。
docker run -itd --name [コンテナ名 or コンテナID] [image名]
よく利用するオプションについて
--name [コンテナ名]は省略できますがランダムで名前がつけられます。
-it 標準入出力をコンテナに結びつける(キー入力する場合)。
-d コンテナをバックグランドで実行
-p [ホストのポート]:[コンテナのポート]
コンテナ作成時にボリュームをマウントしたい場合、
(以下例はカレントディレクトリをマウント)
docker run --name myubuntu -itd \
--mount type=volume,src=$(pwd),dst=/vol ubuntu /bin/bash
(-v [ホストDIRの絶対パス]:[コンテナの絶対パス])
上記(-v)の場合、volumeかbindのどちらでマウントされているのかわからない。
ホストとコンテナ間でデータを同期させたいとき(非推奨)は、
--mount type=bind,src=<パス>,dst=<パス>
コンテナにボリュームをマウントしたいときは、
--mount type=volume,src=<ボリューム名>,dst=<パス>
## コンテナの確認
docker ps
docker ps -aで停止しているものもすべて表示
docker ps -aqで停止しているコンテナも含めコンテナIDを表示
コンテナの停止、再スタート、削除
docker stop [コンテナ名 or コンテナID] #停止
docker start [コンテナ名 or コンテナID] #再スタート
docker rm [コンテナ名 or コンテナID] #削除
コンテナをすべて削除したい場合、
docker rm $(docker ps -aq)
コンテナにログイン
作成したコンテナにログインしてshellを起動する。
docker exec -it [コンテナ名 or コンテナID] bash
コンテナから抜け出す
Ctrl + D または exit と入力すると抜け出せます。
root@b789a85f6d39:/# exit
ログの出力
dockerアプリで出たログを出力して見る。
docker logs [コンテナ名 or コンテナID]
コンテナ情報の確認
指定コンテナに関する全ての情報を取得。
docker inspect [コンテナ名 or コンテナID]
基本的には一部の情報しかいらないので、
--format optionでピンポイントで出力する。
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [コンテナ名 or コンテナID]
## コンテナに割り振られているIPアドレスの取得
--format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
でNetworkSettings.Networks内のIPAddressを取得している。