Docker,从入门到精通

1、DockerFile 介绍

dockerfile 是啥?dockerfile 用来构建 docker 镜像的文件。

具体步骤:
 

1、编写一个 dockerfile 文件

2、docker build 构造一个镜像

3、docker run 运行镜像

4、docker push 发布镜像

DockerFile 构建过程

1、每个保留关键字都必须是大写字母

2、从上往下顺序执行

3、# 表示注释

4、每一个指令都会新建一个新的镜像层,并提交

DockerFile 指令

FROM       #基础镜像MAINTAINER    #镜像是谁写的RUN        #镜像构建时需要运行的命令ADD        #添加基础镜像之外的其他内容WORKDIR      #镜像工作目录VOLUME      #设置容器卷挂载目录EXPOSE      #暴露端口 -p一样CMD        #指定容器启动时运行的命令,只有最后一个会生效,可被替代ENTRYPOINT    #指定容器启动时运行的命令,可以追加命令ONBUILD      #当构建一个呗继承dockerfile时触发 ONBUILDCOPY      #类似ADD,将文件拷贝到镜像中ENV        #构建时设置环境变量

图片

实战测试

docker 镜像有 99% 都是从 scratch 这个基础镜像构建的。

图片

[root@localhost dockerfile]# vi dockerfile-centos FROM centosMAINTAINER luojie<123@qq.com>
ENV MYPATH /usr/localWORKDIR $MYPATH
RUN yum -y install vimRUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATHCMD echo "-----end-------"CMD /bin/bash[root@localhost dockerfile]# docker build -f dockerfile-centos -t lj_df_centos .[root@localhost dockerfile]# docker imagesREPOSITORY      TAG        IMAGE ID            CREATED             SIZElj_df_centos    latest     179579582bbb        14 minutes ago      291MB
#新生成的centos镜像工作目录在/usr/local 多了vim和ifconfig命令

docker history 镜像 id 查看镜像构建历史

图片

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

CMD 和 ENTRYPOINT 区别​​​​​​​

CMD        #指定容器启动时运行的命令,只有最后一个会生效,可被替代ENTRYPOINT    #指定容器启动时运行的命令,可以追加命令​​​​​​​
[root@localhost dockerfile]# vi dockerfile-cmdFROM centosCMD ["ls","-a"][root@localhost dockerfile]# docker build -f dockerfile-cmd -t cmd-test .Sending build context to Docker daemon  3.072kBStep 1/2 : FROM centos ---> 300e315adb2fStep 2/2 : CMD ["ls","-a"]...[root@localhost dockerfile]# docker run ea34d5842115....dockerenvbindevetchome[root@localhost dockerfile]# docker run ea34d5842115 -ldocker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.ERRO[0000] error waiting for container: context canceled #输入-l命令提示无法识别,原因是-l不是一个独立命令,会替换["ls","-a"],所以报错。[root@localhost dockerfile]# docker run ea34d5842115 pwd/#输入pwd可以正常运行。CMD是覆盖命令。​​​​​​​
[root@localhost dockerfile]# vi dockerfile-entrypointFROM centosENTRYPOINT ["ls","-a"][root@localhost dockerfile]# docker build -f dockerfile-entrypoint -t entrypoint-test .Sending build context to Docker daemon  4.096kBStep 1/2 : FROM centos ---> 300e315adb2fStep 2/2 : ENTRYPOINT ["ls","-a"][root@localhost dockerfile]# docker run 4404aae5e7a5....dockerenvbindevetc[root@localhost dockerfile]# docker run 4404aae5e7a5 -ltotal 0drwxr-xr-x.   1 root root   6 Jan 18 16:16 .drwxr-xr-x.   1 root root   6 Jan 18 16:16 ..-rwxr-xr-x.   1 root root   0 Jan 18 16:16 .dockerenvlrwxrwxrwx.   1 root root   7 Nov  3 15:22 bin -> usr/bin#输入-l可以识别,相当于ls -al,ENTRYPOINT是追加命令。

实战:DockerFile 制作 centos+jdk+tomcat 镜像​​​​​​​

FROM centosMAINTAINER luojie
COPY readme.txt /usr/local/readme.txt
ADD apache-tomcat-9.0.43.tar.gz /usr/localADD jdk-8u131-linux-x64.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/localWORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_131ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.43/logs/catalina.out

启动 centos+jdk+tomcat​​​​​​​

#生成镜像 docker build -t lj_tomcat .
#运行容器 docker run -d -p 8080:8080 -v /test/abc:/usr/local/apache-tomcat-9.0.43/webapps/abc 9463c7c88bea


在 abc 目录下新增 a.html,浏览器访问:http://ip:8080/abc/a.html即可看到效果。
 

小结

 

DockerFile 指令​​​​​​​

FROM       #基础镜像MAINTAINER    #镜像是谁写的RUN        #镜像构建时需要运行的命令ADD        #添加基础镜像之外的其他内容WORKDIR      #镜像工作目录VOLUME      #设置容器卷挂载目录EXPOSE      #暴露端口 -p一样CMD        #指定容器启动时运行的命令,只有最后一个会生效,可被替代ENTRYPOINT    #指定容器启动时运行的命令,可以追加命令ONBUILD      #当构建一个呗继承dockerfile时触发 ONBUILDCOPY      #类似ADD,将文件拷贝到镜像中ENV        #构建时设置环境变量

图片

实战测试

docker 镜像有 99% 都是从 scratch 这个基础镜像构建的。

图片

[root@localhost dockerfile]# vi dockerfile-centos FROM centosMAINTAINER luojie<123@qq.com>
ENV MYPATH /usr/localWORKDIR $MYPATH
RUN yum -y install vimRUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATHCMD echo "-----end-------"CMD /bin/bash[root@localhost dockerfile]# docker build -f dockerfile-centos -t lj_df_centos .[root@localhost dockerfile]# docker imagesREPOSITORY      TAG        IMAGE ID            CREATED             SIZElj_df_centos    latest     179579582bbb        14 minutes ago      291MB
#新生成的centos镜像工作目录在/usr/local 多了vim和ifconfig命令

docker history 镜像 id 查看镜像构建历史

图片

CMD 和 ENTRYPOINT 区别

CMD        #指定容器启动时运行的命令,只有最后一个会生效,可被替代ENTRYPOINT    #指定容器启动时运行的命令,可以追加命令​​​​​​​
[root@localhost dockerfile]# vi dockerfile-cmdFROM centosCMD ["ls","-a"][root@localhost dockerfile]# docker build -f dockerfile-cmd -t cmd-test .Sending build context to Docker daemon  3.072kBStep 1/2 : FROM centos ---> 300e315adb2fStep 2/2 : CMD ["ls","-a"]...[root@localhost dockerfile]# docker run ea34d5842115....dockerenvbindevetchome[root@localhost dockerfile]# docker run ea34d5842115 -ldocker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.ERRO[0000] error waiting for container: context canceled #输入-l命令提示无法识别,原因是-l不是一个独立命令,会替换["ls","-a"],所以报错。[root@localhost dockerfile]# docker run ea34d5842115 pwd/#输入pwd可以正常运行。CMD是覆盖命令。​​​​​​​
[root@localhost dockerfile]# vi dockerfile-entrypointFROM centosENTRYPOINT ["ls","-a"][root@localhost dockerfile]# docker build -f dockerfile-entrypoint -t entrypoint-test .Sending build context to Docker daemon  4.096kBStep 1/2 : FROM centos ---> 300e315adb2fStep 2/2 : ENTRYPOINT ["ls","-a"][root@localhost dockerfile]# docker run 4404aae5e7a5....dockerenvbindevetc[root@localhost dockerfile]# docker run 4404aae5e7a5 -ltotal 0drwxr-xr-x.   1 root root   6 Jan 18 16:16 .drwxr-xr-x.   1 root root   6 Jan 18 16:16 ..-rwxr-xr-x.   1 root root   0 Jan 18 16:16 .dockerenvlrwxrwxrwx.   1 root root   7 Nov  3 15:22 bin -> usr/bin#输入-l可以识别,相当于ls -al,ENTRYPOINT是追加命令。

实战:DockerFile 制作 centos+jdk+tomcat 镜像​​​​​​​

FROM centosMAINTAINER luojie
COPY readme.txt /usr/local/readme.txt
ADD apache-tomcat-9.0.43.tar.gz /usr/localADD jdk-8u131-linux-x64.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/localWORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_131ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.43/logs/catalina.out

启动 centos+jdk+tomcat

#生成镜像 docker build -t lj_tomcat .
#运行容器 docker run -d -p 8080:8080 -v /test/abc:/usr/local/apache-tomcat-9.0.43/webapps/abc 9463c7c88bea


在 abc 目录下新增 a.html,浏览器访问:http://ip:8080/abc/a.html即可看到效果。
 

小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/181983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WSDM 2024 | LLMs辅助基于内容的推荐系统增强BPR训练数据

本文提出了一种简单而有效的基于LLMs的图数据增强策略&#xff0c;称为LLMRec&#xff0c;以增强基于内容的推荐系统。LLMRec包含三种数据增强策略和两种去噪策略。数据增强策略包括从文本自然语言的角度挖掘潜在的协同信号, 构建用户画像(LLM-based), 并强化item side informa…

Adobe Illustrator绘图解决卡顿问题

最近在用AI做矢量图&#xff0c;但是遇到了一个很难搞的问题&#xff0c;当我们需要分辨率较高的图片的时候&#xff0c;Python用Matplotlib生成的pdf时dpi参数会设置为600及以上&#xff0c;但是样子的话就造成了pdf文件过大以及AI卡顿&#xff0c;比如&#xff0c;下午生成的…

解码 SQL:深入探索 Antlr4 语法解析器背后的奥秘

探寻SQL的背后机制 前言 在数据领域&#xff0c;SQL&#xff08;Structured Query Language&#xff09;是一门广泛使用的语言&#xff0c;用于查询和处理数据。你可能已经使用过诸如MySQL、Hive、ClickHouse、Doris、Spark和Flink等工具来编写SQL查询。 每一种框架都提供了…

F22服装管理软件系统 前台任意文件上传漏洞复现

0x01 产品简介 F22服装管理软件系统是广州锦铭泰软件科技有限公司一款专为服装行业开发的综合性管理软件。该产品旨在帮助服装企业实现全面、高效的管理&#xff0c;提升生产效率和经营效益。 0x02 漏洞概述 F22服装管理软件系统UploadHandler.ashx接口处存在任意文件上传漏洞…

实时天气(预报)API接口

实时天气预报API接口 一、实时天气(预报)API接口二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、实时天气(预报)API接口 一款帮助你获取实时天气和天气预报的API接口 二、使用步…

对于 ` HttpServletResponse ` , ` HttpServletRequest `我们真的学透彻了吗

对于 **HttpServletResponse , HttpServletRequest**我们真的学透彻了吗 问题引入 PostMapping("/importTemplate") public void importTemplate(HttpServletResponse response) {ExcelUtil<SysUser> util new ExcelUtil<SysUser>(SysUser.class);uti…

RHCSA---基本命令使用

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 Linux中终端中的很多操作都是通过命令行实现的&#xff0c;最常用的输入命令的方法有以下两种。 (1).打开自带的终端&#xff0c;类似于Windows中的CMD (2).ssh远程连接&#xff0c;关于…

基于Java SSM框架实现高校二手交易平台系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现高校二手交易平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个高校二手交易平台&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将…

如何使用群晖Synology Office结合内网穿透实现多人远程编辑文件协同办公

使用群晖Synology Office提升生产力&#xff1a;多人同时编辑一个文件 文章目录 使用群晖Synology Office提升生产力&#xff1a;多人同时编辑一个文件本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制…

创纪云助力客服系统:通过API和无代码开发实现与电商平台的智能集成

无缝连接电商和客服系统&#xff1a;管家婆的无代码开发解决方案 在电子商务和客户服务日新月异的发展中&#xff0c;企业面临着如何提高效率和客户满意度的挑战。江苏创纪云网络科技有限公司&#xff08;INNOVATION ERA&#xff09;推出了一款无需API开发的解决方案&#xff…

Springboot的excel导出

这里导出excel用到的是 阿里巴巴的easyexcel 1、首先导入依赖 <!--alibaba easyexcel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.6</version> </dependency> 2、…

一切为了应用!九章云极DataCanvas大模型系列成果重磅发布!

11月21日&#xff0c;「筑基赋能 智向未来」九章云极DataCanvas大模型系列成果发布会&#xff08;以下简称“发布会”&#xff09;在北京重磅召开&#xff0c;本次成果发布距离今年6月30日DataCanvas Alaya九章元识大模型公布仅4个多月&#xff0c;是九章云极DataCanvas公司大模…

如何快速上手一个自己不太熟悉的新项目?

一.熟悉新项目的步骤 第一步:了解业务 技术本身就是为了业务而服务&#xff0c;只有首先搞清楚了业务之后才真正算是步入了这个项目的大门。因此&#xff0c;要先搞清新项目&#xff1a; 是做什么的&#xff1f; 主要面向什么人群使用&#xff1f;主要提供了哪些功能&#x…

如何使用电脑添加便签,便签怎么显示桌面?

电脑便签在日常办公及生活中的应用是比较广泛的&#xff0c;通过电脑便签大家可以将一些工作计划安排的妥妥当当&#xff0c;可以将生活中比较重要的节日、重要的备忘事项统统记录下来&#xff0c;便于及时提醒或者做统筹安排。 电脑上可以使用的便签类工具也比较多&#xff0…

3DMAX二维图片对象摆放插件安装使用方法

3DMAX二维图片对象摆放插件使用教程 3DMAX二维图片对象摆放插件自动对齐相机&#xff0c;可以有效地自动将简单的2D PNG图像添加到3dMax场景中。使用3DMAX二维图片对象摆放插件&#xff0c;你可以使用一次渲染来渲染具有正确阴影的快速预览和最终图像&#xff0c;而无需稍后合成…

leetcode:414. 第三大的数

一、题目 函数原型&#xff1a;int thirdMax(int* nums, int numsSize) 二、思路 将数组降序排序。 如果数组元素个数小于3&#xff0c;直接返回第一个元素&#xff1b; 如果数组元素个数大于等于3&#xff0c;且不同元素个数小于3&#xff0c;直接返回第一个元素&#xff1b; …

李峋同款的C语言动态爱心代码来了,彩色闪动,附源码

1.前言 最近一部电视剧《点燃我&#xff0c;温暖你》可火啦&#xff0c;大家纷纷在搞男主阿瑟的同款爱心代码&#xff0c;但是虽然网上有它的源码&#xff0c;但都不是 C 语言的&#xff0c;看不懂。我看了一下这个视频&#xff0c;大致分析了一下它的运行过程。用语言描述一下…

高校学生宿舍公寓报修维修生活管理系统 微信小程序b2529

本课题要求实现一套基于微信小程序宿舍生活管理系统&#xff0c;系统主要包括&#xff08;管理员&#xff0c;学生、维修员和卫检员&#xff09;四个模块等功能。 使用基于微信小程序宿舍生活管理系统相对传统宿舍生活管理系统信息管理方式具备很多优点&#xff1a;首先可以大幅…

系列八、编程式事务

一、概述 编程式事务是指程序员手动的在业务代码中控制事务执行的流程&#xff0c;业务方法正常执行提交事务&#xff0c;业务方法执行过程中出现异常则回滚事务。 二、编程式事务环境搭建 2.1、项目概览 2.2、pom.xml <dependencies><!--spring基本依赖--><d…

被DDoS攻击了怎么办?为什么要选择高防ip?

在当今互联网高度发达的时代&#xff0c;许多企业都依赖于网络来开展业务、推广产品、提供服务。然而&#xff0c;网络攻击&#xff0c;尤其是分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;已经成为一种日益严重的威胁。面对这种攻击&#xff0c;如何保护您的业…