yan's Handicraft

作成したフリーソフトを公開
Home » PC/システム開発 » Archive by category 'Docker'

Docker ComposeのYAMLサンプル(Windowsで使う例)

昨年(2016年)ぐらいから、windows 環境で docdker-compose が使いやすくなっていて、 ローカルPC用のテスト環境用のサーバを準備するのに使い始めています。

とはいっても、設定ファイルを整合性を維持して書くのは気を使うし、間違うことも多々あります。

今後も、自分メモとして、ひな形として使えるようにgithubにサンプルを作ってみました。 基本方針としては、docker hub に登録されている、Docker公式イメージを中心に使い、 設定情報も最小限にしています。(一部、公式でないものも使っています。)

色々なファイルをコミットしていますが、一番大事なのは、 “docker-compose.yml” 、 “compose_up.sh” です。(この記事を作成した時点では、redis 、tomcat 、 sftpサーバ 、mysql 、openjdk 用バッチサーバ 、を含んでいます。)


事前条件

  • Docker Toolbox for Windows がインストール済であること
    • 同時に、”VirtualBox” と “Git for Windows” をインストールできるようになっています。必ず両方インストールしておいてください。

yangiYA/docker_compose_sample4win 使用例

  • Windowsの %USERPROFILE% ディレクトリ以下に、yangiYA/docker_compose_sample4win を配置してください。 (Github のシェルや、Dokerのターミナルなら “$HOME” 以下のディレクトリに配置してください。)
  • “Docker Quickstart Terminal”を起動します。
    (“Docker Quickstart Terminal”は[Docker Toolbox for Windows]をインストールすると、スタートメニューや、ショートカットとして登録されています。)
    起動すると、”Git for Windows”ベースのターミナルが起動して、また、VirtualBox上にVMが起動します。

    • 参考: “Docker Quickstart Terminal”を初めて起動する際に、自動的に”default”という名前のVMが作成されます
  • yangiYA/docker_compose_sample4win を配置したディレクトリに移動ます。
  • compose_up.sh” を起動して、docker container を実行します。
$ ./compose_up.sh
 
... (中略) ...
 
Creating java_01
Creating mysql_01
Creating mysftp_01
Creating tomcat_01
Creating myredis_01
 
****************************************************
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                  PORTS                     NAMES
f6464333f619        redis:3-alpine         "docker-entrypoint.sh"   2 seconds ago       Up Less than a second   0.0.0.0:16379->6379/tcp   myredis_01
63f4236086b9        tomcat:8.5-alpine      "catalina.sh run"        2 seconds ago       Up Less than a second   0.0.0.0:18080->8080/tcp   tomcat_01
eb5b35bb9661        atmoz/sftp:alpine      "/entrypoint sftpuser"   2 seconds ago       Up Less than a second   0.0.0.0:10022->22/tcp     mysftp_01
e1132ad801b4        mysql:5.6              "docker-entrypoint.sh"   2 seconds ago       Up Less than a second   0.0.0.0:13306->3306/tcp   mysql_01
59996af37e4d        openjdk:8-jdk-alpine   "tail -f /dev/null"      2 seconds ago       Up Less than a second                             java_01
 
 
 
****************************************************
* IP of Linux VM(for docker containers)
192.168.99.100
****************************************************
 
 
$

Dockerコンテはへのアクセス方法

上のログの場合 “192.168.99.100” がVMのIPです。 Dockerコンテナへの接続には、「ローカルPC」=>「VM」=>「各Dockerコンテナ」と経由してアクセスします。

上のログのうち、一番上を例とすると

CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                  PORTS                     NAMES
f6464333f619        redis:3-alpine         "docker-entrypoint.sh"   2 seconds ago       Up Less than a second   0.0.0.0:16379->6379/tcp   myredis_01
  • ローカルPCからは “192.168.99.100:16379” に接続すると、Dockerコンテナのredisサービスに接続できます。
  • 他のDockerコンテナから、アクセスする場合は、ネットワーク名”myredis_01″、ポート”6379″ でアクセスできます。
    • ネットワーク名が、割り当たっているIPを参照するには、 “docker_network.sh” を実行すると参照できます。

docker-toolboxパスの変換がされない件の対処法

1月 28th, 2017 Posted in Docker, PC/システム開発 Tags:

先日、docker-toolboxをバージョンアップしてハマった件(http://ti.que.jp/p/2017/01/26/docker-toolbox12_5/ ,Windows上のフォルダとdockerのフォルダのマッピングできなくなり) についての対処方法です。

環境変数 COMPOSE_CONVERT_WINDOWS_PATHS1 を指定することで、以前と同様の振る舞いをします。 COMPOSE_CONVERT_WINDOWS_PATHS の仕様については以下に記述あり。

より具体的な対応方法の例は

  • Windowsの環境変数に設定してしまう
  • docker-composeを実行するシェルで環境変数を指定する

ようなところかと思います。シェルの例としては以下のような感じでどうでしょうか。

#!/bin/sh
HERE=$(cd $(dirname $0);pwd)
cd $HERE
export COMPOSE_CONVERT_WINDOWS_PATHS=1
docker-compose --project-name project01  up -d  --build

なお、環境変数COMPOSE_CONVERT_WINDOWS_PATHSをデフォルトのまま変更しない場合は 「virtualBolxの共有ディレクトリ指定」「docker-compose.ymlに記述するパス」「Docker Quickstart Terminalでのパス」「VM上のパス」 の辻褄をあわせれば動作させるることができるのではないかと思います。 (逆に設定面倒なのでやってみてません。)

docker-toolbox12.5以後パスの変換がされなくなった

1月 26th, 2017 Posted in Docker, PC/システム開発

docker-toolbox バージョンアップすると Windows上のフォルダとdockerのフォルダのマッピングできなくなり 動かなくなった。

おそらく原因は以下のサイトが示すもの。
https://forums.docker.com/t/docker-compose-volume-mounts-dont-work-with-docker-toolbox-running-on-windows/26211/3

以前は、”C:\Users/”以下に配置しておけば、自動的にマッピングできたのですが、 Windows toolbox 12.5.x 以降仕様が変わり、自動的に変換しなくなった模様。

解決方法を考え中

WindowsでDocker(Docker for Windows)

3月 28th, 2015 Posted in Docker, PC/システム開発

かつて、Windowsマシン上でDockerを使用するには、
Vagrant、VirtualBox、DockerをプロキシするLinux(coreos など)を 自力で組み合わせて環境構築する必要がありました。

「Docker for Windows Installer」(Docker公式)を使うと、それだけでDockerが利用できるようになった模様です。

メンバーに同じテスト環境を配布できたらうれしいので、ちょっとやってみます。

「Docker for Windows Installer」 インストール

  • Docker公式サイトで配布されている 「Docker for Windows Installer」 をつかってインストールする。
    最新版にたどり着くためには 「Windows用インストーラの説明サイト」 から”Docker for Windows Installer”のリンクをたどってインストーラを探すのがよいかと思う。
  • インストーラ docker-install.exe を実行して、インストールウィザードに従うと、 「Boot2Docker For Windows本体」「VirtualBox」「MYSYS-git」 がセットでインストールされる。
    「VirtualBox」「MYSYS-git」がすでにインストール済の場合は、 インストールしなおすかそのまま使うか選択できる。
  • インストールが完了すると、 「Boot2Docker Start」というショートカットがデスクトップにできる。

boot2docker 最新化

Windowsのコマンドとして、以下を実行。 (コマンドプロンプトやPowerShellのプロンプトで実行)

boot2docker download

boot2docker の開発は活発で、はまだまだ頻繁にアップデートされそう。たまにったほうがよさそう。

ちなみに、 boot2docker コマンドは、「Docker for Windows Installer」 によって、Windowsの環境変数にパスが通る。

Dockrのホスト役のVM作成・起動・停止

Dockrのホスト役のVM boot2docker-vm を作成する

C:\hoge > boot2docker init

VMのディスクサイズを指定したければ以下 (単位はMB。あまり巨大なサイズを指定すると時間がかかる傾向にある)

C:\hoge > boot2docker init --disksize=100000

init により、Virtualbox にVMが作成される。

boot2docker-vm を起動する

boot2docker start

(20015-03-28 時点 C:\Users が VM上の /c/Users/ としてアクセスできるように共有設定されていた)

boot2docker-vm を停止する

boot2docker stop

boot2docker-vm を削除するする

作った boot2docker-vm を作り直したかったら以下を実行。

boot2docker delete

Boot2Dockerで使用するターミナルについて

boot2docker を使用するにあたっては、「Windows のコマンド」、 「ssh コマンドで Linux VM に接続」 「Linux ターミナル内で、linux のコマンド操作」と 色々なコマンド操作が必要になる。

私は、「GitHubForWindows のシェル」だけで、全部操作してしまうのをお奨めする。
(別途 GitHubForWindows をインストールする必要あり)

以下、使えそうなターミナルの特徴をいくつかご紹介する。

  • GitHubForWindows のシェル (PowerShellのターミナルベース)

    • 「windows コマンド」・・・
    • ssh接続 ・・・
      • boot2docker ssh とするとssh接続できる。
      • ssh接続してしまえば、linux コマンドが普通に操作できる
  • コマンドプロンプト

    • 「windows コマンド」・・・
    • ssh接続 ・・・ 不可
  • MYSIS GIT Bash

    • 「windows コマンド」・・・ 一部可。 (boot2docker コマンドは使用できる)
    • ssh接続 ・・・
      • boot2docker ssh とするとssh接続できる。
      • ssh接続してしまえば、linux コマンドが普通に操作できる
  • ターミナルソフト (“teraterm”、”putty” など)

    • 「windows コマンド」・・・ 不可
    • ssh接続 ・・・
      • %USERPROFILE%\.ssh\id_boot2docker にboot2docker用の秘密鍵が 作成されているので、これを使ってSSH接続する。
      • IPアドレスは boot2docker ip で調べられる。
      • linuxターミナルに限った使い勝手としては、一番良いと思われる。
  • Boot2Docker Start (boot2dockerをインストールするとデスクトップにできるショートカットから起動)

    • 「windows コマンド」・・・ 不可
    • ssh接続 ・・・
      起動すると、ssh接続した状態になる。このターミナルからは、 boot2docker-vm を停止させられない。 いけてない。

Dockeコンテナ動作確認

GitHubForWindows のシェルを使用するのを前提に以下説明します。 別のターミナルを使う場合は適当に読み替えてください。

Docker が用意しているサンプルイメージ hello-world を使って動作確認。

C:\hoge > boot2docker ssh

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
511136ea3c5a: Pull complete
31cbccb51277: Pull complete
e45a5af57b00: Pull complete
hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should n
ot be relied on to provide security.
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that  ... 以降省略 ...

問題なければ上ようにdockerのimageがダウンロードされて動作し、 Hello from Docker. が表示されるはず。

Docker Compose について

複数の DockerコンテナをYAMLファイルで管理するツール。 (Docker Compose は fig の後継)

2015-03-28 時点では、boot2docker-vm 上で動かすことができない。
使用したい場合は、別途 Linux VM を立てて、 Docker Composeをインストールする必要があると Docker の issue 管理の回答では述べられている。 VM boot2docker-vm に色々ライブラリをインストールしてやると、動かせるかもしれないが不明。 (Docker Compose は fig の後継) 今後に期待。

関連URL

  • Docker Compose — http://docs.docker.com/compose/
  • Fig — http://www.fig.sh/
  • 動かないことを説明している issue
    • https://github.com/docker/compose/issues/1032
    • https://github.com/docker/compose/issues/599
  • 「Windows で動かしたいね」という issue
    • https://github.com/docker/compose/issues/1085

感想

  • 同じ環境を何度も簡単に作り直せそう。
    • Doker hub には、Docker公式のイメージもたくさんあり、使えそう。
  • Docker Compose が現時点使えないので、 複数サーバを組み合わせた環境を作るには面倒。意図通りのテスト環境を配布するのは少し苦労しそう。
    (Vagrant の Provider を利用して dockerコンテナを作る方法も検討したい。)

おしい。


特記事項: プロキシ

プロキシが必要な環境では、 docerコンテナがインタネットアクセスする際に失敗してまう。 以下対応策。

  • boot2docker-vm にsshログインして作業する。
$ sudo vi /var/lib/boot2docker/profile
  • 設定する内容
export HTTP_PROXY=http://your.proxy.url:8080
export HTTPS_PROXY=http://your.proxy.url:8080

http://your.proxy.url:8080 部分はご自分の環境の値に設定してください。

  • 設定後、Dockerコンテナを再起動
$ sudo /etc/init.d/docker stop
$ sudo /etc/init.d/docker start
  • 参考
    /etc/init.d/docker スクリプト内で、 /var/lib/boot2docker/profile を実行するようになっている。
    このため、これで解決できるのは、docker コンテナからのアクセスだけ。 VM boot2docker-vm から直接、インターネットアクセスするには、 いちいち環境変数設定したり、プロキシーのパラメータを設定しないと解決しない。