准备镜像

Dockerfile

  1. FROM alpine:latest
  2. RUN apk update
  3. RUN apk --no-cache add curl
  4. ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.12/supercronic-linux-amd64 \
  5. SUPERCRONIC=supercronic-linux-amd64 \
  6. SUPERCRONIC_SHA1SUM=048b95b48b708983effb2e5c935a1ef8483d9e3e
  7. RUN curl -fsSLO "$SUPERCRONIC_URL" \
  8. && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \
  9. && chmod +x "$SUPERCRONIC" \
  10. && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
  11. && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic
  12. COPY my-cron /app/my-cron
  13. WORKDIR /app
  14. VOLUME ["/app"]
  15. # RUN cron job
  16. CMD ["/usr/local/bin/supercronic", "/app/my-cron"]

my-cron

  1. */1 * * * * date >> /app/test.txt

构建镜像

  1. docker image build -t my-cron .
  2. docker image ls

创建容器

不指定-v参数

此时Docker会自动创建一个随机名字的volume,去存储我们在Dockerfile定义的volume
  1. docker run -d my-cron
  2. docker volume ls
  3. docker volume inspect 043a196c21202c484c69f2098b6b9ec22b9a9e4e4bb8d4f55a4c3dce13c15264

创建容器(指定-v参数)

在创建容器的时候通过 -v 参数我们可以手动的指定需要创建Volume的名字,以及对应于容器内的路径,这个路径是可以任意的,不必需要在Dockerfile里通过VOLUME定义 比如我们把上面的Dockerfile里的VOLUME删除
  1. FROM alpine:latest
  2. RUN apk update
  3. RUN apk --no-cache add curl
  4. ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.12/supercronic-linux-amd64 \
  5. SUPERCRONIC=supercronic-linux-amd64 \
  6. SUPERCRONIC_SHA1SUM=048b95b48b708983effb2e5c935a1ef8483d9e3e
  7. RUN curl -fsSLO "$SUPERCRONIC_URL" \
  8. && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \
  9. && chmod +x "$SUPERCRONIC" \
  10. && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
  11. && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic
  12. COPY my-cron /app/my-cron
  13. WORKDIR /app
  14. # RUN cron job
  15. CMD ["/usr/local/bin/supercronic", "/app/my-cron"]
重新build镜像,然后创建容器,加-v参数
  1. docker image build -t my-cron .
  2. docker container run -d -v cron-data:/app my-cron
  3. docker volume ls
  4. docker volume inspect cron-data
  5. ls /var/lib/docker/volumes/cron-data/_data
Volume也创建了