【云计算】基本技能知识分享-03

CSDN话题挑战赛第2期
参赛话题:万家争鸣的云计算修罗场

我想分享的云计算技能/知识点

Dockerfile知识点

该技能/知识点的背景介绍

安装 Docker 时,它会自动创建 3 个网络。可以使用 docker network ls命令列出这些网络。

这 3 个网络包含在 Docker 实现中。运行一个容器时,可以使用 the --net标志指定您希望在哪个网络上运行该容器。您仍然可以使用这 3 个网络。

bridge 网络表示所有 Docker 安装中都存在的 docker0 网络。除非使用docker run --net=选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到此网络。在主机上使用 ifconfig命令,可以看到此网桥是主机的网络堆栈的一部分。

none 网络在一个特定于容器的网络堆栈上添加了一个容器。该容器缺少网络接口。

host 网络在主机网络堆栈上添加一个容器。容器中的网络配置与主机相同。可以通过主机IP访问,端口也会使用主机端口。所以主机端口不能被占用,否则容器启动会有问题
 

该技能/知识点实际运用

ENV

设置环境变量指令,用法

ENV WORKPATH /tmp
1.
也可以这样:

ENV abc=bye def=$abc
1.
第一种用法用于设置单个变量(第一个空格前为key,之后都是value,包括后面的空格),第二种用于同时设置多个变量(空格为分隔符,value中包含空格时可以用双引号把value括起来,或者在空格前加\反斜线),当需要同时设置多个环境变量时推荐使用第二种格式。这些环境变量可以通过docker run命令的–env参数来进行修改。

ENV用法如下:

ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat fluffy
1.
2.
3.
FROM

设置基础镜像,一个有效的Dockerfile必须有一个FROM指令指定一个基础镜像,这个镜像可以是任何你可以从共用仓库获取到的镜像。执行命令格式

FROM <image>
1.
或者

FROM <image>:<tag>
1.
或者

FROM <image>@<digest>
1.
MAINTAINER

设置创建镜像的作者信息。

MAINTAINER zhanghaojie@qq.com
1.
RUN

这个指令有两种格式.

第一种形式:

RUN chown user2:user2 /home/webapi (以shell形式执行命令,等同于/bin/sh -c);
1.
第二种形式:

RUN ["executable","param1", "param2"]
1.
(等同于exec命令形式),注意此处必须是双引号("),因为这种格式被解析为JSON数组。

ARG

ARG <name>[=<default value>]
1.
ARG指令设置一些创建镜像时的参数,这些参数可以在执行docker build命令时通过–build-arg =设置,如果指定的创建参数在Dockerfile中没有指定,创建时会输出错误信息: One or more build-args were not consumed, failing build.

Dockerfile 作者可以为ARG设置一个默认参数值,当创建镜像时如果没有传入参数就会使用默认值:

FROM busybox
1.
我们可以使用ARG或者ENV指令来指定RUN指令使用的变量。我们可以使用ENV定义与ARG定义名称相同的变量来覆盖ARG定义的变量值。如下示例,我们执行

docker build --build-arg CONT_IMG_VER=v2.0.1 Dockerfile
1.
后将获取到的CONTIMGVER变量值为v1.0.0:

FROM ubuntu
1.
WORKDIR

WORKDIR /path/to/workdir
1.
WORKDIR指令用来设置Dockerfile中任何使用目录的命令的当前工作目录,此目录如果不存在就会被自动创建,即使这个目录不被使用

VOLUME

VOLUME ["/data"]      (exec格式指令)
1.
VOLUME指令创建一个可以从本地主机或其他容器挂载的挂载点。经常用到的是

docker run -ti -v /data:/data nginx:1.12 bash
1.
时指定本地路径和容器内路径的映射。

COPY

COPY指令能够将构建命令所在的主机本地的文件或目录,复制到镜像文件系统。

exec格式用法(推荐):

COPY ["<src>",... "<dest>"]
1.
特别适合路径中带有空格的情况。

shell格式用法:

COPY <src>... <dest>
1.
ADD

ADD指令不仅能够将构建命令所在的主机本地的文件或目录,而且能够将远程URL所对应的文件或目录,作为资源复制到镜像文件系统。

所以,可以认为ADD是增强版的COPY,支持将远程URL的资源加入到镜像的文件系统。

exec格式用法(推荐):

ADD ["<src>",... "<dest>"]
1.
特别适合路径中带有空格的情况。

shell格式用法:

ADD <src>... <dest>
1.
说明,对于从远程URL获取资源的情况,由于ADD指令不支持认证,如果从远程获取资源需要认证,则只能使用RUN wget或RUN curl替代。

另外,如果源路径的资源发生变化,则该ADD指令将使Docker Cache失效,Dockerfile中后续的所有指令都不能使用缓存。因此尽量将ADD指令放在Dockerfile的后面。

**参考:**Dockerfile中的COPY和ADD指令详解与比较

https://blog.csdn.net/taiyangdao/article/details/73222601

EXPOSE指令

EXPOSE <端口> [<端口>...]
1.
指令用于标明,这个镜像中的应用将会侦听某个端口,并且希望能将这个端口映射到主机的网络界面上。但是,为了安全,docker run命令如果没有带上响应的端口映射参数,docker并不会将端口映射到宿主机。

CMD 与 ENTRYPOINT

二者的区别看:[docker CMD ENTRYPOINT 区别 终极解读]

https://blog.csdn.net/u010900754/article/details/78526443

从根本上说, ENTRYPOINT和CMD都是让用户指定一个可执行程序, 这个可执行程序在container启动后自动启动. 实际上, 如果你想让自己制作的镜像自动运行程序(不需要在docker run后面添加命令行指定运行的命令), 你必须在Dockerfile里面,使用ENTRYPOINT或者CMD命令。在命令行启动docker镜像时, 执行其他命令行参数,覆盖默认的CMD。和CMD类似, 默认的ENTRYPOINT也在docker run时, 也可以被覆盖. 在运行时, 用–entrypoint覆盖默认的ENTRYPOINT。

dockerfile中的CMD命令被覆盖:

***CMD:***提供了容器默认的执行命令。Dockerfile 只允许使用一次 CMD 指令。使用多个 CMD 会抵消之前所有的指令,只有最后一个指令生效。CMD 有三种形式:

CMD ["executable","param1","param2"] (exec form, thisis the preferred form)
1.
***ENTRYPOINT:***配置给容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。同时也意味着该镜像每次被调用时仅能运行指定的应用。类似于CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的指令,只执行最后的ENTRYPOINT指令。语法如下:

ENTRYPOINT ["executable", "param1","param2"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值