master
bicijinlian 3 years ago
parent 415864da77
commit a7a8d81a84

@ -1,4 +1,11 @@
# 注释: Dockerfile学习镜像
# 注释: Dockerfile ARG命令
FROM busybox
ENV file=app
ADD ./project/ /usr/local/$file/
ARG BaseWorkPath=/App/
WORKDIR $BaseWorkPath
WORKDIR WebSites/
WORKDIR ApiDemo/
RUN pwd
# docker build -f Dockerfile.ARG --build-arg CONT_IMG_VER=0.0.2 -t study.dockerfile.arg:latest -t study.dockerfile.arg:0.0.1 .
# docker run --rm -it study.dockerfile.arg

@ -1,6 +1,7 @@
# Deckerfile 环境变量测试
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS EnvStudy
ENV Dockerfile_version=0.0.2
EXPOSE 80/TCP
WORKDIR /app
COPY WebApiPublish/ /app/
ENTRYPOINT ["dotnet", "DockerStudyApi.dll"]

@ -1,6 +1,6 @@
# Docker镜像学习
> [官网文档](https://docs.docker.com/engine/reference/commandline/build/) [BuildFile]()
> [官网文档](https://docs.docker.com/engine/reference/commandline/build/) [BuildFile](https://docs.docker.com/engine/reference/builder/)
## 镜像构建流程
@ -305,7 +305,7 @@ RUN ["/bin/sh", "-c", "echo exec方式执行后写入的内容 > demo2.txt"]
# cat demo.txt 查看内容
```
+ CMD
+ CMD 命令
> CMD命令设置容器启动后默认执行的命令及其参数但CMD设置的命令能够被docker run命令后面的命令行参数替换。
@ -316,12 +316,10 @@ CMD ["param1","param2"]作为ENTRYPOINT 的默认参数)
CMD command param1 param2 (外壳形式)
```
+ LABLE
+ LABLE 标签
> 标签:将元数据添加到镜像,键值对的形式。值包含空格时,使用双引号;包含特殊字符时,使用转义符 `\` 这在K8S筛选、管理镜像时很有用。
```textile
LABEL <key>=<value> <key>=<value> <key>=<value>
或者
@ -331,8 +329,6 @@ LABLE <key>=<value>
> 一个镜像中可以有多个标签。可以在一行上指定多个标签,这在 Docker 1.10 之前,将减少最终映像的大小,但之后不需要如此。仍然可以选择在一条指令中以下列两种方式之一指定多个标签:
```dockerfile
LABEL multi.label1="value1" multi.label2="value2" other="value3"
```
@ -343,14 +339,146 @@ LABEL multi.label1="value1" \
other="value3"
```
> 镜像会继承基本图像或父镜像中的标称如果标签已存在但具有不同的值则最近应用的值将覆盖之前设置的任何值。类似CSS
> 使用如下命令查看镜像的标签。
> 镜像会继承基本图像或父镜像中的标称如果标签已存在但具有不同的值则最近应用的值将覆盖之前设置的任何值。类似CSS使用如下命令查看镜像的标签。
>
> ```
> docker image inspect --format='' imageName
> -- format 遵循Go模板语法使用需要学习例如
> docker image inspect --format="{{.ContainerConfig.Labels}}" centos
> ```
+ ENV 环境变量
```dockerfile
# 语法
ENV key=value key=value ...
#替代语法,一次只能设置一个环境变量
ENV key value
# 可以设置多个环境变量,
# 含有空格等特殊内容的值用“”包括,可以使用转义符\进行转义和多行显示
# 环境变量位于构建阶段所有后续指令的环境中,并且可以在许多指令中以内联方式替换。
# 该值将针对其他环境变量进行解释,因此,如果不转义,将删除引号字符。
# 与命令行分析一样,引号和反斜杠可用于在值中包含空格。
# 镜像中的环境变量,从父镜像中层层继承。
# 同名的环境变量,子镜像中的值覆盖父镜像中的仁,后续值覆盖前面的值。
# 容器会继承其镜像中的所有环境变量使用容器的系统变量
# 对于容器内的应用程序来说,此环境变量相当于系统的环境变量;可以使用于多级配置项中。
```
```dockerfile
# Deckerfile 环境变量测试,包含各种方式的配置示例
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS EnvStudy
ENV Dockerfile_version=0.0.2
WORKDIR /app
COPY WebApiPublish/ /app/
ENTRYPOINT ["dotnet", "DockerStudyApi.dll"]
# docker build -f Dockerfile.ENV -t study.dockerfile.env.webapi:latest -t study.dockerfile.env.webapi:0.0.1 .
# docker run --rm -p 5051:80 -d --name study.dockerfile.env.webapi.run1 study.dockerfile.env.webapi
# 查看日志 docker logs contain_id -f //使用 -f 参数 实时输出ctl + c 退出(不影响容器运行)
```
+ MAINTAINER 维护者
> 已弃用,可以使用 LABLE 代替
+ EXPOSE 显露端口
```dockerfile
# 该指令通知 Docker 容器在运行时侦听指定的网络端口。
# 您可以指定端口是侦听 TCP 还是 UDP如果未指定协议则默认值为 TCP。
# EXPOSE实际上并未发布端口。
# 它充当生成映像的人员和运行容器的人员之间的一种文档类型,用于发布哪些端口。
# 若要在运行容器时实际发布端口,请使用 on 标志发布和映射一个或多个端口,或使用该标志发布所有公开的端口并将其映射到高阶端口
EXPOSE 80/tcp
EXPOSE 80/udp
# Docker Run 中使用真实端口与映射
# P (大写-P参数 表示随机 小写-p参数 表示指定端口)
docker run -P ...
docker run -p 80:80/tcp -p 80:80/udp ...
```
+ WORKDIR 工作目录
> 语法:
>
> ```dockerfile
> WORKDIR /path/to/workdir
> ```
>
> WORKDIR 设置工作目录,其后的指令均在该目录中执行。如果目录不存在,则将创建它,即使它未在任何后续指令中使用。
>
> WORKDIR 目录可以是绝对路径或相对路径。
>
> 如果是相对路径则该路径将相对于上一条WORKDIR指令的路径
>
> ```dockerfile
> WORKDIR /a
> WORKDIR b
> WORKDIR c
> RUN pwd
> ```
>
> 因为b c 均是相对目录,所以 pwd 的工作目录是 /a/b/c
>
> 可以使用已设置的变量、环境变量
>
> ```dockerfile
> ENV DIRPATH=/path
> WORKDIR $DIRPATH/$DIRNAME
> RUN pwd
> ```
+ VALUE 数据卷
> value
+ ARG 构建时变量
> 语法
>
> ```dockerfile
> ARG <name>[=<default value>]
> ```
>
> ```dockerfile
> # 构建时使用
> docker build --build-arg name=value --build-arg name2=value2 -t study.dockerfile.arg:latest .
> ```
>
> ARG定义了一个变量用户可以在构建时使用该标志的命令将该变量传递给构建器。如果用户指定了未在 Dockerfile 中定义的生成参数,则生成将输出警告。
>
> <mark>注意</mark>EVN定义的变量是在构建时和容器内均可用ARG变量只能在构建时使用容器内部是不存在的。也是唯一一个可以使用在FROM命令之前的命令
>
> <mark>范围</mark>:变量从 Dockerfile 中定义的行开始生效而不是从命令行或其他地方的自变量使用开始。ARG变量在定义它的构建阶段结束时超出范围。要在多个阶段使用变量每个阶段都必须包含 ARG 指令。
```dockerfile
# 注释: Dockerfile ARG命令
FROM busybox
ARG BaseWorkPath=/App/
WORKDIR $BaseWorkPath
WORKDIR WebSites/
WORKDIR ApiDemo/
RUN pwd
# docker build -f Dockerfile.ARG --build-arg CONT_IMG_VER=0.0.2 -t study.dockerfile.arg:latest -t study.dockerfile.arg:0.0.1 .
# docker run --rm -it study.dockerfile.arg
```
+ ONBUILD
+ SHELL
+ 小结

Loading…
Cancel
Save