Docker
# 安装命令
brew cask install docker
国内访问 Docker Hub 有时会遇到困难,最好配置镜像加速器。
- http://registry.docker-cn.com
- https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/
- https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/
- http://get.daocloud.io/
ENTRYPOINT vs. CMD
No ENTRYPOINT | ENTRYPOINT exec_entry p1_entry | ENTRYPOINT [“exec_entry”, “p1_entry”] | |
---|---|---|---|
No CMD | error not allowed | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry |
CMD [“exec_cmd”, “p1_cmd”] | exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry exec_cmd p1_cmd |
CMD [“p1_cmd”, “p2_cmd”] | p1_cmd p2_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry p1_cmd p2_cmd |
CMD exec_cmd p1_cmd | /bin/sh -c exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd |
常用命令
# 以交互式环境,执行一个 bash,并在 exit 后删除该 container
docker run -it --rm \
debian:14.04 \
bash
# 通过 volumns 在宿主机与 container 共享目录
docker run -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 -i nginx
# 进入通过 -d 参数启动的后台 container
docker exec -it ${container_id} bash
# 虚悬镜像
docker images -f dangling=true
# 删除虚悬镜像
docker image prune
# 构建镜像,在具有 Dockerfile 的目录下执行
docker build -t nginx:v3 .
JVM in Docker and PTRACE_ATTACH
Docker 1.10 之后加了些安全限制,导致无法 ptrace 无法使用,进而导致 jmap 无法使用。解决访问
docker run --cap-add=SYS_PTRACE alpine sh -c 'apk add -U strace && strace echo'
## docker-compose 自1.1.0版本后支持 cap_add
version: '2'
services:
api:
...
cap_add:
- SYS_PTRACE
- https://jarekprzygodzki.wordpress.com/2016/12/19/jvm-in-docker-and-ptrace_attach/
- https://docs.docker.com/engine/reference/run/#additional-groups
Remote APIs
配置启动参数
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com -H tcp://0.0.0.0:4243"
curl localhost:4243/images/json
- https://docs.docker.com/engine/api/v1.24/#3-endpoints