digdag と Docker outside of Docker(DooD)
2020-12-30
手元で digdag を試す時にそれ自体を docker の中に入れていて、さらにタスクをコンテナで実行したいと思って調べたことをメモ
サンプルのリポジトリはgithubにおきました
digdag 本体の dockerize
envsubst
で docker-compose 側の環境変数を動的に digdag にも与える- これをファイルに書いたものを
bin/
などに配置して command として起動する
envsubst < digdag/server.properties.template > digdag/server.properties
java -jar /usr/local/bin/digdag server -c digdag/server.properties
- docker-compose.yml でコンテナの中からホスト側の docker.sock を見られるように volumes を設定する
# docker-compose.yml
version: '3'
services:
digdag_server:
build:
context: .
dockerfile: docker/Dockerfile
ports:
- "65432:65432"
depends_on:
- postgres
environment:
POSTGRES_HOST: postgres
POSTGRES_DB: digdag_db
POSTGRES_USER: digdag
POSTGRES_PASSWORD: digdag
volumes:
- .:/src
- /var/run/docker.sock:/var/run/docker.sock
command: /bin/sh bin/digdag
postgres:
image: postgres:13.1-alpine
ports:
- "5432:5432"
environment:
POSTGRES_DB: digdag_db
POSTGRES_USER: digdag
POSTGRES_PASSWORD: digdag
workflow の実行
準備ができたら適当な .dig ファイルを用意して実行してみる。 今回はテストなのでGUIで作る
+docker_pull:
sh>: docker pull ruby:2.7-alpine
+docker_run:
sh>: docker run -i --rm ruby:2.7-alpine ruby -e 'puts "hey"'
GUIから workflow をRUNすると docker image の pull が走って、 hey
と表示されるはず