Docker,从入门到精通

news2024/12/23 18:03:34

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.coloradmin.cn/o/1265932.html

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

相关文章

面试题:MySQL自增主键为什么不是连续的?

文章目录 前言一、自增值存储说明二、自增值修改机制三、 自增值修改时机四、 导致自增值不连续的原因4.1 唯一键冲突4.2 事务回滚4.3 批量写库操作 前言 提出这个问题&#xff0c;是因为在工作中发现 mysql 中的 user 表的 id 默认是自增的&#xff0c;但是数据库存储的结果却…

每日一练:约瑟夫生者死者小游戏

1. 问题描述 约瑟夫问题&#xff08;Josephus problem&#xff09;是一个经典的数学和计算机科学问题&#xff0c;源于犹太历史学家弗拉维奥约瑟夫斯&#xff08;Flavius Josephus&#xff09;的著作《犹太战记》。问题的描述如下&#xff1a;   在这个问题中&#xff0c;有n…

【古月居《ros入门21讲》学习笔记】13_服务数据的定义与使用

目录 说明&#xff1a; 1. 服务模型 2. 实现过程&#xff08;C&#xff09; 自定义服务数据 Person.srv文件内容 Person.srv文件内容说明 编译配置 在package.xml文件中添加功能包依赖 在CMakeLists.txt中添加编译选项 编译生成语言相关文件 创建服务器代码&#xf…

线下渠道应该如何控价

品牌渠道中的问题&#xff0c;大多跟价格有关&#xff0c;比如低价、窜货、假货&#xff0c;治理好这些价格问题&#xff0c;也就是在解决渠道中的低价问题&#xff0c;所以要先了解价格&#xff0c;再进行治理&#xff0c;这样的流程化操作&#xff0c;可以使品牌管控好渠道价…

基于单片机的烟雾检测报警装置(论文+源码)

1.系统设计 &#xff08;1&#xff09;利用传感器实现环境中温度、烟雾浓度的实时检测&#xff1b; &#xff08;2&#xff09;系统检测的各项数据信息通过液晶模块进行显示&#xff0c;提高设计可视化&#xff1b; &#xff08;3&#xff09;系统可以根据实际情况利用按键模…

【AIGC】关于Prompt你必须知道的特性

代码和数据:https://github.com/tonyzhaozh/few-shot-learning 一、实践验证的大模型的特性 1. 大模型的偏差 示例&#xff1a;&#xff08;文本的情感分析&#xff1a;一句话->P(积极&#xff09;或者N&#xff08;消极) Input: I hate this movie. Sentiment: Negativ…

winform 程序多语言

新建一个winform程序添加资源文件 在多语言的资源文件中设置key以及value设置button根据环境选择语言文件 namespace WindowsFormsMulLang {public partial class Form1 : Form{public Form1(){InitializeComponent();}public static ResourceManager rm new ResourceManager(…

重工业ERP包含哪些模块?能为企业带来哪些优势

化工、五金、重型机械制造等重工业行业的经营管理模式存在明显的差别化&#xff0c;企业内部的盘点、发货、接单、报价、委外、排产、派工单、工艺、品检等各业务数据的实时和准确共享有利于企业清晰掌握运作情况&#xff0c;及时制定经营策略&#xff0c;提高对市场变化的反应…

js实现鼠标拖拽

目录 css代码 html代码 js代码 完整代码 效果图&#xff1a; 需求&#xff1a; 鼠标在图片内按下时 图片可以跟随盒子动 鼠标弹起图片停下来 如果图片在box的盒子里面时鼠标弹起了 就把图片展示在box里面 并且让图片回到起始位置 css代码 .div {width: 100px;height: 10…

LeetCode Hot100 739.每日温度

题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 方法&…

js数组中,相同id的item数据合并

原数据&#xff1a; const list [ {id:1, key: a}, {id:1, key: b}, {id:2, key: c}, {id:2, key: d}, ]期望数据格式 const newList [ {id:1, keyList: [a,b]}, {id:2, keyList: [c,d]}, ]// 相同id的数据合并let newList_(list ).flatten().groupBy(id).map(_.spread((..…

缺省参数的声明和定义

首先&#xff0c;函数缺省参数不能同时出现在声明和定义中&#xff0c;如出现则报错&#xff1a; 声明和定义中同时出现缺省参数 ctrlb&#xff0c;编译报错&#xff0c;提示 “test"&#xff1a;重定义默认参数&#xff1a;参数1 编译报错 当函数的声明和定义中都出现…

微信小程序仿网易严选(附精选源码32套,涵盖商城团购等)

商城主要实现的功能 首页、专题、分类、购物车、我的小程序授权登陆获取用户信息首页包含品牌制造页、品牌制造详情页面、新品首发页面、人气推荐页面、各分类列表商品详情页面&#xff0c;包含常见问题、大家都在看商品列表、加入购物车、收藏商品、立即购买、下订单、选择收…

Git删除临时分支

愿所有美好如期而遇 软件开发过程中&#xff0c;总有功能要添加进来&#xff0c;当我们有一个功能开发了一半的时候&#xff0c;产品经理说这个功能不需要了&#xff0c;尽管很无奈&#xff0c;但还是要删除&#xff0c;我开发到一半的分支如何删除呢&#xff1f; 所以需要使用…

unity学习笔记

一、Transform类 在Unity中&#xff0c;Transform 类是一种用于表示和操作游戏对象位置、旋转和缩放的类。每个游戏对象都有一个关联的 Transform 组件&#xff0c;该组件定义了对象在场景中的空间变换信息。 1.常见属性和方法 获取位置 相对与世界坐标系&#xff1a;Debug.…

利用sql语句来统计用户登录数据的实践

目录 1 基本数据情况2 统计每个用户每个月登录次数3 将日期按月显示在列上4 总结 1 基本数据情况 当需要对用户登录情况进行统计时&#xff0c;SQL是一个非常强大的工具。通过SQL&#xff0c;可以轻松地从数据库中提取和汇总数据&#xff0c;并以适合分析和报告的方式进行呈现…

详解Object.defineProperty()方法

Object.defineProperty是一个用于定义或修改对象属性的方法。它提供了一种更底层和灵活的方式来定义属性&#xff0c;可以设置属性的配置&#xff08;如可枚举性、可配置性、可写性等&#xff09;&#xff0c;并且可以定义属性的getter和setter函数。 语法&#xff1a; Objec…

C语言数据结构之顺序表(上)

前言&#xff1a; ⭐️此篇博文主要分享博主在学习C语言的数据结构之顺序表的知识点时写的笔记&#xff0c;若有错误&#xff0c;还请佬指出&#xff0c;一定感谢&#xff01;制作不易&#xff0c;若觉得内容不错可以点赞&#x1f44d;收藏❤️&#xff0c;这是对博主最大的认可…

电脑资料删除后如何恢复?3个简单方法轻松恢复文件!

“我平常喜欢在电脑上保存很多学习资料&#xff0c;但由于资料太多&#xff0c;在清理电脑时我可能会误删一些比较有用的资料。想问问大家电脑资料删除后还有机会恢复吗&#xff1f;应该怎么操作呢&#xff1f;” 在数字化时代&#xff0c;很多用户都会选择将重要的文件直接保存…

【算法刷题】Day8

文章目录 202. 快乐数解法&#xff1a; 11. 盛最多水的容器解法&#xff1a; 202. 快乐数 原题链接 拿到题&#xff0c;我们先看题干 把一个整数替换为每个位置上的数字平方和&#xff0c;有两种情况&#xff1a; 重复这个过程始终不到 1&#xff08;无限死循环&#xff09;结…