LoginSignup
10
7

More than 5 years have passed since last update.

Docker コマンド覚書

Last updated at Posted at 2018-10-11

個人的にいつも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

上記コマンドで未使用中のコンテナイメージを一度に削除できる

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7