Docker 备忘。
base command
1 | $ docker stop $(docker ps -a -q); |
entrypoint VS. cmd
- 至少指定一个
- 容器作为可执行文件时应该定义
ENTRYPOINT
CMD
应该用作定义ENTRYPOINT
命令,或在容器中执行ad-hoc
命令的默认参数的一种方式- 使用替代参数运行容器时,
CMD
将被覆盖
expose VS. publish
EXPOSE
是暴露端口,主要用在 Dockerfile 中,-publish
是映射端口,主要用在 run 时- 都没有时,容器里的服务只能在里面访问
- 只有
EXPOSE
时,容器外部无法访问,但其他容器内部可以访问,有利于容器间通信 - 只有
-p
时,容器外部可以访问,同时会自动EXPOSE
timezone
1 | ENV TZ=Asia/Shanghai |
remove
1 | $ docker rmi $(docker images --filter "dangling=true" -q --no-trunc) |
host
在 docker run
时使用 --net="host"
后,容器内的 localhost
就是 Docker 的 host。Mac 下可以使用 host.docker.internal
。
enviroment
Dockerfile:
1 | ARG TOKEN=${TOKEN:-""} |
构建命令:
1 | # TOKEN 是环境变量,echo $TOKEN 应显示对应的 token |
这样,TOKEN
这个变量就会传到容器内部,作为环境变量。或者在运行时添加 -e
参数:
1 | docker run -e TOKEN name |
这种情况下,TOKEN
变量也会传到容器内部。
在 Dockerfile 中定义 build 时指定,适用于比较固定的环境变量(比如 Token,Host);运行时传入,适用于需要动态变化的环境变量(比如 PROFILE)。
这两种用法也适用于 docker-compose(build 和 run)。
Reference
- Docker remove
TAG images - Stack Overflow - date - Docker Container time & timezone (will not reflect changes) - Server Fault
- What is the difference between “expose” and “publish” in Docker? - Stack Overflow
- How to access host port from docker container - Stack Overflow
- docker - What is the difference between CMD and ENTRYPOINT in a Dockerfile? - Stack Overflow