個人的にいつもdockerのコマンドで迷子になってしまうので
ここに備忘録として残します。
※Dockerのコマンドについては公式マニュアルが非常にわかりやすく整理されていてマニュアルを都度見ても理解(非常に、簡易な英語で記述されてます)できるので、詳細は公式マニュアルをおすすめします。
1.コンテナに対するコマンド
(1)任意のDockerイメージからコンテナを作成し起動状態にする
docker run --name some-running-container -d -v /c/Users/your_host/:/var/www/html/your_guest/ -p 11180:80 nginx
# --name コンテナ名の指定
# -d バックグラウンドで実行
# -v ホスト側共有ディレクトリ(フルパス):コンテナ側共有ディレクトリ(フルパス)
# -p ホスト側port:コンテナ側port
# 最後のオプション(利用するコンテナイメージ)
(1)-2 任意のDockerイメージからコンテナを作成し、いったん停止状態にする
docker container create --name something-name -it -v /c/Users/your-name/:/var/www/html/your-name -p 8080:80 centos:latest /bin/bash
# --name コンテナ名の指定
# -d バックグラウンドで実行
# -v ホスト側共有ディレクトリ(フルパス):コンテナ側共有ディレクトリ(フルパス)
# -p ホスト側port:コンテナ側port
# コンテナ内で実行するコマンド (例: /bin/bashなど)
# 最後のオプション(利用するコンテナイメージ)
ただし、上記createコマンドでコンテナを作成後はすぐに停止状態となるため
コンテナ内のCLIに入れない。
そのため、作成したコンテナで何か作業をする必要がある場合は
docker container start something-name
docker container attach something-name
このように上記コマンドをたたいてやる必要がある。
(2)動作しているコンテナ一覧を取得
docker container ls
# docker container ls --help を実行するとわかるが、実行中のコンテナのみを表示
docker container ls -a
# 実行、停止問わずすべてのコンテナを表示
以下が上記コマンドの実行例となる
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e2cb7259af9 nginx "nginx -g 'daemon of…" 8 seconds ago Up 6 seconds 0.0.0.0:11180->80/tcp some-running-container
(3)指定したコンテナを削除する
起動中のコンテナをそのまま削除することはできないためコンテナを停止させる。
# コンテナ停止コマンド
docker contaienr stop some-running-container
# 停止中コンテナ確認コマンド
docker container ls -a
# 実行例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e2cb7259af9 nginx "nginx -g 'daemon of…" 2 minutes ago Exited (0) 4 seconds ago some-running-container
# 指定したコンテナのstatusが<Exited>となっている点を確認する
その後、停止済みのコンテナを実際に削除
docker container rm some-running-container or 60eb477a4e15
# コンテナ名あるいはコンテナIDで削除
■dockerコンテナ起動時に任意のコマンドを指定する場合
(1)dockerコマンド入力時に最後にコンテナ内で実行するコマンドを指定
docker run -ti --name some-running-shell centos /bin/bash
# dockerコマンドの最後に当該のコンテナ内で実行したいコマンドを指定する
実行例
C:\Users\root\development_php7>docker run -ti --name some-running-shell centos /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
aeb7866da422: Pull complete
Digest: sha256:67dad89757a55bfdfabec8abd0e22f8c7c12a1856514726470228063ed86593b
Status: Downloaded newer image for centos:latest
[root@f2f08a3dcb76 /]#
(2)ログイン中のコンテナ内から一時的に抜ける
ctrl + P -> ctrl + Q
を実行すると、実行中コンテナシェルをぬける。
この状態で
docker container ls -a # と実行すると
以下、実行例
C:\Users\root\development_php7>docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2f08a3dcb76 centos "/bin/bash" 7 minutes ago Up 7 minutes bash_shell
上記の用にぬけたコンテナのSTATUSがUpの状態になっていることを確認
(3)離脱したコンテナへ再度ログインする
docker container attach <コンテナ名>
このコマンドは既に/bin/bashというコマンドを実行中のプロセスへつなぐ模様
[root@f2f08a3dcb76 /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 11828 2968 pts/0 Ss 02:10 0:00 /bin/bash
root 14 0.0 0.1 51716 3524 pts/0 R+ 02:23 0:00 ps aux
(4)コンテナ起動時のプロセスには触れずに新規で任意の起動中コンテナへシェルログインする
docker container exec -ti some-running-container /bin/bash
上記の用にコマンドを実行すると
[root@f2f08a3dcb76 /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 11828 3056 pts/0 Ss+ 02:10 0:00 /bin/bash
root 15 0.4 0.1 11828 2852 pts/1 Ss 02:23 0:00 /bin/bash
root 28 0.0 0.1 51716 3496 pts/1 R+ 02:24 0:00 ps aux
このように/bin/bashという同様のコマンドで別プロセスが立ち上がっているのがわかる
この際ログインシェル上で< ctrl + P -> ctrl + Q > を実行してシェルを抜けると
次に同様のコマンド
docker container exec -ti some-running-container /bin/bash
上記を使ってシェルログインすると
[root@f2f08a3dcb76 /]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.1 11828 2956 pts/0 Ss+ 02:29 0:00 /bin/bash
root 14 0.0 0.1 11828 2888 pts/1 Ss+ 02:29 0:00 /bin/bash
root 34 0.4 0.1 11828 2952 pts/2 Ss 02:30 0:00 /bin/bash
root 47 0.0 0.1 51716 3504 pts/2 R+ 02:30 0:00 ps aux
プロセスが新規で立ち上がる
(5)起動中のコンテナを停止する
コンテナシェルからログアウト後
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2f08a3dcb76 centos "/bin/bash" 30 minutes ago Up 11 minutes bash_shell
コンテナが起動中なのを確認する
その後
docker container stop bash_shell
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2f08a3dcb76 centos "/bin/bash" 31 minutes ago Exited (137) About a minute ago bash_shell
# 任意のコンテナのSTATUSが<Exited>となっている点を確認
(6)停止したコンテナを削除する
docker container rm bash_shell
■docker-composeに連なるコマンド
(1)docker-compose.ymlを使用したコンテナ起動
該当のyamlファイルのあるディレクトリ上で以下のようなコマンドを打つ。
docker-compose up -d
(2)コンテナの正常な起動を確認する
docker-compose ps
# 以下実行例
Name Command State Ports
--------------------------------------------------------------------------------------------
development_php7_app_1 /usr/sbin/httpd -DFOREGROUND Up 0.0.0.0:11180->80/tcp
development_php7_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
development_php7_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp
(3)起動したコンテナを一時停止する
docker-compose stop
# 以下、実行例
Name Command State Ports
----------------------------------------------------------------------------
development_php7_app_1 /usr/sbin/httpd -DFOREGROUND Exit 0
development_php7_mysql_1 docker-entrypoint.sh mysqld Exit 0
development_php7_postgres_1 docker-entrypoint.sh postgres Exit 0
Stateの項目が Exit 0 となっているのが確認できればOK。
更に再度、起動させる場合は
docker-compose start
上記コマンドを実行すると再度サービスが起動する
(4)停止中のコンテナを削除する
docker-composeファイルを使用したコンテナを一度に削除するときは、
以下のようなコマンドを実行する
docker-compose rm
# 実行すると、本当に削除するかどうかを聞かれるので[y]を押す。
# その後、再度
docker-compose ps
# 以下、実行結果
Name Command State Ports
------------------------------
上記の用に慣ればdocker-composeで起動されたコンテナが一度に
削除される。
(5)Dockerfileなどを修正し、再度コンテナを実行したい場合
docker-compose build
# と実行すうると変更したDockerfileを用いて再度ビルドをしてくれる
■dockerイメージに対するコマンド
(1)ダウンロード済みのイメージ一覧
docker images -a
# 実行例
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest be1f31be9a87 8 days ago 109MB
(2)任意のdockerイメージの削除
docker rmi 6bb891430fb6 75835a67d134 ...
# コマンドオプションのコンテナIDはスペース区切りで複数指定可能
(3)ダウンロード済みのコンテナイメージすべてを一度に削除
docker image prune -a # or --all
上記コマンドで未使用中のコンテナイメージを一度に削除できる