Docker容器:docker基础及网络
Docker容器:docker基础及安装
一.docker容器概述
1.什么是容器
(1)Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。
(2)是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
(3)Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
2. docker与虚拟机的区别
2.1 docker虚拟化产品有哪些及其对比
虚拟化架构分为两种:
(1)寄居架构:
寄居架构概念:虚拟寄居架构指的是在真实的操作系统之上来安装虚拟化软件的,虚拟化软件再去安装,然后再在虚拟机上安装虚拟化操作系统,它的稳定性不是很高,当真实机器宕机之后,虚拟操作系统都会宕机,个人搭建较多。
- Vmware、workstation:个人在windows安装虚拟的
- VmFUSion:个人机器MAC安装虚拟机
- Xen:必须安装是基于(HyperVision)需要cpu、硬盘、内存安装,安装内核软件kernel-xen
- KVM:rehl 6自带的KVM,全国5%~6%,是开源的虚拟化产品,称为完全虚拟化、装在linux操作系统之上
- Microsoft Hyper-V:是微软自带的server2012、2016、2019都有
- docker:即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
(2)原生架构
原生架构:概念虚拟化原生架构在虚拟化直接安装到硬件上的,不会依赖于操作系统,这种架构,一般应用在企业中,因为相较于很安全
- EXSI:Vmware、vsphere全虚拟化,直接使用,物理硬件性能高
2.2 Docker与虚拟机的区别
| 特性 | Docker容器 | 虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 计算能力损耗 | 几乎无 | 损耗 50%左右 |
| 性能 | 接近原生 | 弱于 |
| 系统支持量(单机) | 上千个 | 几十个 |
| 隔离性 | 资源隔离/限制 | 完全隔离 |
3.Docker容器的使用场景
(1)打包应用程序简化部署
(2)可脱离底层硬件任意迁移
4.Docker容器的优点
●灵活:即使是最复杂的应用也可以集装箱化。
●轻量级:容器利用并共享主机内核。
●可互换:可以即时部署更新和升级。
●便携式:可以在本地构建,部署到云,并在任何地方运行。
●可扩展:可以增加并自动分发容器副本。
●可堆叠:可以垂直和即时堆叠服务。
5.Docker 的底层运行原理
(1)Linux 内核的容器化支持:Docker 利用了 Linux 内核的一些特性,如 cgroups (控制组)、namespace (命名空间)、以及文件系统的特殊挂载等技术,实现了容器的隔离和资源控制。
(2)Docker 基于客户端(容器)-————服务端 (docker 引擎) 结构 的系统
(3)客户端 (容器) 通过socket(IP+端口)向docker引擎发送相应的指令 ,docker服务器就会执行相应的命令
6.namespace的六项隔离
| namespace | 系统调用参数 | 隔离内容 |
|---|---|---|
| UTS | CLONE_NEWUTS | 主机名与域名 |
| IPC | CLONE_NEWWIPC | 信号量、消息队列和共享内存 |
| PID | CLONE_NEWPID | 进程编号 |
| NETWORK | CLONE_NEWNET | 网络设备、网络栈、端口等 |
| MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
| USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支持〉 |
7.Docker核心概念
(1)镜像
容器运行的基础,包含运行应用的程序的所有内容(资源、配置文件等)
(2)容器
是从镜像创建的运行实例
(3)仓库
集中保存镜像的地方(公有docker hub,私有仓库docker)
Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker
二.Docker安装 及管理
1.安装 Docker
目前 Docker 只能支持 64 位系统。
#关闭防火墙
systemctl stop firewalld.service
setenforce 0
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
注解:
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
安装docker(ce表示社区版,若需安装指定版本则–后跟版本)
yum install -y docker-ce-20.10.18 docker-ce-cli
systemctl start docker.service
systemctl enable docker.service
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
1.1 卸载docker
(1)卸载 Docker 客户端 (docker-ce-cli):
yum remove docker-ce-cli
(2)卸载 Docker 引擎 (docker-ce) 以及其所依赖的存储库:
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /etc/docker
rm -rf /var/lib/docker
注:以上命令会卸载 Docker 引擎以及删除相关配置和镜像,包括所有容器和镜像,请在卸载前备份需要保留的数据。
(3)如果想彻底删除所有 Docker 安装过程中产生的文件,使用以下命令:
rm -rf /var/lib/docker
(4)卸载完毕后,可以使用以下命令确认 Docker 是否已经不再运行
service docker status
2.查看docker信息
#查看 docker 版本信息
docker version
#docker 信息查看
docker info
注释:
Client: Docker Engine - CommunityVersion: 24.0.5Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.11.2Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.20.2Path: /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 0 # 容器数量Running: 0Paused: 0Stopped: 0Images: 0 # 镜像数量Server Version: 24.0.5 # server 版本Storage Driver: overlay2 # docker 使用的是 overlay2 文件驱动Backing Filesystem: xfs # 宿主机上的底层文件系统Supports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfs # Cgroups 驱动Cgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2Default Runtime: runcInit Binary: docker-initcontainerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939brunc version: ff819c7e9184c13b7c2607fe6c30ae19403a7affinit version: de40ad0Security Options:seccompProfile: defaultKernel Version: 3.10.0-693.el7.x86_64 # 宿主机的相关信息Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 976.3MiBName: localhost.localdomainID: Y4ES:FTH2:ZJL7:MRVE:RJVB:WJIB:S7BV:C5IZ:LMBR:E4G5:QWSM:SNDTDocker Root Dir: /var/lib/docker # docker 数据存储目录Debug Mode: falseRegistry: https://index.docker.io/v1/ # registry 地址Labels:Experimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors: # 加速站点https://6ijb8ubo.mirror.aliyuncs.com/Live Restore Enabled: false
注:如查看信息时末尾出现了以下:
这些警告是 Docker 在启动时检测到 Linux 内核参数 bridge-nf-call-iptables 和 bridge-nf-call-ip6tables 被禁用了。这些内核参数用于在 Docker 容器与宿主机之间配置网络桥接。
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
解决方案:
-
编辑
/etc/sysctl.conf文件:sudo vi /etc/sysctl.conf -
将以下两个内核参数的值设置为
1:net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 -
保存并关闭文件。
-
使更改生效:
sudo sysctl -p
再次使用查看就没有了
docker info
3. 配置docker加速器
(1)打开阿里云官网登录
(2)点击左侧菜单栏,搜索框输入容器镜像服务


(3)选择镜像工具,镜像加速器,复制命令配置即可配置完毕重新加载daemon然后重启docker。

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://90b8orj3.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
4.docker镜像相关基础命令
4.1 搜索镜像
搜索关键字的相关镜像内容
格式:docker search 关键字
例如:docker search nginx

4.2 获取镜像
如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
格式:docker pull 镜像名[:版本号]
例如:docker pull nginx

4.3 查看镜像信息
4.3.1 镜像下载后存放在 /var/lib/docker 。
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息
image 目录存放镜像信息
overlay2 目录下存放具体的镜像底层文件。

4.3.2 查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
4.3.3 查看下载到本地的所有镜像
[root@test7 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 19 months ago 141MB
注解:
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
4.3.4 根据镜像的唯一标识 ID 号,获取镜像详细信息
格式:docker inspect 镜像ID号
例如:docker inspect 605c77e624dd

4.3.5 本地的镜像添加新的标签
格式:docker tag 名称:[标签] 新名称:[新标签]
例如:docker tag nginx:latest nginx:web
#查看新添加的标签
docker images
docker images | grep nginx


4.4 删除docker镜像
格式:
(1)docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
(2)docker rmi 镜像ID号 #会彻底删除该镜像
注:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
例如:
#仓库标签删除
docker rmi nginx:web
#ID号删除
docker rmi 605c77e624dd

4.5 容器导出镜像存储
将镜像保存成为本地文件
格式:docker save -o 保存目录 导出的镜像
#存出镜像命名为nginx存在当前目录下
docker save -o nginx nginx:latest
ls -lh

#指定保存目录
docker save -o /opt/nginx nginx:latest

4.6 导入镜像
将镜像文件导入到镜像库中
格式:
(1)docker load < 本地存储的镜像名称
(2)docker load -i 本地存储的镜像名称
例如:
#镜像在当前目录
docker load < nginx
#不在当前目录需添加目录
docker load -i /opt/nginx


4.7 上传镜像到官方公共仓库
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
docker tag nginx:latest soscscs/nginx:web #添加新的标签时必须在前面加上自己的dockerhub的username
docker login #登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web #上传镜像
5.Docker 容器相关基础命令
5.1 查看docker容器进程、运行状态
显示up的进程,加-a表示显示所有状态容器
格式:docker ps [选项]
常用选项:
-a:显示所有状态容器

5.2 创建docker容器
就是将镜像加载到容器的过程。
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入
-t:让 Docker 分配一个伪终端 tty
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell
docker create -it nginx:latest

5.3 管理docker容器
开启或关闭docker容器
格式:docker start/stop 容器唯一id/容器名称
docker start e785459638d9
docker stop e785459638d9
docker ps -a

5.4 docker run的运行过程
创建并启动docker容器
(1)格式:docker run [选项] 镜像名/镜像唯一id /bin/bash
常用选项:
-d 选项让 Docker 容器以守护形式在后台运行,并且容器所运行的程序不能结束
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell
–name:指定创建的容器的名称
相当于先执行 docker create 命令,再执行 docker start 命令。
注意:容器是一个与其中运行的 shell 命令共存亡的终端,命令运行容器运行, 命令结束容器退出。
docker create -it nginx:latest /bin/bash
(2)运行过程:
- 检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
- 利用镜像创建并启动一个容器;
- 分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
- 从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
- 分配一个地址池中的 IP 地址给容器;
- 执行用户指定的应用程序,执行完毕后容器被终止运行。
docker run centos:7 /usr/bin/bash -c ls /
#会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了
docker ps -a


(3)在后台持续运行 docker run 创建的容器
需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
#可以看出容器始终处于 UP,运行状态
docker ps -a

#创建容器并持续运行容器
docker run -itd --name test1 centos:7 /bin/bash

5.4.1 docker 容器7个的生命周期
(1)create:已创建还未运行的容器
(2)running:正在运行中的容器
(3)restarting:容器正在重启中
(4)removing:容器正在迁移中
(5)paused:容器已暂停的状态
(6)exited:停止容器运行
(7)dead:死亡,主要是操作系统出现异常或断点导致
(8)暂停和停止状态的区别:
-
paused 命令挂起指定的容器中的所有进程为暂停,
-
stop:表示杀掉正在运行的docker容器进程,默认是10s后
5.5 容器的进入
需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。
格式:docker exec -it 容器ID/名称 /bin/bash
常用选项:
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。
#进入容器前,确保容器正在运行
docker start e785459638d9
docker exec -it e785459638d9 /bin/bash
ls
#退出容器后,容器仍在运行
exit
docker ps -a

#不加 -d 选项会创建容器后直接进入容器,但是退出容器,容器也会停止
docker run -it centos:7 bash

5.6 怎么把宿主机的文件传入到容器内部
5.6.1 linux 怎么复制
格式:cp 原文件路径目标文件路径
docker cp l opt / abc容器id: /opt/abc
(1)复制到容器中
[root@test7 opt]# echo abc123 > test.txt[root@test7 opt]# cat test.txt
abc123[root@test7 opt]# docker cp test.txt e785459638d9:/home/
Successfully copied 2.05kB to e785459638d9:/home/
查看复制是否成功
[root@test7 opt]# docker exec -it e785459638d9 /bin/bash
root@e785459638d9:/# ls
bin docker-entrypoint.d home media proc sbin tmp
boot docker-entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
root@e785459638d9:/# cd /home/
root@e785459638d9:/home# ls
test.txt
root@e785459638d9:/home# cat test.txt
abc123
(2)从容器复制文件到主机
root@e785459638d9:/opt# echo "qwerty" > test1.txt
root@e785459638d9:/opt# cat test1.txt
qwerty
root@e785459638d9:/opt# exit
exit
[root@test7 opt]# docker cp e785459638d9:/opt/test1.txt /opt/
Successfully copied 2.05kB to /opt/
[root@test7 opt]# ls
containerd nginx rh test1.txt test.txt
[root@test7 opt]# cat test1.txt
qwerty
5.7 容器的导出与导入
用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
(1)导出格式:docker export 容器ID/名称 > 文件名
docker export 11b7fd33c415 > centos7.tar

(2)导入格式:cat 文件名 | docker import – 镜像名称:标签
#run一个新的nginx
[root@test7 opt]# docker run -itd nginx /bin/bash
c588fc4b47059331fe56605067dee867290b482df18491ac7123d8dfa1851003
[root@test7 opt]# docker ps -a

[root@test7 opt]# ls
centos7.2023.8.15tar centos7.tar containerd nginx rh test1.txt test.txt
#导入后会生成镜像,但不会创建容器
[root@test7 opt]# cat centos7.2023.8.15tar | docker import - centos7:test
sha256:c5e4c3a170cdd7f8aa34559ff293a59858b7918912a74dbf1b8261e19a4c209d[root@test7 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 test c5e4c3a170cd 25 seconds ago 140MB

5.8 删除容器
格式:docker rm [-f] 容器ID/名称
docker stop c588fc4b4705
docker rm c588fc4b4705 #删除已经终止状态的容器
docker rm -f c588fc4b4705 #强制删除正在运行的容器

5.9 批量操作
5.9.1 批量停止容器
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stop
5.9.2 批量删除所有容器
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm
5.9.3 批量删除镜像
docker images | awk 'NR>=2{print "docker rmi "$3}' | bash
5.9.4 删除none镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi
5.9.5批量清理后台停止的容器
docker rm $(docker ps -a -q)
三.Docker 网络
1.Docker 网络实现原理
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。
Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。
docker run -d --name test1 -P nginx #随机映射端口(从49153开始)
docker ps -a

#指定映射端口
docker run -d --name test3 -p 50001:80 nginx
docker ps -a

浏览器访问:http://192.168.198.17:50001 、http://192.168.198.17:49153

#查看容器的输出和日志信息
格式:docker logs 容器的ID/名称
docker logs f45ac0f9a122

2.Docker 的网络模式
2.1 Host
2.1.1 概念
(1)容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
(2)相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。
(3)Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。
(4)一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。 一个Docker容器一般会分配一个独立的Network Namespace。 但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。
2.2.2 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host
#查看docker网络列表
docker network ls 或 docker network list

2.2.3 使用docker run创建Docker容器时,可以用 --net 或 --network 选项指定容器的网络模式
●host模式:使用 --net=host 指定。
●none模式:使用 --net=none 指定。
●container模式:使用 --net=container:NAME_or_ID 指定。
●bridge模式:使用 --net=bridge 指定,默认设置,可省略。
2.2 Container
2.2.1 概念
(1)创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
(2)这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
2.2.2 创建指定名称
#--name 选项可以给容器创建一个自定义名称
docker run -itd --name test1 centos:7 /bin/bash
docker ps -a

2.2.3 查看容器进程号
#查看容器进程号
docker inspect -f '{{.State.Pid}}' 3ed82355f811

2.2.4 查看容器的进程、网络、文件系统等命名空间编号
#查看容器的进程、网络、文件系统等命名空间编号
ls -l /proc/89198/ns

docker run -itd --name test2 --net=container:1a29ed506da4 centos:7 /bin/bash
docker ps -a

docker inspect -f '{{.State.Pid}}' 20dc47e95e6a
91161
#查看可以发现两个容器的 net namespace 编号相同
ls -l /proc/91161/ns

2.3 None
(1)该模式关闭了容器的网络功能。
(2)使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
2.4 Bridge
(1)默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat 表配置与宿主机通信。
(2)相当于Vmware中的 nat 模式,容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。
2.5 自定义网络
#直接使用bridge模式,是无法支持指定IP运行docker的,例如执行以下命令就会报错
docker run -itd --name test3 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
2.5.1 创建自定义网络
#可以先自定义网络,再使用指定IP运行docker
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
注解:
docker1 为执行 ifconfig -a 命令时,显示的网卡名,如果不使用 --opt 参数指定此名称,那在使用 ifconfig -a 命令查看网络信息时,看到的是类似 br-110eb56a0b22 这样的名字,这显然不怎么好记。
mynetwork 为执行 docker network list 命令时,显示的bridge网络模式名称。
#运行
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash

相关文章:
Docker容器:docker基础及网络
Docker容器:docker基础及安装 一.docker容器概述 1.什么是容器 (1)Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 (2)是一个开源的应用容器引擎,基于go语言开发并遵…...
Django实现音乐网站 ⑿
使用Python Django框架制作一个音乐网站, 本篇主要是加载静态资源和推荐页-轮播图、推荐歌单功能开发。 目录 加载静态资源 引入jquery.js 引入bootstrap资源文件 创建基类模板样式文件 推荐页开发 轮播图开发 下载 加载swiper 自定义引入继承块设置 使用…...
ORB-SLAM2学习笔记10之图像关键帧KeyFrame
文章目录 0 引言1 KeyFrame类1.1 构造函数1.2 成员函数1.3 关键帧之间共视图1.3.1 AddConnection1.3.2 UpdateBestCovisibles1.3.3 UpdateConnections1.3.4 EraseConnection1.3.5 SetBadFlag 1.4 地图点1.5 生成树 2 KeyFrame用途 0 引言 ORB-SLAM2学习笔记7详细了解了System主…...
【ownCloud】添加信任域
在我进行使用mysql:5.6和 owncloud 镜像,构建一个个人网盘后 我的虚拟机更改了ip地址导致出现下列状况 报错:您正在访问来自不信任域名的服务器。 please contact your administrator. if you are an administrator of this instance, configure the &q…...
C++--类型转换
1.什么是类型转换 在传统C语言中,由强制类型转换和隐式类型转换,隐式类型转换,编译器在在编译阶段自动处理,能转换则转换,强制类型转换由用户自己转换。 缺陷: 转换的可视性比较差,所有的转换形…...
在服务器上部署 Nginx 并设置图片服务器
问题:我要指定/home/images专门存放图片!该怎么做,而且我的系统是centos8系统,只有一个root用户,用root用户已经安装了nginx 答案: 既然你使用了 CentOS 8,并且你想使用 /home/images 目录存放…...
使用NXP GUI GUIDER生成的GUI移植到雅特力MCU平台过程详解(ST/GD/国民/极海通用)
好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。 本文档用于本人对知识点的梳理和记录 一、前言 上一篇我们有介绍NXP GUI Guider工具如何制作和调试GUI,GUI神器 NXP GUI GUIDER开发工具入门教程https://blog.csdn.n…...
JVM——配置常用参数,GC调优策略
文章目录 JVM 配置常用参数Java内存区域常见配置参数概览堆参数回收器参数项目中常用配置常用组合 常用 GC 调优策略GC 调优原则GC 调优目的GC 调优策略 JVM 配置常用参数 Java内存区域常见配置参数概览堆参数;回收器参数;项目中常用配置;常…...
使用IDEA把Java程序打包成jar
点击左上角File,选择Project Structure 左侧选中Artifacts,点击右侧的号 选择JAR->From modules with dependencies 选择你要运行的main方法所在的类,选好了点击OK Artifacts添加完成后点击右下角OK 在工具栏中找到Build,选择Build Artifacts 刚才创建好的Artifacts,选择Bui…...
元宇宙和数字孪生的异同探究
元宇宙和数字孪生,作为两个备受瞩目的概念,都在不同领域引起了巨大的关注。虽然它们都涉及数字化世界的构建,但元宇宙和数字孪生在概念、应用和影响方面存在一些异同点。 相似之处: 数字表示: 元宇宙和数字孪生都依赖…...
初识微服务
我们在曾经最常见的就是所谓的单体架构,但是由于网民越来越多,单体架构已经逐渐的被淘汰出去,所以我们在单体架构的基础上提出了微服务,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合࿰…...
数据库锁的分类 各种锁
锁的一个分类 数据库中的锁前言分享链接个人总结全局锁:表级锁行级锁: 数据库中的锁 前言 C支持并发有锁,Linux里面也有锁机制,数据库也有锁,什么互斥锁,表级锁,间隙锁,好多…&…...
MySQL数据库软件
MySQL数据库软件的详细知识介绍: 1. 存储引擎 MySQL支持多种存储引擎,如InnoDB、MyISAM等。不同引擎有各自的特点,InnoDB支持事务、行锁,MyISAM支持全文索引等。 2. 索引结构 MySQL索引主要有B树索引、哈希索引、全文索引等。这些索引通过不同的数据结构加速查找效率。 3. …...
无涯教程-PHP - preg_match_all()函数
preg_match_all() - 语法 int preg_match_all (string pattern, string string, array pattern_array [, int order]); preg_match_all()函数匹配字符串中所有出现的模式。 它将按照您使用可选输入参数order指定的顺序将这些匹配项放置在pattern_array数组中。有两种可能的类…...
Docker 练习2 安装MySQL
一、实验要求 1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 2、安装搭建私有仓库 Harbor 3、编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。具体要求如下: (1)…...
AndroidStudio 编译报错Unable to make field private final
用 AndroidStudio 打开某个工程后,编译报错如下 Execution failed for task :app:processDebugMainManifest. > Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to …...
linux 上安装es
首先 到官网 https://www.elastic.co/cn/downloads/elasticsearch 下载对应的安装包,我这里下载的是 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.1-linux-x86_64.tar.gz 然后讲该压缩包上传到 linux 的/usr/local 目录下执行 tar -z…...
自然语言处理从入门到应用——LangChain:索引(Indexes)-[文本分割器(Text Splitters)]
分类目录:《自然语言处理从入门到应用》总目录 当我们需要处理长文本时,有必要将文本分割成块。虽然这听起来很简单,但这里存在很多潜在的复杂性。理想情况下,我们希望将语义相关的文本块保持在一起,但什么是"语义…...
Chrome如何安装插件(文件夹)
1.下载的插件 说明:插件文件夹 2.打开扩展程序位置 3.点击已加载的扩展程序 说明:找到插件的位置 4.报错 说明:那还要进入文件里面。 5.插件的位置 说明:如果已经安装了插件,那么需要查看插件的位置。chrome输入 …...
MySql 环境搭建
目录 MySql 在 CentOS 7 环境下安装。 说明: 1.卸载不要的环境 2.配置 mysql 官方 yum 源 3.开始安装 4.启动 mysql 5.mysql 登录 6.配置 mysql 7. 设置开机启动 MySql 在 CentOS 7 环境下安装。 说明: 在安装与卸载中,用户切换成 r…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
