支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


1.はじめに

Dockerコンテナのライフサイクル(作成→起動→終了→削除)に必要な基本コマンドを一通り試していきます。

環境

Docker Toolbox

2.イメージ取得~削除まで

まずはイメージ一覧の確認コマンドです。取得済のイメージが表示されます。

■イメージ一覧:docker images

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE

Docker Hubから公式イメージを取得してみます。

■イメージ一覧:docker pull {イメージ名:タグ}

$ docker pull httpd:2
2: Pulling from library/httpd
(省略)

もう一度イメージ一覧を確認してみると、取得したイメージが追加されています。

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
httpd                   2                   ccbcea8a6757        2 weeks ago         166MB

取得したイメージを削除してみます。

■イメージの削除:docker rmi {イメージ名orイメージID}

$ docker rmi ccbcea8a6757

イメージ一覧から消えていることが確認できます。

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE

次はdockerfileからイメージを作成してみます。
例として公式のイメージhttpd:2にVimを追加しただけのイメージを作ります。以下のファイルを準備します。

dockerfile
FROM httpd:2
RUN apt-get update && \
  apt-get install -y vim

下記コマンドで実行できます。-t オプションで名前とタグを設定できます。今回はイメージ名をtest、タグを001で設定しました。

■dockerfileからイメージの作成:docker build -t {イメージ名:タグ名} {dockerfileへのパス}

$ docker build -t test:001 ./
Sending build context to Docker daemon  4.096kB
Step 1/2 : FROM httpd:2
(省略)

イメージ一覧を確認してみます。
基となった公式イメージと作成したイメージの2つが追加されています。

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
test                    001                 323103358339        31 seconds ago      216MB
httpd                   2                   ccbcea8a6757        2 weeks ago         166MB

3.コンテナ起動~コンテナ内へログイン

作成したイメージを基にコンテナを起動してみます。
起動前にコンテナ一覧を確認してみます。-aオプションなしの場合は起動中コンテナのみ表示されます。

■コンテナ一覧の確認 docker ps -a

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

何もない状態です。ではコンテナを起動します。オプションの内容については下記の通りです。

  • -d 起動をバックグラウンドで実施
  • --name コンテナ名を指定
  • -p ポートフォワーディング設定

■コンテナの起動:docker run -d --name コンテナ名 -p {ホストのポート番号}:{コンテナのポート番号} {イメージID or イメージ名}

$ docker run -d --name test -p 80:80 ccbcea8a6757
9fd0e3afea1b95c2b06116b5f5f07da8bafe7d3e3f1bb9f4d7c7158193525115

コンテナ一覧を確認してみます。
起動したコンテナが表示されています。STATUSがUPになっていれば起動中です。

$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
9fd0e3afea1b        ccbcea8a6757        "httpd-foreground"   5 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp   test

起動したコンテナ内へアクセスしてみます。
WindowsでDockerを使用している場合はコマンドのはじめにwinptyが必要です。

■コンテナへアクセス:[winpty] docker exec -it {コンテナ名orコンテナID} bash

$ winpty docker exec -it test bash
root@9fd0e3afea1b:/usr/local/apache2#

アクセスできました。
ログアウトするにはコンテナ内でexitします。

■コンテナからログアウト:exit

root@9fd0e3afea1b:/usr/local/apache2# exit
exit

4.コンテナ停止・起動・再起動

作成したコンテナを停止します。

■コンテナの停止:docker stop {コンテナ名orコンテナID}

$ docker stop 9fd0e3afea1b
9fd0e3afea1b

コンテナ一覧で確認するとSTATUSがExitedになっています。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                          PORTS               NAMES
9fd0e3afea1b        ccbcea8a6757        "httpd-foreground"   18 hours ago        Exited (0) About a minute ago                       test

停止したコンテナを起動します。

■コンテナの起動:docker start {コンテナ名orコンテナID}

$ docker start 9fd0e3afea1b
9fd0e3afea1b

コンテナ一覧で確認するとSTATUSがUPになっています。

$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
9fd0e3afea1b        ccbcea8a6757        "httpd-foreground"   22 minutes ago      Up 36 seconds       0.0.0.0:80->80/tcp   test

コンテナの再起動をします。1コマンドでコンテナのstop→startを実行できます。

■コンテナの再起動:docker restart {コンテナ名orコンテナID}

$ docker restart 9fd0e3afea1b
9fd0e3afea1b

5.ホストとコンテナ間でのコピー

ホスト側からコンテナへファイルをコピーしてみます。
ここではtest.txtという空ファイルを準備してコンテナのルートディレクトリへコピーしています。

■ホストからコンテナへのコピー:docker cp {コピーするファイル名} {コンテナID}:{コピー先パス}

$ docker cp test.txt 9fd0e3afea1b:./

コンテナ内に入ってコピーできているか確認します。

$ winpty docker exec -it 9fd0e3afea1b bash
root@9fd0e3afea1b:/# find ./test.txt
./test.txt

コピーできていることを確認できたので、次はコンテナからホスト側へコピーをしてみます。
exitでコンテナからログアウトします。

■コンテナからホストへのコピー docker cp {コンテナID}:{コピーするファイル名} {コピー先パス}

docker cp 9fd0e3afea1b:./test.txt ./cp_test.txt

カレントディレクトリをlsで確認するとcp_test.txtが確認できます。

6.コンテナ削除

次はコンテナを削除してみます。
コンテナの起動中は削除できないので、一旦コンテナを停止します。

■コンテナの削除:docker rm {コンテナ名orコンテナID}

(docker stopで停止した後に)
$ docker rm 9fd0e3afea1b
9fd0e3afea1b

-fオプションを使用すれば、起動中のコンテナも削除できます。

$ docker rm -f 9fd0e3afea1b
9fd0e3afea1b

コンテナ一覧から削除されているか確認します。
-f id={コンテナID}オプションで、コンテナIDに一致するコンテナのみ表示できます。

$ docker ps -a -f id=9fd0e3afea1b
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

7.おわりに

コンテナのライフサイクル(作成→起動→終了→削除)を通して基本コマンドを一通り試すことができました。
他にも便利なコマンドやオプションがありますので、Docker公式ドキュメント(docs.docker.com)等をご確認ください。