Docker Memo

Docker 备忘。

entrypoint VS. cmd

  • 至少指定一个
  • 容器作为可执行文件时应该定义 ENTRYPOINT
  • CMD 应该用作定义 ENTRYPOINT 命令,或在容器中执行 ad-hoc 命令的默认参数的一种方式
  • 使用替代参数运行容器时,CMD 将被覆盖

expose VS. publish

  • EXPOSE 是暴露端口,主要用在 Dockerfile 中,-publish 是映射端口,主要用在 run 时
  • 都没有时,容器里的服务只能在里面访问
  • 只有 EXPOSE 时,容器外部无法访问,但其他容器内部可以访问,有利于容器间通信
  • 只有 -p 时,容器外部可以访问,同时会自动 EXPOSE

timezone

1
2
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

remove

1
2
3
$ docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
$ docker images | grep none | awk '{ print $3; }' | xargs docker rmi
$ docker image prune --filter="dangling=true"

host

docker run 时使用 --net="host" 后,容器内的 localhost 就是 Docker 的 host。Mac 下可以使用 host.docker.internal

Reference