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