LoginSignup
1
0

More than 3 years have passed since last update.

Dockerイメージの作成(初級2)

Last updated at Posted at 2020-04-28

概要

「docker container run」と「docker-compose」の対応関係がよく分からないので大雑把に把握したい。
「Dockerイメージの作成(初級1)」
「作成したDockerイメージから、docker container runでコンテナを実行」を
「作成したDockerイメージから、docker-composeにてコンテナ実行」に置き換えてみる。

作業の内容

  • こちらで作成したDockerイメージを利用する
  • Dockerイメージを単に実行するだけのdocker-compose.ymlを用意する
  • 「docker-compose up」コマンドでコンテナを起動する。シェルが実行されて「Hello, World!」と出力する
  • イメージ名:shellsample
  • コンテナ名:shellsample
  • 「初級1」で作成したコンテナは「docker container rm」コマンドで事前に削除しておく
  • 今回はComposeを覚える目的であるため、起動するコンテナは1つとする
  • 階層構造は以下のとおり
shellsample
 ├ hello.sh
 ├ Dockerfile
 └ docker-compose.yml

Docker Composeとは

Docker Composeはyaml形式の設定ファイルで、複数のコンテナ実行を一括で管理できる。
コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動する。
詳細はこちら

docker-composeに置き換えるコマンド

以下の「docker container run」コマンドと同等のことをdocker-composeで実現する。

Powershell
> docker container run -it --name shellsample shellsample

docker-compose.ymlの作成

docker-compose.yml
version: "3.3"
services:
  shell:
    image: shellsample:latest
    container_name: shellsample
    stdin_open: true
    tty: true

【補足】
version: "3.3"
docker-compose.ymlのファイルフォーマットバージョンを宣言している。※詳細

image
コンテナーを起動させるイメージを設定。 ※詳細 

container_name
デフォルトのコンテナー名ではない、独自のコンテナー名を設定する ※詳細

stdin_open
「docker container run」のオプションに対応づいている(iオプションに相当)。
コンテナの標準入力とDockerホストの標準入力を接続する。

tty
「docker container run」のオプションに対応づいている(tオプションに相当)。
コンテナの標準出力とDockerホストの標準出力を接続する。

コンテナ起動

「docker-compose up」コマンドでコンテナの作成と起動を行う。

Powershell
> docker-compose up

Starting shellsample ... done
shellsample | Hello, World!
shellsample exited with code 0

※「Hello, World!」を出力できた
※本サンプルはバックグラウンド実行する必要がないため、「-d」オプションは指定していない。

【補足】
docker-compose コマンドの概要

分かること

  • 作業後のコンテナ一覧

「docker container run」の時と同様に「shellsample」コンテナが作成された。

Powershell
> docker container ps -a

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS                    NAMES
4701fb8ae2b7        shellsample:latest    "/opt/shell/hello.sh"    51 minutes ago      Exited (0) 3 minutes ago                            shellsample
  • コンテナを再度起動したときに出力がなされるか確認

出力されない。

Powershell
> docker-compose start
Starting shell ... done     

おそらく、「stdin_open: true」「tty: true」の設定をしたとしても実際にコンテナの標準入出力がアタッチされるのは「docker attach」コマンドを実行したあとであろうと思う。「docker attach」コマンドは、コンテナが実行されている状態で実行が必要だが、本サンプルは、出力を行った後、すぐにコンテナは終了するので試せない。

関連記事

1
0
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
1
0