CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

dockerfile指令详解(太疯狂了)dockerfile常用命令,【Docker 系列】docker 学习七,DockerFile 编写和实战,开源平台,

1.dockerfile指令

我们开始来一起学习 DockerFile 的知识点DcokerFile 是用来构建 docker 镜像的文件,是一个命令参数脚本一般 docker 镜像的构建步骤:1、编写一个 dockerfile 文件

2.docker执行dockerfile

2、docker build 构建成为一个镜像3、docker run 运行镜像4、docker push 发布镜像(咱们可以发布到 DockerHub,也可以发布到阿里云上面)我们来看看官方的镜像是咋玩的

3.dockerfile 菜鸟教程

例如我们在 DockerHub 上搜索 ubuntu ,看看官网的 DockerFile 是啥样子的https://hub.docker.com/_/ubuntu

4.dockerfile使用

点击链接我们会进入到 git 仓库上,也是 DockerFile

5.dockerfile示例

咱们看到就 3 行 Docker 命令,是官方做成镜像的 DockerFile,所以这个官方的 ubuntu 镜像是非常简单的,阉割版本的,甚至连 clear 命令都没有,ll命令也没有很多的官方镜像包都是非常简单的,很多功能都是没有的,我们通常会自己搭建自己的镜像来满足我们的各种需求

6.dockerfile command

DockerFile 的构建过程官方能构建镜像,我们也可以自己的镜像DockerFile 的基础知识:每个 DockerFile 的保留字(指令),都必须是大写的DockerFile 脚本执行是按照顺序执行的

7.dockerfile编写

#表示注释每一个指令都会创建提交一个新的镜像层,并提交可以在网络上找到这样的图片,可以看到镜像是一层一层的,可以在浏览器上搜索到 DockerFile 里面的指令解释

8.dockerfile基本指令

dockerfile 是面向开发的,我们以后在做项目的时候,是直接发布一个镜像,交付的是一个镜像,就需要编写 DockerFile 文件,这个文件非常的简单!咱们必须要掌握 Docker 镜像,逐渐成为企业交付的标准了。

9.docker指定dockerfile

咱们学习的过程是先会使用别人的东西,再去研究别人是怎么写的,进而我们也学会如何去写,去开发例如:我们先学习使用了,DockerImages:通过 DockerFile 构建生产的镜像,最终发布和运行的产品

10.执行dockerfile

Docker 容器:容器服务就是镜像运行起来的服务器现在我们开始详细学习 DockerFIle : 构建文件,定义了一切的步骤,这是源代码DockerFile 的指令图片来源于网络,我们一一解释一波

FROM基础的镜像,一切都是从这里开始的MAINTAINER指明镜像是谁写的,写下自己的姓名和邮箱RUN镜像构建的时候需要运行的命令ADD加入某些配置,例如加入 mysql 的压缩包,添加内容WORKDIR

镜像的工作目录VOLUME挂载目录EXPOSE暴露端口 和-p 是一个效果CMD指定这个容器启动的时候执行的命令,只会是最优一个指令进行生效,会被替代ENTRYPOINT指定这个容器启动的时候执行的命令,可以追加

ONBUILD当构建一个被继承的 DockerFIle ,这个时候就会运行 ONBUILD 的指令,触发相应的动作COPY与 ADD 类似,此命令是将文件拷贝到镜像中ENV构建的时候设置环境变量乍一看感觉

CMD 和 ENTRYPOINT功能好像差不多,但是还是不太清楚具体区别在哪里,文章末尾会有详细说明实战我们自己来做一个自定一个 ubuntu镜像官方的ubuntu是阉割版本的,很多工具和命令都是不支持的,那么我们就自己加进去,自给自足

自己写一个 DockerFile这里需要注意的是,基本上 99%的镜像,都是基于这个基础镜像 scratch,我们可以看到官方的 DockerFIle 也是基于这个镜像来玩的ubuntu git url

那么我们可以基于这个 ubuntu 来进行自定义,加入一些我们需要的工具,如vim,ifconfig等FROM ubuntu RUN apt-get update # 更新源 RUN apt-get install -y vim # 安装 vim RUN apt-get install -y net-tools # 安装 net-tools ENV MYPATH /usr/local # 设置环境变量 WORKDIR $MYPATH # 设置镜像工作目录 EXPOSE 8888 # 暴露端口 CMD echo “—– end —–” # 执行 echo 命令 CMD /bin/bash

开始构建docker build -f dockerfile2 -t xmtubuntu .如果不在 DockerFile 中写入 apt-get update更新源,会出现下面这个问题,这个要注意

执行上述命令,会看到如下打印信息,最终会看到Successfully,即为构建成功

通过上图我们可以看出, DokerFile 中写了 9 个步骤,执行的时候也是分了 9 步,知道全部成功才算成功最终构建成功后我们可以看到Successfully built a6f88c9f245b Successfully tagged xmtubuntu:latest

验证结果docker images 查看我们的镜像# docker images REPOSITORY TAG IMAGE ID CREATED SIZE xmtubuntu latest a6f88c9f245b 13 minutes ago 172MB

docker inspect a6f88c9f245b 查看我们镜像的构建过程# docker history a6f88c9f245b IMAGE CREATED CREATED BY SIZE COMMENT a6f88c9f245b 14 minutes ago /bin/sh -c #(nop) CMD [“/bin/sh” “-c” “/bin… 0B 3c0d23b8188f 14 minutes ago /bin/sh -c #(nop) CMD [“/bin/sh” “-c” “echo… 0B ffb019142fc7 14 minutes ago /bin/sh -c #(nop) EXPOSE 8888 0B 8867e6d97670 14 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B c9d0141ec3b0 14 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B 41e73f7e314d 14 minutes ago /bin/sh -c apt-get install -y net-tools 1.52MB 52013ca51f1d 14 minutes ago /bin/sh -c apt-get install -y vim 68.2MB 5ea7d553d403 14 minutes ago /bin/sh -c apt-get update 29.7MB 1318b700e415 11 days ago /bin/sh -c #(nop) CMD [“bash”] 0B 11 days ago /bin/sh -c #(nop) ADD file:524e8d93ad65f08a0… 72.8MB

xmtubuntu 这个镜像的构建过程我们可以清晰的看出都执行了哪些步骤,当然,同样的方式,我们也可以看看官方的镜像是如何构建的,我们来看看官方 ubuntu 的# docker history ubuntu IMAGE CREATED CREATED BY SIZE COMMENT 1318b700e415 11 days ago /bin/sh -c #(nop) CMD [“bash”] 0B 11 days ago /bin/sh -c #(nop) ADD file:524e8d93ad65f08a0… 72.8MB

官方的就很简单,阉割了很多东西,我们可以看出官方的 ubuntu 就 2 个步骤,第一个是加入ubuntu 压缩包,第二个就是 /bin/bash我们查看我们的自定义镜像 xmtubuntu

果然,我们的自定义ubuntu镜像,有了vim,ifconfig工具,实战成功CMD 和 ENTRYPOINT 的区别CMD指定这个容器启动的时候执行的命令,只会是最优一个指令进行生效,会被替代ENTRYPOINT

指定这个容器启动的时候执行的命令,可以追加如何理解呢?我们来做一个对比试验就可以很好的理解上述的解释说明,docker 里面有很多命令会有这样的微小区别,我们可以举一反三,慢慢深入学习CMD 的例子写一个简单的 DockerFile 文件名为 dockerfile-cmd

FROM xmtubuntu CMD [“ls”,”-a”] 构建镜像e# docker build -f dockerfile-cmd -t dockerfile-cmd . Sending build context to Docker daemon 1.346GB Step 1/2 : FROM xmtubuntu —> a6f88c9f245b Step 2/2 : CMD [“ls”,”-a”] —> Running in 101670af4290 Removing intermediate container 101670af4290 —> 1697fc03b8ce Successfully built 1697fc03b8ce Successfully tagged dockerfile-cmd:latest

创建并启动容器docker run 101670af4290,可以看到如下效果

我们尝试在启动容器时候追加命令docker run 101670af4290 -l,就会有如下报错# docker run 1697fc03b8ce -l docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: “-l”: executable file not found in $PATH: unknown.

原因如下:使用 CMD指令是(例如我们的例子是 ls -a),我们在启动容器的时候,后面追加的命令(-l)会把 ls -a替换掉,由于-l不是一个命令,因此报错ENTRYPOINT 的例子写一个简单的 DockerFile 文件名为 dockerfile-entrypoint

FROM xmtubuntu ENTRYPOINT [“ls”,”-a”] 构建镜像,创建并启动容器和 CMD 的例子一模一样,咱们直接启动容器的效果和 CMD的例子也是一模一样,我们直接来看启动容器并追加参数的例子

可以看出使用 ENTRYPOINT是可以在后面追加参数的,使用CMD若指令后面追加参数,那么会覆盖CMD指定的指令那么,对于以后遇到相关的指令,我们也可以举一反三,做对比试验,这样我们就会理解的更加清楚

如何发布我们的镜像1、登录 dockerhub没有注册的 xdm 可以注册一个,https://hub.docker.com/# docker login -u xxxx用户名 Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded

2、修改我们的镜像 tagdocker tag 我们的镜像id 我们的docker用户名/镜像名字:版本3、将镜像推到我们自己的仓库中

发布镜像的时候,也是按照一层一层的提交的最后补充一个网络上找到的图片,现在看这张图就能更清晰的明白其中的原理了

参考资料:docker docs欢迎点赞,关注,收藏朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。我是小魔童哪吒,欢迎点赞关注收藏,下次见~

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容