🍁博主简介:
🏅云计算领域优质创作者
🏅2022年CSDN新星计划python赛道第一名🏅2022年CSDN原力计划优质作者
🏅阿里云ACE认证高级工程师
🏅阿里云开发者社区专家博主
💊交流社区:CSDN云计算交流社区欢迎您的加入!

目录
| commit: 优点: 简单、所见所得 缺点 元数据信息无法注入 镜像层级的重用性弱 编译步骤不可重用 |
| DockerFile: 优点 元数据信息可注入 镜像层级的重用性强 编译步骤不可重用 缺点: 编译速度没有宿主机快 下载程序的依赖包比在宿主机中直接下载更加耗时 会产生none镜像,占用磁盘空间 |
| 容器 > 镜像(简单好用但是功能性不全,不能封装启动命令。只能当中应急方案)(Docker commit + Docker build = 镜像) |
docker pull centos:centos7 #从官网下载一个基础镜像
[root@localhost dockerrun]# mkdir dockerrun1 #创建一个目录并进入
[root@localhost dockerrun1]# vim Dockerfile #创建一个Dockerfile文件
| Dockerfile文件内容如下: |
FROM centos:centos7
RUN touch /root/startup.sh
CMD tail -f /root/startup.sh
[root@localhost dockerrun1]# docker build -t axplinux/centos:7.9 . #将Dockerfile文件转化成镜像axplinux/centos:7.9
[root@localhost dockerrun1]# docker run --name nginx -p 8000:80 -d axplinux/centos:7.9 #将axplinux/centos:7.9当第二个基础镜像,用nginx容器运行该镜像。
[root@localhost dockerrun1]# docker extc -it nginx /bin/bash #进入容器内部
| 在容器内下载一些必须命令,并且安装一个nginx软件且修改网页文件内容并启动。 浏览器访问192.168.232.165:8000能看到网页文件内容证明成功安装并运行nginx |
exit #退出容器
[root@localhost dockerrun1]# docker commit nginx axplinux/nginx:v0.1 #将nginx容器封装成最终镜像axplinux/nginx:v0.1
[root@localhost dockerrun1]# cc #容器已无用,可以删除,cc是删除容器的脚本,脚本内容在我前几期文章中有写
[root@localhost dockerrun1]# docker images #查看v0.1版的nginx镜像已制作完成。将此镜像作为另一个基础镜像继续升级。
[root@localhost ~]# mkdir dockerrun2 #创建另一个文件
[root@localhost ~]# cd dockerrun2 #进入
[root@localhost dockerrun2]# vim Dockerfile #再创建一个Dockerfile文件
| Dockerfile文件内容如下: |
FROM axplinux/nginx:v0.1
MAINTAINER anxiaopeng_linux
LABEL nginx_version="1.21.3"
RUN rm -rf /root/startup.sh
EXPOSE 80 443
WORKDIR /usr/local/nginx
CMD /usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log
[root@localhost dockerrun2]# docker build -t axplinux/nginx:v2.0 . #再将Dockerfile文件转化成镜像axplinux/nginx:v2.0
[root@localhost dockerrun2]# docker image inspect axplinux/nginx:v2.0 #可以查看标签信息和作者信息
[root@localhost dockerrun2]# docker run --name nginx -p 666:80 -d axplinux/nginx:v2.0 #启动镜像
| 浏览器访问ip:666能看到网页文件 |
[root@localhost dockerrun2]# docker logs nginx #可以查看nginx的访问日志。结束!
[root@localhost dockerrun2]# cd ..
[root@localhost ~]# mkdir dockerenv
[root@localhost ~]# cd dockerenv/
[root@localhost dockerenv]# vim Dockerfile #创建Dockerfile文件
| Dockerfile文件内容如下: |
FROM axplinux/nginx:v2.0
ENV INDEX_DATA default
ADD ./startup.sh /root
RUN chmod +x /root/startup.sh
ENTRYPOINT /bin/bash /root/startup.sh
[root@localhost dockerenv]# vim startup.sh #创建启动脚本
| 创建启动脚本,脚本内容为: |
#!/bin/bash
echo $INDEX_DATA > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log
[root@localhost dockerenv]# docker build -t axplinux/nginx:v3.0 .
[root@localhost dockerenv]# docker run --name nginx -p 8000:80 -d axplinux/nginx:v3.0 #先正常启动镜像
| 浏览器访问Ip:8000,输出默认结果default |
[root@localhost dockerenv]# cc
[root@localhost dockerenv]# docker run --name nginx -p 8000:80 --env INDEX_DATA=2222222 -d axplinux/nginx:v3.0 #动态启动镜像
| 浏览器访问ip:8000,输出默认结果2222222 |
为大家推荐一款刷题神奇 点击链接访问牛客网
各大互联网大厂面试真题。基础题库到进阶题库等各类面试题应有尽有!
牛客网面经合集,满足大厂面试技术深度,快速构建Java核心知识体系大厂面试官亲授,备战面试与技能提升,主要考点+主流场景+内功提升+真题解析

我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
方法应返回-1,0或1分别表示“小于”、“等于”和“大于”。对于某些类型的可排序对象,通常将排序顺序基于多个属性。以下是可行的,但我认为它看起来很笨拙:classLeagueStatsattr_accessor:points,:goal_diffdefinitializepts,gd@points=pts@goal_diff=gdenddefothercompare_pts=pointsother.pointsreturncompare_ptsunlesscompare_pts==0goal_diffother.goal_diffendend尝试一下:[LeagueStats.new(
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende
我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,
我正在运行这样的代码:ifvalid_from>Date.today当我运行它时,我得到一个错误提示comparisonofDatewithnilfailed我假设它正在发生,因为在某些情况下valid_from是nil。有没有办法避免出现此错误? 最佳答案 你可以这样做:ifvalid_fromandvalid_from>Date.today...end这将在第一个子句上短路,因为valid_from为nil,因此为false。 关于ruby-Date与nil的比较失败-ruby,我们
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG
目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一
以下测试中的第3个失败:specify{(0.6*2).shouldeql(1.2)}specify{(0.3*3).shouldeql(0.3*3)}specify{(0.3*3).shouldeql(0.9)}#thisonefails这是为什么呢?这是浮点问题还是ruby或rspec问题? 最佳答案 从rspec-2.1开始specify{(0.6*2).shouldbe_within(0.01).of(1.2)}在那之前:specify{(0.6*2).shouldbe_close(1.2,0.01)}
有没有简单的方法(即使用宇宙飞船运算符)在Ruby中定义基于两个不同属性的比较?IE。如果我有一个包含两个属性attr1和attr2的类,是否有Rubyesque方法在attr1上比较此类的两个实例,如果它们相等,则在attr2上比较它们? 最佳答案 这是一种易于扩展(扩展到更多属性)的方式:def(other)[self.attr1,self.attr2][other.attr1,other.attr2]end 关于Ruby-使用Comparablemixin比较两个不同属性的对象,我