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.rhkb.cn/news/204274.html

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

相关文章

人工智能-优化算法之凸集

凸性 凸性&#xff08;convexity&#xff09;在优化算法的设计中起到至关重要的作用&#xff0c; 这主要是由于在这种情况下对算法进行分析和测试要容易。 换言之&#xff0c;如果算法在凸性条件设定下的效果很差&#xff0c; 那通常我们很难在其他条件下看到好的结果。 此外&…

【Vue】绝了!还有不懂生命周期的?

生命周期 Vue.js 组件生命周期&#xff1a; 生命周期函数&#xff08;钩子&#xff09;就是给我们提供了一些特定的时刻&#xff0c;让我们可以在这个周期段内加入自己的代码&#xff0c;做一些需要的事情; 生命周期钩子中的this指向是VM 或 组件实例对象 在JS 中&#xff0c;…

微服务实战系列之Cache

前言 欢迎来到Cache&#xff08;缓存&#xff09;的世界&#xff01; 自从世界第一台计算机诞生之日起&#xff0c;人们对效率的渴望逐步增强。从CPU到存储&#xff0c;从芯片到内存&#xff0c;一批又一批的先驱以一种孜孜不倦的“工匠”精神&#xff0c;为计算机运行效率的提…

华为P40无法链接adb的解决记录

真的很讨厌华为的设备&#xff0c;很多东西啥设备都能跑得好好的&#xff0c;就华为会出问题&#xff0c;简直就是手机界的IE。 情况&#xff1a;突然无法链接adb到P40&#xff0c;拔插无效&#xff0c;关闭开发人员选项再打开也无效&#xff0c;撤销USB调试授权也无效&#x…

西南科技大学电路分析基础实验A1(一阶电路的设计)

目录 一、实验目的 二、实验设备 三、预习内容(如:基本原理、电路图、计算值等) 四、实验数据及结果分析(预习写必要实验步骤和表格) 1. 观测一阶电

leetcode:有效的括号

题目描述 题目链接&#xff1a;20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目给了我们三种括号&#xff1a;&#xff08;&#xff09;、{ }、[ ] 这里的匹配包括&#xff1a;顺序匹配和数量匹配 最优的思路就是用栈来解决&#xff1a; 括号依次入栈…

用于计算机屏幕安全摄像头系统:Screen Anytime Crack

Screen Anytime 是一款软件&#xff0c;旨在自动将整个用户会话或 PC/服务器/VM/Kiosk 的 /RDP/Citrix/RemoteApp 会话的屏幕活动记录到视频日志文件中&#xff0c;以用于记录、审核和监控目的。通过重播其高度压缩的视频&#xff0c;您可以轻松回顾单台计算机或一组服务器/PC …

Joint Bilateral Upsampling

Abstract 图像分析和增强任务&#xff08;例如色调映射、着色、立体深度和蒙太奇&#xff09;通常需要在像素网格上计算解决方案&#xff08;例如&#xff0c;曝光、色度、视差、标签&#xff09;。计算和内存成本通常要求在下采样图像上运行较小的解决方案。尽管通用上采样方…

只需十分钟快速入门Python,快速了解基础内容学习。零基础小白入门适用。

文章目录 简介特点搭建开发环境版本hello world注释文件类型变量常量数据类型运算符和表达式控制语句数组相关函数相关字符串相关文件处理对象和类连接mysql关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源…

matlab绘图函数plot和fplot的区别

一、背景 有的函数用plot画就会报错&#xff0c;显示数据必须为可转换为双精度值的数值、日期时间、持续时间、分类或数组。 如下图所示&#xff1a; 但用fplot函数就没有问题&#xff0c;因此这里记录一下两者的区别&#xff0c;如果使用不当&#xff0c;画出的图可能就是下…

以太网通讯协议小结--持续更新中

一、以太网介绍 以太网是一种产生较早&#xff0c;使用相当广泛的局域网技术&#xff0c;局域网就是一个区域的网络互联&#xff0c;可以使办公室也可以是学校等等&#xff0c;大小规模不一。 目前以太网根据速度等级分类大概分为&#xff1a;标准以太网&#xff08;10Mbit/s…

Redis-Redis高可用集群之水平扩展

Redis3.0以后的版本虽然有了集群功能&#xff0c;提供了比之前版本的哨兵模式更高的性能与可用性&#xff0c;但是集群的水平扩展却比较麻烦&#xff0c;今天就来带大家看看redis高可用集群如何做水平扩展&#xff0c;原始集群(见下图)由6个节点组成&#xff0c;6个节点分布在三…

JOSEF 双可调漏电继电器 ZLR-T81 ZCT-80 面板嵌入式安装

ZLR-T系列漏电继电器&#xff08;以下简称继电器&#xff09;适用于交流电压为380.660V.至1140V系统中源率为50HZ电流为15~4000A线路中做有无中性点漏电保护. 系列型号 ZLR-T81漏电继电器 ZLR-T81ZCT-35漏电继电器 ZLR-T81ZCT-80漏电继电器 ZLR-T81ZCT-120漏电继电器 一、…

csv文件EXCEL默认打开乱码问题

这里讨论的问题是&#xff0c;当用记事本打开带有中文字符的csv正常时&#xff0c;用excel打开却是乱码。 简单概括就是&#xff1a;编码问题&#xff0c;windows的 excel打开csv文本文件时&#xff0c;默认使用的是系统内的ANSI&#xff0c;在中文环境下就是GB2312。如果写文件…

华为ospf和isis双点双向路由重分布的次优路径和环路终极解决方案

r5上直接导入直连路由 r3和r2进行双点双向路由重分布 查看R3去往R5产生了次优路径&#xff1a; 因为是R2先互相引入的isis和ospf&#xff0c;所以R3会产生次优路径&#xff0c;如果是R3先相互引入ospf和isis&#xff0c;那就是R2去R5会产生次优路径&#xff0c;而R3本身不会。…

Spark_Spark高阶特性

wscg filter导致断链 Codegen 向量化 simdjson Orc Parquet 支持批量读取 spark本身对parquet支持比较好&#xff0c;因为parquet

基于FPGA的五子棋游戏设计

基于FPGA的五子棋游戏设计 本文基于FPGA设计五子棋游戏&#xff0c;使用按键输入&#xff0c;使用VGA接口输出。五子棋的棋具与围棋相同&#xff0c;棋子分为黑白两色&#xff0c;棋盘为1010&#xff0c;棋子放置于棋盘线交叉点上。两人对局&#xff0c;各执一色&#xff0c;轮…

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序数据范围&#xff1a; 1 ≤ &#xfffd; ≤ 10001≤n≤1000 &#xff0c;元素大小满足 0 ≤ &#xfffd; &#…

有一种浪漫,叫接触Linux

大家好&#xff0c;我是五月。 嵌入式开发 嵌入式开发产品必须依赖硬件和软件。 硬件一般使用51单片机&#xff0c;STM32、ARM&#xff0c;做成的产品以平板&#xff0c;手机&#xff0c;智能机器人&#xff0c;智能小车居多。 软件用的当然是以linux系统为蓝本&#xff0c…

五分钟 k8s 实战-应用探针

Probe.png 今天进入 kubernetes 的运维部分&#xff08;并不是运维 kubernetes&#xff0c;而是运维应用&#xff09;&#xff0c;其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作&#xff0c;现在云原生将运维和研发关系变得更紧密了。 今天主要讲解 Probe 探针相…