2019/08/03 docker镜像和Registry(02)docker镜像

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42227818/article/details/98386224

在这里插入图片描述安装失败,是因为,安装是依赖底层dockerfile中的 from中的base image他们的配置来安装的,里面没有epel仓库,所以应该指定epel的仓库文件在这里插入图片描述
epel-release应该是在base仓库中的在这里插入图片描述
安装好以后最起码简单的nginx镜像就构建好了在这里插入图片描述
启动这个容器试试在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
地址在network修改了,不是默认17了在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
最好把命令放在一行,也不能使用有任何交互式的命令在这里插入图片描述
把这个镜像定义成nginx最新版在这里插入图片描述
基于这种镜像,我们运行的容器就不是bash命令了
改变镜像文件默认要运行的命令程序,使用cmd在这里插入图片描述
类似于RUN指令,CMD指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同,cmd的目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器生命周期也将终止;不过,CMD指定的命令其可以被docker run的命令行选项所覆盖(有默认命令,但是可以替换掉)
在Dockerfile中可以存在多个CMD指令,但仅最后一个会生效

Syntax
CMD 使用shell来启动 (支持shell命令展开,但不能直接接受信号)
CMD [“”,“”,“”] 直接运行而不是做shell子进程来运行(不接受shell命令行展开,但是不接受信号)
上面两种可以被覆盖,不允许覆盖则使用第三种
CMD ["",""]
前两种语法格式的意义同RUN
第三种则用于为ENTRYPOINT指令提供默认参数
在这里插入图片描述
刚才的nginx镜像做好了,但还是默认启动shell命令。,怎么改成nginx命令
之前运行nginx程序,必须运行在前台才可以,-g 来传递一个配置文件中的指令,或者修改配置文件,+daemon off
所以要改这个镜像文件默认运行的指令
在这里插入图片描述在这里插入图片描述
需要暴露端口在这里插入图片描述
这次就是要本地的镜像构建镜像了
在这里插入图片描述
-P直接暴露所有定义的端口,-d 替换–rm就放在后台执行了在这里插入图片描述在这里插入图片描述在这里插入图片描述
可以加个卷定义网页文件不是访问镜像里的,而是放在磁盘卷中内容
定义镜像的,默认运行的命令的在这里插入图片描述
第三种格式只有参数没有命令,第三种指令是为entrypoint做为默认参数的在这里插入图片描述ENTRYPOINT
类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序;
与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序

run也可以被覆盖,默认运行的还是nginx,可以在后面+/bin/bash,启动起来进入交互式接口而不再是nginx,是可以被覆盖的在这里插入图片描述
不想覆盖使用entrypoint
ɝ Syntax
ɰ ENTRYPOINT
ɰ ENTRYPOINT ["", “”, “”]
在这里插入图片描述在这里插入图片描述
再去构建镜像,-t追加标签在这里插入图片描述在这里插入图片描述
现在就不能覆盖了,需要覆盖就要确定,使用–entrypoint在这里插入图片描述
既有entrypoint又有cmd,可以通过cmd向entrypoint传递参数,但是比较麻烦,不如直接给entrypoint传递参数
都是为了设定容器启动指令的,那就只能有一个生效

在做一个tomcat,让nginx和tomcat运行在联盟式的容器中,可以通过lo接口,本地回环接口互相通信

现在需要定义两个容器,前端是nginx。后端是tomcat,两个运行在两个不同的容器中,不使用联盟式容器,此时nginx得能够通过ip地址,访问tomcat容器的服务端点,(容器停止再启动,地址会变的),所以不能把地址作为服务的访问端点,利用主机名或其他服务发现机制,需要运行一个容器专门提供DNS服务,来解析各容器

nginx反代tomcat,tomcat主机,tc1,tc2,tc3,会自动检测,检测不到就不会调度

需要提供一个样例式的文件,做一个主机配置放到/nginx/conf.d下在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
yum安装后,最好做下yum clean all 不然就全部打包到镜像文件里去了
-t指明tag,构建一个镜像在这里插入图片描述在这里插入图片描述

主机解析不成功,查看原因,

在这里插入图片描述

可以允许容器的时候使用–add-host在这里插入图片描述
还需要绑定一下8080端口在这里插入图片描述
systemd告诉你如何运行在前台,可以看unitfile在这里插入图片描述
USER
用于指定运行image时的或运行Dockerfile中任何RUN、CMD或ENTRYPOINT指令指定的程序时的用户名或UID
默认情况下,container的运行身份为root用户

Syntax注意点
ɰ USER |
ɰ 需要注意的是,可以为任意数字,但实践中其必须为/etc/passwd中某用户的有效UID,否则,docker run命令将运行失败在这里插入图片描述
之前基于centos做了nginx,基于nginx做了nginx-tomcat,自己做的镜像也可以被用作是基础镜像,基于这个镜像构建时可以加一些内容进去,onbuild
onbuild后面加命令,自己做镜像时是不会执行的,但别人用你的镜像做基础镜像就会执行,可以做sudo来弄个后门

ONBUILD
用于在Dockerfile中定义一个触发器
Dockerfile用于build映像文件,此映像文件亦可作为base image被另一个Dockerfile用作FROM指令的参数,并以之构建新的映像文件

Syntax
ɰ ONBUILD (instruction已经拍出来onbuild,from,maintainer)
ɝ 尽管任何指令都可注册成为触发器指令,但ONBUILD不能自我嵌套(onbuild之后不能再onbuild),且不会触发FROM和MAINTAINER指令
ɝ 使用包含ONBUILD指令的Dockerfile构建的镜像应该使用特殊的标签,例如
ruby:2.0-onbuild

在ONBUILD指令中使用ADD(相当于添加一个源文件)或COPY(也相当于添加一个源文件)指令应该格外小心,因为新构建过程的上下文在缺少指定的源文件时会失败
在这里插入图片描述在这里插入图片描述
先构建一个镜像出来在这里插入图片描述
基于自己的镜像文件来运行,yum都不存在,所以onbuild自己作为一个镜像,基于这个镜像来运行容器时,是不会执行的
在这里插入图片描述

基于它来做基础镜像会执行在这里插入图片描述在这里插入图片描述
自己构建就触发了在这里插入图片描述
启动容器后会多一个目录在这里插入图片描述
现在做的镜像越来越大,将来要通过docker。io下载,速度就慢了,最好的方式是用本地仓库

猜你喜欢

转载自blog.csdn.net/qq_42227818/article/details/98386224