文書の過去の版を表示しています。
<markdown> # docker-compose
## サブコマンド
実行。サービス名なしの場合は全部立ち上げる。-dはバックグラウンド起動
docker-compose up [サービス名] docker-compose up -d [サービス名]
ワンオフ実行(cliツールなどの起動)
docker-compose run --rm サービス名
imageのビルド(事前にビルドしなくてもup時になければビルドされる)
docker-compose build
現在のconfigを確認
docker-compose config
composeファイルを指定して実行(-fはサブコマンドより前に書く)
docker-compose -f path/to/compose1.yml -f path/to/compose2.yml up
環境変数でcomposeファイルを指定
COMPOSE_FILE=path/to/compose1.yml:path/to/compose2.yml docker-compose up
起動中のコンテナにアタッチ
docker-compose exec サービス名 コマンド
## 例
nginxとphp-fpmを立ち上げる例
docker-compose.ymlを作成
``` version: '2' services:
php-fpm: image: php:7.2.10-fpm-alpine volumes: - ./htdocs:/var/www/html nginx: image: nginx:alpine ports: - 8080:80 depends_on: - php-fpm volumes: - ./htdocs:/var/www/html - ./nginx/conf.d:/etc/nginx/conf.d
```
htdocs以下にinxex.phpを配置する。これが2つのコンテナ上では/var/www/htmlディレクトリになる
``` <?php phpinfo(); ?> ```
nginx/conf.d/default-vhost.conf を作成、dokuwikiを動かすならこんな感じ
``` server {
listen 80; server_name _; root /var/www/html; index index.php;
access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
location ~ \.php$ { fastcgi_pass php-fpm:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
} ```
初回起動
``` docker-compose up -d ```
http://localhost:8080/index.php でphpinfoが表示されたらOK
終了
``` docker-compose stop ```
起動
``` docker-compose start ```
## Dockerfileを記述して独自imageビルドする例
serviceにbuildをつける
``` version: '3.7'
services:
embulk: image: nyan/embulk build: ./docker/embulk
```
docker/embulk/Dockerfileを記述
``` FROM adoptopenjdk/openjdk8
RUN mkdir -p /opt/embulk/bin RUN curl -o /opt/embulk/bin/embulk -L “https://dl.embulk.org/embulk-latest.jar” RUN chmod +x /opt/embulk/bin/embulk
RUN /opt/embulk/bin/embulk gem install embulk-output-jdbc RUN /opt/embulk/bin/embulk gem install embulk-output-postgresql
ENV PATH /opt/embulk/bin:$PATH ```
ビルド
``` docker-compose build ```
## ログの確認
``` docker-compose logs <service-name> ```
最後から行数を指定して取得
``` docker-compose logs –tail 10 <service-name> ```
あまり便利ではないので、dockerコマンドで見た方がいいかもしれない
## 疑似端末
`docker-compose`の`run`や`exec`コマンドは`docker`コマンドとは逆にデフォルトで疑似端末が割り当てられる(`docker run -t`相当)
cronから起動する場合など、疑似端末を割り当てずにdocker-compose runを実行したい場合は -T オプションをつける
``` docker-compose run -T hogehoge ```
docker-composeで起動しているnginxのreloadをcronで実行したい場合などに必要
``` docker-compose exec -T <name_of_nginx_container> nginx -s reload ```
</markdow n>