例子
# 最简单的 Dockerfile
# 文件名为 Dockerfile
FROM ubuntu:14.04
RUN echo 'hello'
命令
# 是的, 你没看错, 这就完了...
# 格式: docker build <context>
> docker build .
添加 仓库信息 定位
命令
# -t 选项, 可以提供 标签 的配置 # 格式: docker build -t <repo>[:tag] <context> > docker build -t myrepo/image:0.0.1 .
自定义 Dockerfile 和 context
命令
# 手动指定 Dockerfile 和 context # 格式: docker build -t <repo>[:tag] -f <DockerfilePath> <context> > docker build -t myrepo/image:0.0.2 -f /root/myDockerfile /root/context
结果
> docker build -t <repo>/demo:0.0.2 -f Dockerfile .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM ubuntu:latest
---> 7698f282e524
Step 2/2 : RUN echo 'hello'
---> Using cache
---> 331b9ab46190
Successfully built 331b9ab46190
Successfully tagged <repo>/demo:0.0.2
格式
# 以 # 开头的行
# 行中出现的 # 则一律不被视为 注释
# 注释不支持 换行
例子
# syntax=docker/dockerfile
例子
# 这个例子
# escape=`
示例
FROM ubuntu:latest
from 一定要大写
Dockerfile
# Version 0.0.4
ARG version
FROM ubuntu:$version
命令
# 通过 --build-arg 指定了 version 参数
# -f 指定了 Dockerfile
> docker image build --build-arg version=19.04 -t repo/demo:0.0.4 -f Dockerfile04 .
版本正确
> docker image inspect -f '{{.RepoTags}}' repo/demo:0.0.4
Dockerfile
# Version 0.0.5
ARG version=19.04
FROM ubuntu:${version}
命令
> docker image build -t repo/demo:0.0.5 -f Dockerfile05 .
Dockerfile
# Version 0.0.6
ARG version=19.04
FROM ubuntu:${version}
RUN echo ${version}
命令
> docker image build -t repo/demo:0.0.6 -f Dockerfile06 .
重新声明即可
# Version 0.0.7
ARG version=19.04
FROM ubuntu:${version}
ARG version
RUN echo "hello ${version}"
列表
# 本质上只有 四个
# 具体干啥, 我现在还不知道
# 但是乍一看, 是跟 网络相关的
# 这个等以后有机会, 再讲吧
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
FTP_PROXY
ftp_proxy
NO_PROXY
no_proxy
Dockerfile
# Version 0.0.8
ARG version=19.04
FROM ubuntu:${version}
ARG version
RUN echo "hello ${version}"
ENV var="docker"
RUN echo "hello ${var}"
命令
> docker image build -t repo/demo:0.0.8 -f Dockerfile08 .
Dockerfile
# Version 0.0.9
ARG version=19.04
FROM ubuntu:${version}
ARG version
RUN echo "hello ${version}"
ENV var=${version}
RUN echo "hello ${var}"
命令
> docker image build -t repo/demo:0.0.9 -f Dockerfile09 .
命令
# RUN <command> [<options and args>]
RUN echo "hello, docker."
命令
# 1. 使用 json 的 数组格式
# 2. 命令和参数作为数组的成员
# 3. 空格隔开的, 就是一个参数
# 4. 每个参数, 都要用 "" 引起来
RUN ["echo", "hello, docker."]
# 如果硬要 环境变量
RUN ["/bin/sh", "-c", "echo", "hello, docker."]
将多个命令, 写到一个 run 里
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
命令
# linux
SHELL ["/bin/bash"]
# win
SHELL ["powershell", "-command"]
命令
# 官网上给的例子
# 其他的搭配, 估计只有自己尝试了...
--chown=<userId>:<groupName>
--chown=<userName>
--chown=<userId>
--chown=<userId>:<groupId>
命令
COPY [--chown=<user>:<group>] <src> ... <dest>
命令
# 从 url 获取(不解压)
ADD http://wordpress.org/latest.zip /root/wordpress.zip
# 解压
ADD http://wordpress.org/latest.zip /root/wordpress/
命令
# 类似 RUN
CMD command param1 param2
exec 模式
```
# 类似 RUN
CMD ["executable","param1","param2"]
```
命令
LABEL maintainer='repo'
查看
> docker image inspect -f '{{json .ContainerConfig.Labels}}' repo/demo:0.0.1
默认执行命令的用户
命令
USER <user>[:<group>]
USER <UID>[:<GID>]
可以解析环境变量
命令格式
WORKDIR /absolutePath
WORKDIR relativePath
命令
ONBUILD <otherInstruction>
命令
# 列表式
VOLUME /myvol /root/test
# json 式
VOLUME ["/myvol", /root/test]
命令
# 指定端口和协议
# 默认协议是 tcp
# 可以指定 多个
expose <port>[:<protocol>]
创建容器
# 一定要加 -P
# 这样 expose 的端口, 会随机映射到 host 的可用端口上
# 如果没有, 则会别 映射到 null
# 不影响 -p 选项来暴露端口
> docker container run --rm --name demo03 -it -P -p 32769:90/tcp repo/demo:0.0.1
验证
# 可以在 ports 那里, 看到暴露端口
> docker container ls
docker container ps
的 status 栏里命令
# 拒绝继承,
CHECKHEALTH NONE
# 简单示例
# 注意, 那个 CMD 是格式, 跟 CMD 命令要区别开
# curl 如果失败, 则容器状态变为 不健康
checkout --interval=10s --timeout=3s --retries=3 CMD curl http://192.168.30.5:5000/v2
原文:https://www.cnblogs.com/xy14/p/11944535.html