目录:
1.failed to restart docker
2.failed to start docker.service:unit not found
3.failed to start docker application
4.failed to start docker.service
5.docker start -d
6.docker run docker start
7.docker onbuild
8.docker.service failed
9.failed to start docker.service unit not found
10.failed to stop docker.service
1.failed to restart docker
我们开始来一起学习 DockerFile 的知识点DcokerFile 是用来构建 docker 镜像的文件,是一个命令参数脚本一般 docker 镜像的构建步骤:1、编写一个 dockerfile 文件
2.failed to start docker.service:unit not found
2、docker build 构建成为一个镜像3、docker run 运行镜像4、docker push 发布镜像(咱们可以发布到 DockerHub,也可以发布到阿里云上面)我们来看看官方的镜像是咋玩的
3.failed to start docker application
例如我们在 DockerHub 上搜索 ubuntu ,看看官网的 DockerFile 是啥样子的https://hub.docker.com/_/ubuntu
4.failed to start docker.service
点击链接我们会进入到 git 仓库上,也是 DockerFile
5.docker start -d
咱们看到就 3 行 Docker 命令,是官方做成镜像的 DockerFile,所以这个官方的 ubuntu 镜像是非常简单的,阉割版本的,甚至连 clear 命令都没有,ll命令也没有很多的官方镜像包都是非常简单的,很多功能都是没有的,我们通常会自己搭建自己的镜像来满足我们的各种需求
6.docker run docker start
DockerFile 的构建过程官方能构建镜像,我们也可以自己的镜像DockerFile 的基础知识:每个 DockerFile 的保留字(指令),都必须是大写的DockerFile 脚本执行是按照顺序执行的
7.docker onbuild
#表示注释每一个指令都会创建提交一个新的镜像层,并提交可以在网络上找到这样的图片,可以看到镜像是一层一层的,可以在浏览器上搜索到 DockerFile 里面的指令解释
8.docker.service failed
dockerfile 是面向开发的,我们以后在做项目的时候,是直接发布一个镜像,交付的是一个镜像,就需要编写 DockerFile 文件,这个文件非常的简单!咱们必须要掌握 Docker 镜像,逐渐成为企业交付的标准了。
9.failed to start docker.service unit not found
咱们学习的过程是先会使用别人的东西,再去研究别人是怎么写的,进而我们也学会如何去写,去开发例如:我们先学习使用了,DockerImages:通过 DockerFile 构建生产的镜像,最终发布和运行的产品
10.failed to stop docker.service
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欢迎点赞,关注,收藏朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。我是小魔童哪吒,欢迎点赞关注收藏,下次见~
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容