在把自己的項目通過Docker進行打包時,由於項目中用到了crontab,不過使用到的基礎鏡像python:3.6-slim
並沒有安裝這項服務,記錄下在鏡像中安裝和配置crontab的過程。
Dockerfile
由於基礎鏡像中沒有crontab服務,需要在打包自己鏡像的Dockerfile中加入安裝cron服務的步驟。
FROM python:3.6-slim
MAINTAINER whx3000 <wanghaoxi3000@163.com>
RUN apt-get update && \
apt-get install -y --no-install-recommends \
cron && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean
RUN chmod +x ./docker-entrypoint.sh
ENV LC_ALL C.UTF-8
ENTRYPOINT ["./docker-entrypoint.sh"]
執行apt安裝時注意加入-y --no-install-recommends
,並且在安裝完成后執行rm -rf /var/lib/apt/lists/* && apt-get clean
命令,可以有效減小鏡像的體積。
這樣安裝完cron服務后,crontab服務並不會自啟動,還需要一個docker-entrypoint.sh
啟動腳本來添加crontab的啟動命令。
啟動腳本
#!/bin/bash
set -x
# 保存環境變量,開啟crontab服務
env >> /etc/default/locale
/etc/init.d/cron start
/etc/init.d/cron start
用於啟動crontab服務,但這樣啟動的crontab服務中配置的定時命令是沒有Dockerfile中設置的環境變量的。因此還需要在這之前執行env >> /etc/default/locale
,這樣有Dockerfile中通過ENV
設置的環境變量在crontab中就可以正常讀取了。