コンテナでプログラムを定期処理させたい
- 定期処理させるだけならcronを利用すればいいのですが、せっかくなのでコンテナで実行するプログラムの定期処理をしたいと思いました...
参考にしたリンク
以下のリンクを参考にさせてもらいました。
Dockerfileの書き方
- Go言語を実行したかったので以下のように記述しました
FROM golang:1.12 AS build
RUN mkdir -p /home/wkspace/program
RUN go get github.com/PuerkitoBio/goquery
RUN go get github.com/parnurzeal/gorequest
RUN go get github.com/sclevine/agouti
COPY my-image-crawler.go /home/wkspace/program
WORKDIR /home/wkspace/program
RUN CGO_ENABLED=0 go build -o my-image-crawler my-image-crawler.go
FROM alpine:3.10
RUN apk add --update --no-cache tzdata && \
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
echo "Asia/Tokyo" > /etc/timezone && \
apk del tzdata
COPY --from=build /home/wkspace/program/my-image-crawler /usr/local/bin/
RUN chmod +x /usr/local/bin/my-image-crawler
RUN echo '45 22 * * * /usr/local/bin/my-image-crawler' > /var/spool/cron/crontabs/root
CMD ["crond", "-l", "2", "-f"]
docker-compose.yaml
- はじめはcronが指定された時間に実行されずに悩みましたが、Dockerfileとdocker-compose.yamlの両方にタイムゾーンの指定をしてしまうと設定がおかしくなるみたいでした
- 今回、dockerfileのほうにタイムゾーンの指定をしました
version: '3'
services:
my-image-crawler:
build: ./1.app/my-image-crawler
container_name: 'my-image-crawler'
tty: true
volumes:
- /home/users/wkspace/program:/home/wkspace/program:rw
working_dir: /home/wkspace/program
networks:
default:
感想
- ひとまずやりたいことができたので満足です(>_<)