3
results
for docker-compose
-
やろうやろうと思ってできていなかった自宅サーバーのOSアップデートと、アプリケーションのDocker移行をこのGWでやってました。 サーバー構成図(変更前と変更後) 変更前 CentOS6 apache+mod_php(PHP5.4)で全てのアプリケーションを動かしていた 設定変更時はファイルの日付で世代管理! 変更後 CentOS7 Docker(docker-compose)で分けているので、アプリケーションに応じてPHPのバージョンを変えている。(PHP7だと既存のPukiwikiが動かなかった…) itamaeでプロビジョン(git管理,RaspberryPiのgitbucketサーバー) 移行時に困った点 移行時に困ったのはfirewalldとdockerの衝突でした。 標準搭載のfirewalldを使用するためにセキュリティ設定を入れていたのですが、dockerのコンテナ起動時にdocker自身がiptablesコマンドでDNATを追加しているらしく、それが失敗してdockerへ接続できないことがありました。 結局、良い解決方法が見つからず、firewalldは諦めてiptables-servicesを動かすことにしました。 移行して良かった点 docker-composeでアプリケーションを管理しているので、手元で色々やりやすくなりました。(検証とか) ホストサーバーとアプリケーションがDockerを中心に分離出来ているので、管理する側としても状態が判別しやすくなりました。 今回itamaeを初めて使ってみましたが、普段仕事ではPuppet(どちらもRuby製のツール)を使っているので、erbなどは同じように使えてとても導入しやすかったように感じてます。 Gitで管理しているので、ファイルの日付による世代バックアップが不要になりました笑 今後の課題 今回はとにかくOSのアップデートとdockerへ移行することを目的にメンテナンスを実施したので、いくつかのアプリケーションは移行作業時には含まず、後回しにしたのでそれらをゆるりとdocker上で動かしていきたいです。
-
先日、Dockerでnginxとphp-fpmを起動する手順とDockerfileを作る手順と注意点と参考サイトを公開しました。 今回はより便利なDocker Composeを使った複数のコンテナの管理を書いていきます。 今回も前回同様に、Docker初心者向けの記事となります。 ※なお、docker runやDockerfileを作成したことが無いと、どういったメリットがあるか感じにくいと思いますので、事前にdocker runしたりDockerfileまで作成してみることをおすすめします。 Docker Composeとは docker-composeの公式リファレンスには下記のように記載があります。 複数のコンテナを使う Docker アプリケーションを、定義・実行するツールです。Compose はアプリケーションのサービスの設定に、Compose ファイルを使います。そして、コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動します。 今まではDockerfileでビルドしたイメージをdocker runのオプションを駆使して、複数コンテナを一つずつ実行していましたが、docker-composeを使うことで簡単に複数のコンテナがリンクした環境を作ることが可能です。 では実際に試してみます。 Docker ComposeでWordPress環境を作る docker-compose.ymlというファイルにyaml形式で、コンテナの情報を記載していくことで、簡単にコンテナ環境を作成することができます。 公式リファレンスにdocker-composeを使って、WordPress環境を作成する手順が記載されていますので、まずはその通りに実施します。 環境 docker for macで進めていきます。バージョンは下記の通りです。 ※docker 1.8以降からはdocker tool boxを利用するようになったようで、macであればdocker for macと一緒にtool boxの中にdocker-composeが含まれているかと思います。もしdocker-composeがなければ、dockerの公式サイトからインストールを実施してください。 $ docker -v Docker version 1.13.0, build 49bf474 $ docker-compose -v docker-compose version 1.10.0, build 4bd6f1a ディレクトリを作成する どこでも良いのでGit管理しやすいように適当な場所にディレクトリを作成して、移動します。 $ mkdir my-wordpress $ cd my-wordpress docker-compose.ymlを作成する。 公式リファレンスの内容をコピーして、docker-compose.ymlにペーストします。 version: '2' services: db: image: mysql:5.7 volumes: - "
-
通常、docker-compose up -dをすれば、docker-composeで指定されたサービスに紐付くコンテナが起動すると思います。 ところが、なぜかdocker-compose upでコンテナが起動しても、すぐに落ちてしまうことがありました。 具体的には下記のような状態になります。 $ docker-compose up Name Command State Ports ------------------------------ test /bin/bash exit 0 しかし、下記のようにdocker runでは起動できる。 ※このdocker-composeではDockerfileをbuildするようにしていた。 $ docker run --name test -ti centos:latest /bin/bash 分かる人にはこれだけみてすぐわかる方もいると思いますが、docker初心者の私はしばらくわからず色々調べてやっと解決することができました。 参考サイト docker-compose.ymlの対象のコンテナに下記を追加してあげるだけでした。 tty: true 要は**/bin/bash**を実行しているので、ttyを割り当てないと、継続して起動できないということでした。 確かにdocker run では-t つけてた…。 docker runのリファレンスにも同様のことが記載されていて、 (シェルのような)インタラクティブなプロセスでは、コンテナのプロセスに対して tty を割り当てるために、 -i -t を一緒に使う必要があります。 たしかに、なるほど。という気持ちでした。 この辺はいつも意識しないので、言われてみればそうかという感じです。 こうやってDockerの癖みたいのがわかってくると、かなり楽しいです。 また、一つDockerの気持ちが少しわかった日でした。 最近この記事へのアクセスが増えてきたので、直近であった事例を追記。 会社の人が、docker execで起動するのに、docker-compose up -dで固まる(?)ような症状になったことがありました。 この時はどうやら名前解決に時間がかかっていたようで、MacのDNS参照先を変更することで解決しました。 具体的には、 システム環境設定>ネットワーク>接続が一番上のネットワークの詳細>DNSに8.8.8.8を追加。 ※8.8.8.8はGoogleのPublicDNSで、もう一つ8.8.4.4を追記しておくと良いです。他には1.1.1.1はCloudflare事業者が公開しているPublicDNSなので、8.8.8.8と8.8.4.4と1.1.1.1を追加しておくと良いかもです。 下記はDockerを学びはじめたときに読んで基本が学べた本です。おすすめです。 下記は最近読んで良かったDocker本です。こちらも良本です。