Dockerfile与Docker网络

一、Dockerfile

1、概念:

Dockerfile是用来构建docker镜像的文本文件,是由构建镜像所需要的指令和参数构建的脚本。

2、构建步骤:

① 编写Dockerfile文件

② docker build命令构建镜像

③ docker run依据镜像运行容器实例

Dockerfile 是构建 docker 镜像的指令集,docker 镜像是容器运行的静态模板,而 docker 容器是基于 docker 镜像创建的可运行实例。

3、Dockerfile基础知识:

① 每条保留字指令都必须为大写字母,且后面要跟随至少一个参数

② 指令按照从上到下顺序执行

③ #表示注释

④ 每条指令都会创建一个新的镜像层并对镜像进行提交

二、Dockerfile常用保留字指令

1、概念:

在 Dockerfile 中,保留字 (Reserved Keywords) 是指一些特定的指令或关键字,用于描述镜像的构建过程。

2、常用保留字:

(1) FROM:当前新镜像是基于哪个镜像的,指定一个已存在的镜像作为模版。Dockerfile 第一条必须是FROM。

(2) MAINTAINER:镜像维护者和邮箱。

(3) RUN:容器构建时需要运行的命令,RUN 在 docker build 时运行。

两种格式:

① shell 格式:

#等同于在终端操作的shell命令 格式:
RUN <命令行命令> RUN yum -y install vim

② exec 格式:

#格式:RUN ["可执行文件" , "参数1", "参数2"] 
RUN ["./test.php", "dev", "offline"] #等同于 RUN ./test.php dev offline

(4) EXPOSE:当前容器对外端口。

(5) WORKDIR:创建容器后,终端默认登录进来的工作目录。

(6) USER:指定该镜像以哪个用户执行,如果没有指定则默认是root。

(7) ENV:在构建镜像过程中设置环境变量。这个环境变量可以在后续的RUN指令中使用。

(8) VOLUME:容器数据卷,用于数据存储和持久化工作。

(9) COPY:拷贝文件和目录到镜像中。

COPY src dest 
COPY ["src", "dest"] 
# <src源路径>:源文件或者源目录 ;<dest目标路径>:容器内的指定路径

(10) ADD:将宿主机目录下的文件拷贝进镜像,且自动处理URL和解压tar包。

COPY + 解压

(11) CMD:指定容器启动后要做的事。

① CMD 指令格式也是 shell 和 exec 两种;

② Dockerfile中如果出现多个CMD指令,只有最后一个生效。CMD会被docker run之后的参数替换。

# 因为tomcat的Dockerfile中指定了 CMD ["catalina.sh", "run"] 
# 所以直接docker run 时,容器启动后会自动执行 catalina.sh run 
docker run -it -p 8080:8080 tomcat # 指定容器启动后执行 /bin/bash 
# 此时指定的/bin/bash会覆盖掉Dockerfile中指定的 CMD ["catalina.sh", "run"] 
docker run -it -p 8080:8080 tomcat /bin/bash

(12) ENTRYPOINT:用来指定容器启动后要做的事,但不会被docker run后面的命令覆盖。

① ENTRYPOINT 可以和 CMD 一起用,当指定了 ENTRYPOINT 后,CMD 的含义就发生了变化,不再是直接运行命令,而是将 CMD 的内容作为参数传递给 ENTRYPOINT 指令,组合成 <ENTRYPOINT> "<CMD>"。

② 示例:

FROM nginx ENTRYPOINT ["nginx", "-c"] # 定参 
CMD ["/etc/nginx/nginx.conf"] # 变参

3、案例:自定义镜像 centosjava8:

① 需求:

使 centos7.6 镜像具备 vim + ifconfig + jdk8

jdk 镜像下载地址:Java Downloads | Oracle

② 编写:

准备 Dockerfile 文件

FROM centos:7
#基础镜像MAINTAINER bean<123@123.com>
#维护者和联系方式ENV MYPATH /usr/local
WORKDIR $MYPATH
#以变量的形式给到一个落脚点RUN yum -y install vim
#安装vim编辑器RUN yum -y install net-tools
#安装ifconfig命令查看网络IPRUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#安装java8及lib库ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
#配置java环境变量EXPOSE 80CMD echo $MYPATH
CMD echo "success-----------ok"
CMD /bin/bash

③ 构建:

docker build -t 新镜像名:TAG .

④ 运行:

4、虚悬镜像:

(1) 概念:构建镜像时出现错误,导致仓库和标签都是<none>

(2) 查看命令:docker image ls -f dangling=true

(3) 删除命令:docker image prune

三、Docker网络

1、简介:

启动docker服务后,docker服务器会创建一个docker0网桥,该网桥的网络名称为docker0,宿主机和容器可以通过该网桥相互通信。

2、docker network 常用命令:

(1) 查看网络模式:

docker network ls

安装docker后默认会自动创建三个网络。

(2) 创建网络:

docker network create 网络名

(3) 删除网络:

docker network rm 网络名

(4) 查看网络元数据:

docker network inspect 网络名

3、docker网络模式:

(1) 种类:

(2) bridge:

① Docker在宿主机虚拟一个Docker容器网桥(docker0),Docker启动容器时会根据Docker网桥的网段分配给容器一个IP地址,同时Docker网桥是每个容器的默认网关。因为在同一个宿主机内的容器接入同一个网桥,容器之间能通过docker0网桥直接通信。

② 网桥docker0创建的虚拟设备接口叫veth,每个容器实例内部也有一块网卡,网卡接口叫做eth0,每个veth匹配某个容器实例内部的eth0,两两配对。

③ 示例:

● 启动两个tomcat实例:

docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8

● 查看宿主机网络接口信息:ip addr

● 进入容器查看网络接口信息:

(3) host:

① 容器将不会虚拟出自己的网卡,而是直接使用宿主机的 IP 和端口,和宿主机共用一个 Network space。

② 示例:

● 启动一个tomcat实例:

docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8

docker启动时指定--network host,如果还指定-p映射端口,则docker服务器会给出警告信息,且-p所设置的参数不会生效。

● 正确启动:去掉-p端口映射

docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8

● 查看容器网络模式:docker inspect tomcat83

● 进入容器查看网络接口信息:

与宿主机网络接口信息相似。

(4) none:

禁用网络功能。在none模式下,docker服务器并不会为容器进行网络配置,在容器中查看网络信息,只能查看到 lo (本地回环网络127.0.0.1网卡),需要自行为容器添加网卡,配置 IP。

(5) container:

① 新创建的容器不会创建自己的网卡、IP,也不是和宿主机共享网络配置,而是和一个已经存在的一个容器共享配置。两个容器除了网络共享,其他的如文件系统、进程列表依然是隔离的。

② 示例:

● 新建两个 alpine 容器实例:

docker run -it --name alpine1 alpine /bin/sh
docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh

● 验证共用网桥:

● 停止 alpine1 运行,观察 alpine2 网络接口状态:

alpine1停止运行后,alpine2只剩本地环回网络。

4、自定义网络

(1) 以 bridge 模式启动两个tomcat容器:

docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8

测试网络连通性:按照 ip 地址能 ping 通 ;按照服务名 ping 不通。

(2) 以自定义网络模式启动tomcat容器:

① 新建一个自定义网络:

② 新建容器加入自定义网络:

docker run -d -p 8081:8080 --network bean_network --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network bean_network --name tomcat82 billygoo/tomcat8-jdk8

● 测试网络连通性,以服务器也能ping通:

结论:自定义网络本身就维护好主机名和 ip 的对应关系

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

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

相关文章

信号完整性分析

目录 前言一、信号完整性SI1.1 信号失真1.2 串扰1.3 衰减 二、电源完整性PI2.1 地弹2.2 电源轨道塌陷 三、电磁兼容EMC3.1 电磁辐射3.2 抗干扰 前言 本篇介绍信号完整性分析的知识体系&#xff0c;以及部分分析方法。   什么是信号完整性?通俗来讲&#xff0c;信号在互连线的…

ProEasy机器人案例:电池边包胶

如下图所示&#xff0c;对一个电池三边包边&#xff0c;因客户现场有很多规格电池的大小&#xff0c;所以就需要建立动态的工具坐标来实现适配所有种类的电池 程序如下&#xff1a;Ddome程序 function Speed(num) --速度设置 MaxSpdL(2000) --movl最大速度…

如何使用 Docker 安装 Node-RED

安装 Node-RED 使用 Docker 是一种简便的方式&#xff0c;以下是基本的步骤&#xff1a; 安装 Docker&#xff1a; 确保已在系统上安装 Docker。可从 Docker 官方网站 或 Windows Docker 安装教程 获取安装指南。 拉取运行 Node-RED 镜像&#xff1a; 打开终端或命令行界面&am…

Matlab 点云对称性检测

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 这是一个很有趣的功能,它的思路其实与ICP算法的思路有些相似: 首先,它会初始化两个旋转角度,即绕x轴旋转与绕y轴旋转,初始的过程是将点对称(镜像)过去,计算与匹配点之间的距离误差,误差最小者为最优初始值…

Python 从入门到精通 学习笔记 Day02

Python 从入门到精通 第二天 今日目标 字符串基本操作、字符串序列操作、输入输出函数 字符串内置方法、运算符、练习之前学习的内容 一、字符串基本操作 在Python中&#xff0c;字符串的转义是指在字符串中使用特殊的字符序列来表示一些特殊字符。 在Python中&#xff0c;字…

低代码你需要了解一下

低代码的概念可以追溯到1980年代&#xff0c;当时IBM的快速应用程序开发工具&#xff08;RAD&#xff09;被冠以新的名称——低代码&#xff0c;由此&#xff0c;低代码的概念首次面向大众。然而&#xff0c;在近40年的历程中&#xff0c;低代码发展经历了两个阶段&#xff1a;…

力扣78. 子集(java 回溯解法)

Problem: 78. 子集 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 我们易知&#xff0c;本题目涉及到对元素的穷举&#xff0c;即我们可以使用回溯来实现。对于本题目我们应该较为注重回溯中的决策阶段&#xff1a; 由于涉及到对数组中元素的穷举&#xff0c;即在每…

Leetcode刷题笔记题解(C++):165. 比较版本号

思路&#xff1a;利用小数点来分开求和&#xff0c;判断和是否相等来推断两个版本号是否一致 class Solution { public:int compareVersion(string version1, string version2) {int i0;//记录version1的字符下标int j0;//记录version2的字符下标int num10;//保存version1的和…

Unity传送门特效: The Beautiful Portal/Level up/Teleport/Warp VFX

7种不同风格的传送门特效! 每个传送门都有一个轻型和重型版本。 每个版本都有一个"无循环”和一个"无限”预制件:D 总共有28个预制件 -VFX完全使用Unity的粒子系统和基本的Unity着色器。 使用标准渲染管道中制作了这个资产。所以VFX的功能就像视频宣传片一样。 同时,…

Spring AOP从入门到精通

目录 1. AOP的演化过程 1. 代理模式 2. 动态代理 2.1 JDK动态代理 2.2 Cglib动态代理 3. Spring模式 3.1 ProxyFactory 3.2 ProxyFactoryBean 3.3 AbstractAutoProxyCreator 2. Spring AOP抽象 1. 核心术语 1.1 连接点(JoinPoint) 1.2 切点(Pointcut) 1.3 增强(Ad…

C# Solidworks二次开发:三种获取SW设计结构树的方法-第二讲

今天这篇文章是接上一篇文章的&#xff0c;主要讲述的是获取SW设计结构树节点的第二种方法。 这个方法获取节点的逻辑是先获取最顶层节点&#xff0c;然后再通过获取顶层节点的子节点一层一层的把所有节点都找出来&#xff0c;也就是需要递归。想要用这个方法就要了解下面几个…

tomcat环境搭建

镜像下载地址&#xff1a;https://mirror.tuna.tsinghua.edu.cn/apache/tomcat/ 配置环境变量 添加系统变量 编辑Path 测试 dos窗口运行startup启动tomcat 访问http://localhost:8080/

【每日一题】—— D. Divide and Equalize(Codeforces Round 903 (Div. 3))(数学、数论)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

Linux操作系统 中的用户管理,也就是关于用户的相关的操作与理解

目录 1 概念2 用户管理的类型3、模板目录4 查看历史命令5 相关文件6 创建用户useradd7 命令passwd 存储及shadow命令下的用户密码8 usermod命令&#xff08;修改属性&#xff09;9 密码设置10 删除命令userdel11 用户组的操作12 用户权限13 创建一个用户组&#xff0c;并且将这…

ORA-600 kcbzib_kcrsds_1一键恢复

一个19c库由于某种原因redo损坏强制打开库报ORA-600 kcbzib_kcrsds_1错误 SQL> startup mount pfile?/database/pfile.txt; ORACLE instance started. Total System Global Area 859830696 bytes Fixed Size 9034152 bytes Variable Size 5…

我们一起聊一聊JWT的那些事

我们一起聊一聊JWT的那些事 一切美好&#xff0c;如期而至… 什么是JWT JWT&#xff0c;全称为 JSON Web Token&#xff0c;是一种用于在网络上安全地传递信息的开放标准&#xff08;RFC 7519&#xff09;。JWT 是一种紧凑且独立的方式&#xff0c;用于在各方之间以 JSON 对象…

javaTCP协议实现一对一聊天

我们首先要完成服务端&#xff0c;不然出错&#xff0c;运行也要先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.Actio…

消费1000返1500元,买了4罐奶粉倒赚商家2000元?商家亏吗?

大家好&#xff0c;我是微三云胡佳东&#xff0c;一个深耕私域电商模式玩法的互联网人&#xff01;&#xff01; 在当前的全球经济环境下&#xff0c;消费增值的概念正逐渐受到广泛的关注。这一模式的崛起&#xff0c;不仅仅是一种商业模式的创新&#xff0c;更代表着我们对经…

[⑦ADRV902x]: JESD204学习笔记

前言 JESD204B/C基于SERDES&#xff08;SERialization/DESerialization&#xff09;技术&#xff0c;也就是串化和解串&#xff0c;在发送端将多位并行的数据转换为1 bit的串行数据&#xff0c;在接收端将串行数据恢复成原始的并行数据。 在JESD204接口出现以前&#xff0c;数…

TOC清洁验证棉签:擦拭取样清洁验证专用的强力助手!

由PP聚丙烯杆聚酯纤维布头构成的TOC清洁验证棉签&#xff0c;用于清洁验证协议的表面采样取样&#xff0c;对难以到达的区域或狭小空间的精密清洗等。 棉签杆使用聚丙烯制作,杆上的缺口能使棉签头在较小的操作及污染下放进小瓶中,具有较好的化学相容性。 有缺口的分离式手柄允许…