Dockerfileの作成からコンテナを操作するまで

Dockerfileの作成からコンテナを操作するまで

Dockerfileの作成からDockerイメージの起動、停止までをウォークスルーでまとめました。


用語整理

  • コンテナ
    • ホストと隔離して動作するプロセス(OSやアプリ)
  • イメージ
    • コンテナが動作するために必要なすべてのファイルのかたまり
  • Dockerfile
    • 必要なパッケージやアプリ、各種設定を含んだ、イメージを作成するためのスクリプト


Dockerfileの作成

Dockerfileを記述することで、コンテナを定義し、イメージを作成することができます。


Dockerfileの基本フォーマット

viなどで下記のファイルを「Dockerfile」という名前で作成。

# ベースとするDockerイメージを指定
#   DockerHubで検索する
FROM debian

# ユーザ情報を設定
LABEL maintainer="mail@address"

# ビルドコマンド
#   RUNでOSのコマンド実行、COPYでホストからイメージへのファイルコピーなど
#   ここでは、docker build時のメッセージを設定している
RUN echo "now building..."

# 実行時コマンド
#   CMDでコンテナ起動時に実行するコマンドを記述する
#   ここでは、docker run時のメッセージを設定
CMD echo "now running..."

FROMの部分は、Docker Hubで検索して使用するイメージを選択する。

その他のコマンドは、下記ページを参照

http://docs.docker.jp/engine/reference/builder.html


Dockerfileの特徴

  • 一行一コンテナとして実行される

    • 作成途中のコンテナはキャッシュされ、2回目以降のビルド時に再使用される
  • ファイル名はデフォルトでDockerfile、ファイル名を変更する場合はDockerコマンド実行時に指定する必要あり

イメージの作成&確認

Dockerfileからイメージを作成

# docker build -t <image name> .

※最後のドットを忘れずに

-t:イメージ名の指定

.:カレントディレクトリ以下にあるすべてのDockerfileからイメージを作成


作成したイメージの一覧表示

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              latest              0dffbf9e6111        17 minutes ago      114MB

指定したイメージ名はREPOSITORYの部分に設定される


イメージを削除

誤って作ってしまった場合などに。

# docker image rm <image id>


Docker Hubからイメージを取得する場合

Dockerfileを作らずに、誰かが作ったものをそのまま使う場合

# docker pull ubuntu


コンテナの操作コマンド

まずはコンテナを起動し、その後状態表示してみましょう。


作成系

イメージからコンテナを作成(DockerfileにCMDが書かれてる場合)

# docker run -it <image name>

イメージからコンテナを作成(DockerfileにCMDが書かれていない場合)

# docker run -it <image name> /bin/bash
  • CMDが書かれているDockerfileだと、CMD行は上書きされて実行されなくなるので注意
  • 最後のパラメータにコンテナ起動後に実行するプログラムとしてシェルを指定すると、コンテナ作成後にすぐ操作できる。


名前が同じイメージが複数ある場合は、タグ名も指定する。

# docker run -it <image name>:<tag name> /bin/bash

例:docker run -it debian:latest /bin/bash


コンテナを最初からバックグラウンドで起動する場合は-dをつける

# docker run -it -d <image name>


ポートを指定して作成する(ポートの指定は、<ホスト側ポート>:<コンテナ内のポート>)

# docker run -p 8080:80 -it <image name>


環境変数を指定して作成する

# docker run -e AUTOINDEX=off -it <image name>


操作系

デタッチ

コンテナから抜けるには、Ctrl+p,qと順番に押す


アタッチ

起動しているコンテナに入る

# docker attach <container id>
または
# docker attach <name>

例:docker attach f73a55642084 または docker attach busy_crazy


コンテナ内で何か実行する

# docker exec -i -t [container id] /bin/bash

シェルを実行するとコンテナ内で操作できる


状態表示系

起動しているコンテナを一覧表示

# docker ps
CONTAINER ID   IMAGE    COMMAND       CREATED         STATUS         PORTS    NAMES
f73a55642084   debian   "/bin/bash"   3 minutes ago   Up 3 minutes            busy_cray

起動・停止しているすべてのコンテナを一覧表示

# docker ps -a


停止系

コンテナを停止させるには、コンテナ内でexitすればよい

root@f73a55642084:/# exit
exit
#


削除系

指定したコンテナの削除

# docker rm [container id]

起動しているコンテナを削除する場合は、停止してからこのコマンドを実行する


コンテナの全削除

# docker rm prune


イメージを全削除

# docker rmi prune


仮想ネットワークや不要なキャッシュなどを全削除

# docker system prune