のぐそんブログ

暗いおじさんがシコシコ書くブログです。

docker-composeをやってみたメモ

docker-composeを利用すると、複数のコンテナを管理するのに便利なようです。

docker-composeの設定項目

名称 内容
version Docker Composeバージョン。
記載時点の最新バージョンは3です。
services コンテナの設定をするために必要。
image 使用するDockerイメージ
build Dockerfileのディレクトリを指定。
ports 公開するポート番号
ports 公開するポート番号。
docker runでの-p ホストのポート:コンテナのポートと同じ
volumes マウント(同期)するディレクトリ。
docker runでの-v ホストのディレクトリ:コンテナのディレクトリと同じ
links コンテナ間を連携するのに利用する
depends_on サービス間の依存関係を指定する
environment 環境変数

nginxでサーバーを立てる設定

ファイル構成

├── config
│   └── default.conf //nginxの設定ファイル
├── docker-compose.yml
└── www
    └── index.html //静的ファイル

docker-compose.yml

version: '3'
services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
    volumes:
      - ./config/default.conf:/etc/nginx/conf.d/default.conf
      - ./www:/var/www 

default.conf

nginxの設定を書く。

server {
    listen          80;
    server_name example.com;
    root            /var/www;
    index       index.html;

    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;   
}

ホストのindex.html

ローカルのwwwフォルダ配下にindex.html作成する。

<html>
<head></head>
<body>
    <h1>docker compose!</h1>
</body>
</html>

コンテナを起動

docker-compose up -d

localhostでアクセスすると↓の画面が表示される。

うまく起動しない場合などにログを見たいときは↓。

docker-compose logs -f

PHP環境を作る

docker-compose.yml

php用のサービスを追加。
nginx用のサービスにlinksを追加。

version: '3'
services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
    links:
      - php
    volumes:
      - ./config/default.conf:/etc/nginx/conf.d/default.conf
      - ./www:/var/www
  php:
    image: php:7.2.8-fpm
    volumes: 
       - ./www:/var/www

nginxの設定ファイルを修正

修正の内容までわからなかった。。。

server {
    listen 80;
    server_name example.com;
    root  /var/www;
    index  index.php;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log; 

    location / {
       try_files $uri $uri/ /index.php$is_args$args;
    }
    
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(\.+)$;
        fastcgi_pass php:9000;//docker-compose.ymlで定義したサービス名を指定
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    
}

index.phpを用意

<html>
<head></head>
<body>
    <h1>docker compose!</h1>
</body>
</html>
<?php
echo('docker compose!');

コンテナを起動

docker-compose up -d

以下が表示される。