Dockerfile指令详解以及docker私有仓库

2018年7月18日11:31:59 发表评论 2,837 ℃

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 网络

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: