LoginSignup
5
4

最もシンプルな docker-compose.yml の hello-world

Last updated at Posted at 2019-04-15

Looking for the simplest "Hello-World" docker-compose YAML file?

docker-compose コマンドの単純な動作確認をしたい。

つまり docker run hello-world と同じレベルの docker-composehello world が欲しいのです。

docker-compose hello-world simple」とググっても Ubuntu ベースのサンプルしかありませんでした。単純に docker-compose up で起動するかのテストであるため、そこまで大きなイメージは必要ありません。

TL; DR (今北産業)

docker-compose.yml
version: "3"
services:
  hello:
    image: hello-world:latest
usage
$ # ダウンロード
$ curl -sSL -O https://keinos.github.io/hello-docker-compose/docker-compose.yml

$ # Docker compose v2 を利用している場合
$ docker compose run --rm hello
*** snip ***
Hello from Docker!
*** snip ***

$ # 古い docker-compose (v1) を利用している場合
$ docker-compose run --rm hello
*** snip ***
Hello from Docker!
*** snip ***

Top-level object must be a mapping エラーが出た場合は、ダウンロードしたファイルが壊れています(YAML 形式ではありません)。docker-compose.yml の中身を確認してみてください。

マニアなら、bash などで docker-compose.yml を新規作成するコマンドを作ってもいいかもしれません。

docker-compose-init
#!/bin/bash

[ -f "docker-compose.yml" ] && {
  echo >&2 'docker-compose.yml already exists.'
  exit 1
}

{
  cat <<HEREDOC >docker-compose.yml
version: "3"
services:
  hello:
    image: hello-world:latest

HEREDOC
} || {
  echo >&2 'Failed to create docker-compose.yml'
  exit 1
}

echo 'docker-compose.yml created.'
echo '- docker-compose.yml v3 Reference: https://docs.docker.com/compose/compose-file/'

TS; DR

あれ?もしかして docker-compose 動いてなくなくない?
でも docker-compose --version は動くのに?

docker-compose のバージョン情報は返すものの、それ以外のコマンド・オプションが動かないことがありました。特に CircleCI 実行時や Vagrantfile 内のスクリプトで、Docker や Docker-Compose を自動インストールした場合などです。

原因は、単純な設定ミスで Docker デーモンの起動に失敗していたことでした。

そこでポカヨケとして、CI を回す時や vagrant up 時にdocker run hello-world と同じくらい至極簡単な動作テストを docker-compose でしたかったのです。

しかしdocker-compose hello-world simple」とググっても Ubuntu ベースのサンプルしかありませんでした。単純に docker-compose run で起動するかのテストであるため、そこまで大きなイメージは必要ありません。

「それなら、普通に docker の hello-wolrd イメージを使えば良いじゃん」と聞こえてきたので、自分のググラビリティとして。

実行例
$ # 作業ディレクトリの作成
$ mkdir hello-world && cd $_

$ # ダウンロード(ソースをコピペして作成しても OK)
$ curl -O https://keinos.github.io/hello-docker-compose/docker-compose.yml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    62  100    62    0     0    227      0 --:--:-- --:--:-- --:--:--   226

$ # 確認
$ ls
docker-compose.yml

$ cat docker-compose.yml
version: "3"
services:
  hello:
    image: hello-world:latest
 
$ # 実行
$ docker-compose run hello
Creating network "core_default" with the default driver
Creating core_hello_1 ... done
Attaching to core_hello_1
hello_1  | 
hello_1  | Hello from Docker!
hello_1  | This message shows that your installation appears to be working correctly.
hello_1  | 
hello_1  | To generate this message, Docker took the following steps:
hello_1  |  1. The Docker client contacted the Docker daemon.
hello_1  |  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
hello_1  |     (amd64)
hello_1  |  3. The Docker daemon created a new container from that image which runs the
hello_1  |     executable that produces the output you are currently reading.
hello_1  |  4. The Docker daemon streamed that output to the Docker client, which sent it
hello_1  |     to your terminal.
hello_1  | 
hello_1  | To try something more ambitious, you can run an Ubuntu container with:
hello_1  |  $ docker run -it ubuntu bash
hello_1  | 
hello_1  | Share images, automate workflows, and more with a free Docker ID:
hello_1  |  https://hub.docker.com/
hello_1  | 
hello_1  | For more examples and ideas, visit:
hello_1  |  https://docs.docker.com/get-started/
hello_1  | 
core_hello_1 exited with code 0

$ # 終了結果
$ echo $?
0
動作確認済み環境
$ docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.8
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:16:31 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:16:31 2018
  OS/Arch:          linux/amd64
  Experimental:     false

$ docker-compose version
docker-compose version 1.24.0, build 0aa59064
docker-py version: 3.7.2
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018

$ cat /etc/os-release
NAME="Container Linux by CoreOS"
ID=coreos
VERSION=2023.5.0
VERSION_ID=2023.5.0
BUILD_ID=2019-03-09-0138
PRETTY_NAME="Container Linux by CoreOS 2023.5.0 (Rhyolite)"
ANSI_COLOR="38;5;75"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://issues.coreos.com"
COREOS_BOARD="amd64-usr"
5
4
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
5
4