docker3 docker run 高阶参数

本文介绍了Docker中容器间的网络互联方式,包括通过不同网络模式实现容器间通信的方法,如bridge、host、container模式及--link参数的使用。详细解释了每种模式的工作原理及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、docker run -e参数:

   -e(向容器内传递环境变量,启动容器时用户可以动态传参)

1)--name  指定名称

2)-v  挂载文件,把该容器的数据保存到挂载的文件上(-v命令:的左边是docker外的地址或者端口,冒号右边是docker内的地址或者端口)

3)-p  端口映射 -p 8888:3306,8888宿主机的8888端口映射到容器的3306端口上 (-v命令:的左边是docker外的地址或者端口,冒号右边是docker内的地址或者端口)

4) -d  后台运行

5)-i  以交互模式运行容器,通常与 -t 同时使用

6)-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用

命令:

docker run --name some-mysql -v /home/navy/test/mysql:/var/lib/mysal -e MYSQL_ROOT_PASSWORD=1qaz9oI.  -p 8888:3306 -d mysql:5.7   (bridge模式,端口映射)

2、docker run --network参数:

docker的网络模式:bridge host ipvlan macvlan null overlay(ipvlan macvlan overlay这三个网络模式是集群用的很少用到)

(1)null模式:无网络模式,自已手动设置网络模式

(2)bridge模式:docker启动的默认模式,外界无法访问,有良好的网络隔离性,复杂性高,使用最多,是容器编排的基础;

网络原理:

1)linux名称空间的作用:虚拟化的强要求就是隔离,容器与容器、容器与宿主机之间要隔离这样是为了不互相干扰,但是目前内核没有隔离,除了内核外的网络、资源、文件系统、进程空间等都要隔离。

2)网络名称空间:有网络名称空间这个东西让虚拟机与虚拟机、虚拟机与宿主机之间是完全隔离,不能通信;那么他们怎么通信呢?虚拟网卡可以解决这个问题:虚拟网卡成对出现,如果一对中的一个网卡发送信息(报文)会无条件地发送给这一对中的另一个虚拟网卡(如下图1);但是这会产生一个问题:如果要两两通信的很多那得放很多虚拟网卡

3)为了解决2)中的问题引入了另一种技术:linux bridge(网桥):把成对网卡中的另一块放在网桥上,这样A要和C通信,A发出找Cip和端口的信息,B在网桥中的那一块网卡看到A的信息后发现不是自己就丢弃这个包,C在网桥中的那一块网卡看到A的信息发现就是自己的ip就会信息转发给C这个容器中的那块网卡里(如下图2)

4)网桥再和宿主机连接,连接到eth0上,这样所有容器可以与宿主机通信:A要与外网一个IP和端口通信,(外网与子网掩码相与,发现不是内网Ip,就不在网桥内广播了)网桥会把A的信息发到宿主机的网卡上(如下图3),需求ipv4_fordward

 iptables:4表5链

外网访问容器:目的地址:Hostip:port-->contianerip:port       源地址:本机Ip:port-->宿主机Ip:port

(3)host模式:直接使用宿主机的网络,容易发生端口冲突(编译容器的时候用host模式/host模式可以当路由);如下图容器直接与宿主机通信

eg:        docker run --name myjenkins -itd --network host -v /home/hogwarts/tech/tech/images/jenkins_data:/var/jenkins_home --env JAVA_OPTS="-xMX8192m" jenkins/jenkins   (host网络模式启动

(4)container模式:内置网络模式,与以上几种物理层面的网络模式不同,同一个宿主机中不同容器互相通信

eg: 1)前端:docker run --name =conan  -itd  -p 8999:4200 conan (bridge模式启动)           docker run --name=holmes -itd  --network=container:conan holmes( container模式启动,并且指向前端bridge模式启动的容器,这样两个容器就能互相通信)

       2)前端:docker run --name =conan  -itd  -p 8999:4200 conan (bridge模式启动)          docker run --name=holmes -itd --net=host holmes( host网络模式启动)

注意:Linux命令中--代表全称,-代表简称,比如--name可以的简写-n

3、另外一种两个容器间接连接的方式(官方开源容器喜欢这种方式来让两个容器通信):--link

eg:搭建testlink:

1)启动mariadb:(docker的镜像文件中有说明,启动teslink之前需要先启动mariadb,mariadb是mysql旗下另一款数据库产品,语法特性和mysql是一样的)

docker run -d --name= mariadb -e ALLOW_EMPTY_PASSWORD=yes -e MARIADB_USER=bn_testlink -e MARIADB_DATABASE=bitnami_testlink -v /home/test/mysql:/var/lib/mysql -p 8088:3306 bitnami/mariadb:latest

2)启动testlink:(testlink暴露出两个端口所以做了两次端口映射):用--link的方式把mariadb的环境变量的信息注入到testlink的容器中了

docker run -d --name=testlink -p 8099:80 -p 444:443 -e ALLOW_EMPTY_PASSWORD=yes -e TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --link mariadb bitnami/testlink:latest

### 关于 UniApp 框架推荐资源与教程 #### 1. **Uniapp 官方文档** 官方文档是最权威的学习资料之一,涵盖了从基础概念到高级特性的全方位讲解。对于初学者来说,这是了解 UniApp 架构技术细节的最佳起点[^3]。 #### 2. **《Uniapp 从入门到精通:案例分析与最佳实践》** 该文章提供了系统的知识体系,帮助开发者掌握 Uniapp 的基础知识、实际应用以及开发过程中的最佳实践方法。它不仅适合新手快速上手,也能够为有经验的开发者提供深入的技术指导[^1]。 #### 3. **ThorUI-uniapp 开源项目教程** 这是一个专注于 UI 组件库设计实现的教学材料,基于 ThorUI 提供了一系列实用的功能模块。通过学习此开源项目的具体实现方式,可以更好地理解如何高效构建美观且一致的应用界面[^2]。 #### 4. **跨平台开发利器:UniApp 全面解析与实践指南** 这篇文章按照章节形式详细阐述了 UniApp 的各个方面,包括但不限于其工作原理、技术栈介绍、开发环境配置等内容,并附带丰富的实例演示来辅助说明理论知识点。 以下是几个重要的主题摘选: - **核心特性解析**:解释了跨端运行机制、底层架构组成及其主要功能特点。 - **开发实践指南**:给出了具体的页面编写样例代码,展示了不同设备间 API 调用的方法论。 - **性能优化建议**:针对启动时间缩短、图形绘制效率提升等方面提出了可行策略。 ```javascript // 示例代码片段展示条件编译语法 export default { methods: { showPlatform() { console.log(process.env.UNI_PLATFORM); // 输出当前平台名称 #ifdef APP-PLUS console.log('Running on App'); #endif #ifdef H5 console.log('Running on Web'); #endif } } } ``` #### 5. **其他补充资源** 除了上述提到的内容外,还有许多在线课程视频可供选择,比如 Bilibili 上的一些免费系列讲座;另外 GitHub GitCode 平台上也有不少优质的社区贡献作品值得借鉴研究。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值