skillup

技術ブログ

サーバー・ネットワーク

docker-composeに関して

投稿日:2019年5月5日 更新日:

dockerで環境構築する場合は基本的に下記のような流れをとると思います。

  1. それぞれの出来合いのイメージをpull
  2. イメージに様々なライブラリをインストール
  3. それらをコンテナとして起動&連携

が、作業量が多かったり、環境を復元しようとすると色々大変だったりします。

基本的に1、2はDockerfileでイメージの定義をすると思いますが、複数のイメージを連携させる場合はdocker-composeというファイルを作ると一気にこれらの連携ができます。

ファイル構成とソース

php56のDockerfile

dbのDockerfile

docker-compose.yml

上記が最小構成かと思います。

頻出コマンド群

 

docker-compose up

それぞれのイメージのpull→コンテナ起動が始まります。基本的に起動させる場合は、このコマンドを打ちます。docker imagesdocker ps -aを打てばimageのpullとコンテナ起動が確認できます。

コマンドがかなり走るのとその画面での操作ができなくなるので、通常は-dオプション(バックグランドでの実行)をつけたほうがいいでしょう。また通常はdocker-composeのサービス名の全てが起動されますが、docker-compose up -d dbなどで任意のサービスのみ起動ということもできます。

起動させた場合はdocker exec -it サービス名 /bin/bashでコンテナに入ります。

docker-compose stop

コンテナを停止したい場合

docker-compose rm

コンテナを一括で削除したい場合。通常はYes or Noできかれますが-fをつけると強制的に削除されます。

docker-compose build

イメージに何らかの処理(例えば新しいライブラリの追加など)を追加してイメージ自体を更新したい時に使用。

upの場合、一度起動するとイメージに差分があっても、更新されないようですので、更新時はこのコマンドを使う必要があるようです。

こちらもup同様docker-compose build dbなどと打ってあげると入力したサービス名のみイメージが更新されます。

苦労したこと

web側とdb側で連携が取れてるのを確認するのに時間がかかりました。phpのコンテナに入って/etc/hostsを見ましたが名前解決されたあとがなかったんですよね・・・。

でもってOSがCentOSやUbuntuではないようで通常のpingがない&インストールでもうまく行かなかったので、確認に手こずりました。

てっきりダメだったのかと思ってなんどもコンテナの起動を行なっていました。

phpとdb側の連携がいっているかの確認方法として、下記の方法をとりました。

方法1:実際にプログラムをかく

面倒ですが一番確実です。ネットで色々サンプルを作ってくれている方がいるので使わせていただくのがいいかも。

データベースやテーブルをつくってもいいですが、php側に下記のようなプログラムを書いて正常に出力されるかどうかを見ればOKです。

方法2:curl -v db

curlコマンドを打ちました。80番ポートは空いてないのでエラーになるんですが名前解決ができたところまでは確認できましたので、これでもいいかも・・・

参考リンク

【初心者・入門者必見】Dockerの取扱説明書 Vol.2 Compose編

docker-composeでPHPとMySQLを連携させてみる

DockerによるPHP開発環境構築(PHP + MySQL + Nginx)

docker-compose コマンドまとめ

 

 

 

 

 

-サーバー・ネットワーク
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Terraform入門(シンプルなEC2の構築)

前回の記事でcloudformationとterraformの比較や紹介をしましたが、terraformがとっつきやすかったため、簡単なサンプルとメモを。 Contents1 インストール2 実行手順 …

no image

パス名パラメータの未チェック・ディレクトリトラバーサル

本日もセキュリティ関係のネタを少々。ディレクトリ・トラバーサルという攻撃です。 Contents1 ディレクトリ・トラバーサルとは?2 被害3 対策4 参考リンク ディレクトリ・トラバーサルとは? g …

no image

追跡ブランチからローカルブランチを作る方法~ (svn→gitの移行など)

SVNで運用されていたプロジェクトをgitに移行する機会があったのでその時のメモなどを。 思ってたよりは楽だったかな・・・ Contents1 準備2 実際の移行(git svn clone)3 gi …

no image

Sambaインストール

オフィスでサーバーをたてていますが、普段使っているメインのPCとのファイルのやりとりをSFTPクライアントなどでするのが面倒くさいので、同期させるためにSambaをインストールしました。 環境ですが、 …

no image

SQSについて

以前、少しQueueの登録について書きましたが、今回はAWSのキューサービスであるSQSについて。 以前のリンク Queueの登録と実際の処理に関して SQSのポイントについて簡単にまとめて置きたいこ …