Docker镜像加速
Ubuntu 16.04+、Debian 8+、CentOS 7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)(http://hub-mirror.c.163.com)
{
"registry-mirrors": [
https://uf3mgws6.mirror.aliyuncs.com"
]
}
Dockerfile 指令详解
#docker build [选项] <上下文路径/URL/-> 构建镜像
#docker build -t nginx:v3 .
COPY 复制文件
格式:
COPY <源路径>... <目标路径>
COPY ["<源路径1>",... "<目标路径>"]
仅在需要自动解压缩的场合使用 ADD 命令
CMD 容器启动命令
CMD 指令的格式和 RUN 相似,也是两种格式:
shell 格式: CMD <命令>
exec 格式: CMD ["可执行文件", "参数1", "参数2"...]
参数列表格式: CMD ["参数1", "参数2"...] 。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。
ENV 设置环境变量
格式有两种:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
ARG 构建参数
格式: ARG <参数名>[=<默认值>]
HEALTHCHECK 健康检查
格式:
HEALTHCHECK [选项] CMD <命令> :设置检查容器健康状况的命令
HEALTHCHECK NONE :如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指
令
HEALTHCHECK 支持下列选项:
--interval=<间隔> :两次健康检查的间隔,默认为 30 秒;
--timeout=<时长> :健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒;
--retries=<次数> :当连续失败指定次数后,则将容器状态视为 unhealthy ,默认 3
次。
# docker save alpine | gzip > alpine-latest.tar.gz
保存镜像
#docker load -i alpine-latest.tar.gz
加载镜像
利用 Linux 强大的管道,我们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功能:
#docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'
在私有仓库上传、搜索、下载镜像
使用 docker tag 将 ubuntu:latest 这个镜像标记为 192.168.100.2:5000/ubuntu:latest
格式为 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
docker tag ubuntu:latest 192.168.100.2:5000/ubuntu:latest
使用 docker push 上传标记的镜像
#docker push 192.168.100.2:5000/ubuntu:latest
Docker 默认不允许非 HTTPS 方式推送镜像
Ubuntu 16.04+, Debian 8+, centos 7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.100.2:5000"
]
}
注意:该文件必须符合 json 规范,否则 Docker 将不能启动。
用 curl 查看仓库中的镜像
#curl 192.168.100.2:5000/v2/_catalog
可以看到 {"repositories":["ubuntu"]} ,表明镜像已经被成功上传了
数据卷
#docker volume create my-vol
创建一个数据卷
docker run -d -P \
--name web \
# -v my-vol:/wepapp \
--mount source=my-vol,target=/webapp \
training/webapp \
python app.py
创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /webapp 目录
# docker volume rm my-vol 删除数据卷
rm -v :删除容器的同时移除数据卷
#docker volume prune
清理无主的数据卷空间
挂载主机目录
--mount type=bind 挂载类型 bind、volume 或 tmpfs
docker run -d -P \
--name web \
# -v /src/webapp:/opt/webapp \
--mount type=bind,source=/src/webapp,target=/opt/webapp \
training/webapp \
python app.py
上面的命令加载主机的 /src/webapp 目录到容器的 /opt/webapp 目录
容器互联
#docker network create -d bridge my-net 创建一个新的 Docker 网络
-d 参数指定 Docker 网络类型,有 bridge overlay 。
#docker run -it --rm --name busybox1 --network my-net busybox sh
#docker run -it --rm --name busybox2 --network my-net busybox sh
运行一个容器并连接到新建的 my-net 网络