编辑
2023-03-15
容器虚拟化学习
00
请注意,本文编写于 553 天前,最后修改于 553 天前,其中某些信息可能已经过时。

目录

*Docker容器技术初识*
Docker容器技术简介
Docker容器技术优势
Docker容器组件简介
*Docker环境构建方法*
Docker主机环境规划
Docker容器软件部署
Docker容器内核配置
Docker容器加速配置
*Docker基本管理命令*
Docker镜像相关操作说明
Docker容器相关操作说明
*Docker容器数据管理*
Docker容器数据卷概念介绍
Docker容器数据卷使用说明
*Docker网络通讯配置*
Docker容器网络基础知识
Docker容器互联配置说明

Docker容器技术初识

Docker容器技术简介

Docker是一个开源项目,诞生与2013年初,由Docker公司(前dotCloud公司,PaaS市场中的老牌提供商)的团队编写,最初是dotCloud公司内部的一个业余项目,整个程序是基于google公司推出的Go语言实现。

Docker的思想来自于集装箱,集装箱解决了什么问题?

在一艘大船上,可以把货物规整的摆放起来,并且各种各样的货物被装在集装箱里,集装箱和集装箱之间不会互相影响,那么我就不需要专门运送蔬菜的船和专门运送货物的船了。

只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

简而言之:可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器环境。

Docker官方网站:https://docs.docker.com

Docker参考资料:https://github.com/moby/moby

Docker仓库网站:https://registry.hub.docker.com

Docker容器技术优势

  • 简单轻量的建模:

Docker上手非常快,用户只需要几分钟,就可以把自己的程序“Docker化”。

  • 职责的逻辑分离:

使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。

  • 快速高效的开发生命周期

Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。

  • 鼓励使用面向服务的架构

Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型

image-20220817085550968

从上图容器技术与虚拟技术对比可知:

  • 容器技术:

是隔离的环境中运行的一个进程,如果容器对应的进程结束,容器就会随之停止;

容器在隔离环境中,拥有自己的IP地址、系统文件、主机名称、进程管理等信息;

容器不需要物理硬件CPU的支持,是共用宿主机内核,启动容器环境并运行容器中的进程

容器环境启动流程较快,运行性能较高,资源损耗较小,属于比较轻量级的服务。

  • 虚拟技术:

需要物理主机CPU支持(vt虚拟化),并且虚拟主机是模拟计算机硬件运行的环境,会正常有开启运行启动流程;

虚拟主机启动流程较慢,运行性能较低,资源损耗较大,属于比较重量级的服务。

性能对比分析:

image-20220817085625873

Docker容器组件简介

Docker技术包含以下几个核心组件部分:

  • Docker客户端和服务器(也称为Dcoker引擎);
  • Docker镜像
  • Docker仓库(Registry)
  • Docker容器

01. Docker客户端和服务器

Docker是一个客户端/服务器(C/S)架构的程序。

Docker客户端只需要向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。

Docker守护进程有时也称为Docker引擎。

Docker提供了一个命令行工具docker以及一整套RESTful API来与守护进程交互。

  • 用户可以在同一台宿主机上运行Docker守护进程和客户端;
  • 用户可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

image-20220817085657945

02. Docker镜像

可以把镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

03. Docker仓库(Registry)

Docker用Registry来保存用户构建的镜像。

Registry分为公共和私有两种:Docker公司运营的公共Registry称为Docker Hub。

用户可以在Dcoker Hub注册账号,分享并保存自己的镜像。

04. Docker容器

Docker可以帮助用户构建和部署容器,用户只需要把自己的应用程序或服务打包放进容器即可。

容器是基于镜像启动起来的,容器中可以运行一个或多个进程。

可以这样认为,镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。

Docker环境构建方法

Docker主机环境规划

在部署docker主机环境时,先对需要进行部署的主机地址与名称信息,以及用途进行规划:

image-20220817085845619

系统虚拟主机部署完毕后,需要进行基本的系统初始化操作:

01. 配置虚拟主机名称:

hostnamectl set-hostname docker-01

02. 关闭系统安全软件:

# 关闭系统防火墙软件 [root@docker-01 ~]# systemctl stop firewalld [root@docker-01 ~]# systemctl is-active firewalld.service inactive [root@docker-01 ~]# systemctl disable firewalld.service Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@docker-01 ~]# systemctl is-enabled firewalld.service disabled 说明:如果需要使用iptables防火墙可以进行安装,在部署docker是可以先关闭iptables # 安装iptables [root@docker-01 ~]# yum install iptables-services -y # 禁用iptables [root@docker-01 ~]# systemctl stop iptables && systemctl disable iptables # 清空iptables规则配置 [root@docker-01 ~]# iptables -F # 关闭系统selinux程序 [root@docker-01 ~]# setenforce 0 [root@docker-01 ~]# getenforce Permissive -- 表示临时关闭selinux [root@docker-01 ~]# sed -i '7s#enforcing#disabled#g' /etc/selinux/config [root@docker-01 ~]# sed -n '7p' /etc/selinux/config SELINUX=disabled -- 表示永久关闭selinux(需要重启生效)

03. 进行系统时间同步:

# 下载时间同步软件 [root@docker-01 ~]# yum install -y ntp ntpdate [root@docker-01 ~]# ntpdate cn.pool.ntp.org # 编写计划任务 [root@docker-01 ~]# crontab -e * */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org &>/dev/null # 重启crond服务使配置生效: [root@docker-01 ~]# systemctl restart crond

04. 安装系统基础软件:

[root@docker-01 ~]# yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack yum-utils

Docker容器软件部署

【Linux系统命令行界面安装】

01. 进行docker下载源优化:

# 配置docker-ce国内下载yum源(阿里云/清华源) [root@docker-01 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo … 省略部分内容… repo saved to /etc/yum.repos.d/docker-ce.repo 说明:将指定下载源文件保存到/etc/yum.repos.d/目录中 --清华源配置:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/

02. 进行docker依赖包安装:

[root@docker-01 ~]# yum install -y device-mapper-persistent-data lvm2

03. 进行docker社区版安装:

[root@docker-01 ~]# yum install docker-ce -y [root@docker-01 ~]# docker version Client: Docker Engine - Community Version: 20.10.7 -- 查看使用的Docker版本信息 API version: 1.41 Go version: go1.13.15 Git commit: f0df350 Built: Wed Jun 2 11:58:10 2021 OS/Arch: linux/amd64 Context: default Experimental: true Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

04. 进行docker社区版启动:

[root@docker-01 ~]# systemctl start docker && systemctl enable docker [root@docker-01 ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2021-07-31 04:11:16 CST; 9s ago Docs: https://docs.docker.com 说明:看到running,表示docker正常运行

Docker容器内核配置

01. 修改内核参数实现数据包转发功能:

br_netfilter模块用于将桥接流量转发至iptables链,br_netfiter内核参数需要开启转发

# 进行内核参数信息配置: [root@docker-01 ~]# modprobe br_netfilter [root@docker-01 ~]# cat > /etc/sysctl.d/docker.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF # 查看内核参数配置信息: [root@docker-01 ~]# cat /etc/sysctl.d/docker.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 # 加载内核参数配置信息: [root@docker-01 ~]# sysctl -p /etc/sysctl.d/docker.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 # 检查确认内核模块状态: [root@docker-01 ~]# lsmod | grep br_netfilter br_netfilter 22256 0 bridge 151336 1 br_netfilter

重启系统主机后模块会失效,可以设置开机自动加载模块:

# 在/etc/sysconfig/modules目录下新建模块文件 [root@docker-01 ~]# vim /etc/sysconfig/modules/br_netfilter.modules modprobe br_netfilter # 对新增的模块文件增加执行权限 [root@docker-01 ~]# chmod +x /etc/sysconfig/modules/br_netfilter.modules 或者 [root@docker-01 ~]# chmod 755 /etc/sysconfig/modules/br_netfilter.modules # 在/etc目录下新建rc.sysinit文件 [root@docker-01 ~]# vim /etc/rc.sysinit #!/bin/bash for file in /etc/sysconfig/modules/*.modules do [ -x $file ] && $file done # 系统重启后查看内核模块是否加载 [root@docker-01 ~]# lsmod | grep br_netfilter br_netfilter 22256 0 bridge 151336 1 br_netfilter

在未开启内核参数时,docker安装运行时会经常出现如下错误:

WARNING: bridge-nf-call-iptables is disabled # 需要将iptables的内核参数开启,才不会影响docker容器之间的通讯 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1

将Linux系统作为路由或者VPN服务就必须要开启IP转发功能。

当linux主机有多个网卡时一个网卡收到的信息是否能够传递给其他的网卡,如果设置成1的话可以进行数据包转发,可以实现VxLAN等功能,不开启会导致docker部署应用无法访问。

# 开启系统主机数据包内核转发功能 net.ipv4.ip_forward = 1

所有内核参数信息配置完毕后,需要重启docker服务程序

[root@docker-01 ~]# systemctl restart docker

Docker容器加速配置

docker镜像加速器可以提升拉取镜像的效率。

国内从DockerHub拉取镜像有时会遇到困难,此时可以配置镜像加速器,Docker官方和国内很多云服务商都提供了国内加速器服务。

01. 镜像加速器服务配置_阿里云

登录阿里云镜像仓库:(如果没有开通,可开通阿里云的镜像服务)

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

image-20220817090126258

CentOS系统配置docker镜像加速器方法:

# 1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce # 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 [root@docker-01 ~]# mkdir -p /etc/docker [root@docker-01 ~]# tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com"] -- 根据自己阿里云加速器地址配置 } EOF# 3. 查看镜像加速器配置文件信息[root@docker-01 ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com"] -- 单一加速器配置 或者 "registry-mirrors": ["https://y1edhblz.mirror.aliyuncs.com","https://registry.docker- cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"] -- 多个加速器配置 }# 4. 重新加载docker配置环境并重启docker服务[root@docker-01 ~]# systemctl daemon-reload [root@docker-01 ~]# systemctl restart docker

Docker基本管理命令

Docker镜像相关操作说明

01. 在Docker hub上查找镜像信息

[root@docker-01 ~]# docker search centos

02. 在Docker hub上下载镜像信息

[root@docker-01 ~]# docker pull centos

03. 查看本地已经下载的镜像

[root@docker-01 ~]# docker images

04. 已有镜像制作离线压缩包

[root@docker-01 ~]# docker save -o centos.tar.gz centos 说明:一旦压缩包制作完成,就可以利用压缩文件分享容器镜像数据信息

05. 加载镜像离线压缩包文件

[root@docker-01 ~]# docker load -i centos.tar.gz Loaded image: centos:latest 说明:容器镜像压缩包不要用tar命令进行解压,要用docker load加载及解压镜像压缩包

06. 删除本地已经下载的镜像

[root@docker-01 ~]# docker rmi centos rmi 或者 [root@docker-01 ~]# docker rmi -f centos -- 表示强制删除镜像信息 [root@docker-01 ~]# docker images -- 镜像信息查看,确认指定镜像已经删除 REPOSITORY TAG IMAGE ID CREATED SIZE

Docker容器相关操作说明

01. 以交互方式启动并进入容器

[root@docker-01 ~]# docker run --name=hello -it centos /bin/bash 说明:运行以上命令表示启动容器并进入容器中进行交互操作,docker run表示运行容器命令

02. 守护进程方式运行启动容器

[root@docker-01 ~]# docker run --name=hello1 -td centos 31f18b2ddf88a72b2ef62e14b7a383d9e27a07e514fc1de0b37c537b37f78402 -- 利用td参数可以实现指定容器以守护进程方式运行 [root@docker-01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 31f18b2ddf88 centos "/bin/bash" 11 seconds ago Up 10 seconds hello1 -- 指定的hello1容器已经实现守护进程方式运行,容器操作退出后,容器仍旧处于运行状态 [root@docker-01 ~]# docker exec -it hello1 /bin/bash [root@31f18b2ddf88 /]# -- 表示进入到指定的守护进程方式运行的容器中,利用docker exec进入到指定容器

03. 查看容器处于运行状态命令

# 查看正在运行的容器 [root@docker-01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f575329c7325 centos "/bin/bash" 4 minutes ago Up 4 minutes hello # 查看所有可用的容器 [root@docker-01 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f575329c7325 centos "/bin/bash" 6 minutes ago Exited (0) 6 seconds ago hello 说明:docker ps -a表示将所有容器信息显示,包括已经退出的容器

04. 管理容器运行状态相关命令

# 停止指定容器运行状态 [root@docker-01 ~]# docker stop hello1 hello1 [root@docker-01 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 31f18b2ddf88 centos "/bin/bash" 12 minutes ago Exited (0)… hello1 # 激活指定容器活跃状态 [root@docker-01 ~]# docker start hello1 hello1 [root@docker-01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 31f18b2ddf88 centos "/bin/bash" 14 minutes ago Up 3 seconds hello1

05.进入运行状态容器当中命令

# 进入到指定运行容器中 [root@docker-01 ~]# docker exec -it hello1 /bin/bash [root@31f18b2ddf88 /]#

06. 删除指定使用容器相关命令

# 删除未运行状态的容器,直接利用docker rm删除即可 [root@docker-01 ~]# docker rm hello hello [root@docker-01 ~]# docker ps -a -- 普通删除生效,hello容器已经消失 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 31f18b2ddf88 centos "/bin/bash" 18 minutes ago Up 4 minutes hello1 # 删除已运行状态的容器,直接利用docker rm -f 删除即可 [root@docker-01 ~]# docker rm -f hello1 hello1 [root@docker-01 ~]# docker ps -a -- 强制删除生效,hello1容器已经消失 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

07. 获取容器运行过程日志信息

# 获取容器操作日志信息 [root@docker-01 ~]# docker logs hello1

Docker容器数据管理

Docker容器数据卷概念介绍

数据卷设计的目的,在于数据的永久存储,它完全独立于容器的生存周期,因此,docker不会在容器删除时删除其挂载的数据卷;

同一个数据卷可以只支持多个容器的访问。

Docker容器数据卷使用说明

# 添加数据卷配置: docker run --name volume -v ~/datavolume:/data -itd centos /bin/bash 说明:~/datavolume为宿主机目录,/data为docker启动的volume容器的里的目录 这样在宿主机的/datavolume目录下创建的数据就会同步到容器的/data目录下 # 调整数据卷权限: docker run --name volume1 -v ~/datavolume1:/data:ro -itd centos /bin/bash 说明:添加只读权限之后在docker容器的/data目录下就不能在创建文件了,为只读权限; 在宿主机下的/datavolume1下可以创建东西

Docker网络通讯配置

docker run命令创建Docker容器时,可以使用—net选项参数指定容器的网络模式,Docker容器有以下4种网络模式:

image-20220817090457547

Docker容器网络基础知识

  • Docker容器虚拟网桥

安装docker的时候,会生成一个docker0的虚拟网桥:

[root@docker-01 ~]# ip address show docker0 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:54:98:5b:b2 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:54ff:fe98:5bb2/64 scope link valid_lft forever preferred_lft forever 说明:在Linux系统中虚拟网桥可以设置IP地址信息,相当于拥有一个隐藏的虚拟网卡。
  • Docker容器虚拟网卡

每运行一个docker容器都会生成一个veth设备对,这个veth一个接口在容器里,一个接口在物理机上。

41: vetha6625b3@if40: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether b2:c0:ce:b4:a2:41 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::b0c0:ceff:feb4:a241/64 scope link valid_lft forever preferred_lft forever
  • Docker网桥工具安装

可以安装一个网桥管理工具,对网桥设备进行操作管理:

[root@docker-01 ~]# yum install bridge-utils -y

网桥管理工具安装完毕后,可以利用命令对网桥设备进行管理:

# 查看网桥设备配置信息: [root@docker-01 ~]# brctl show bridge name bridge id STP enabled interfaces docker0 8000.024254985bb2 no veth033c5f5 veth241c56a veth73dfe8e veth77b945b veth8769c40 vetha6625b3 vethe460562 vethfa3a68b 说明:可以看到docker0的网桥设备下面有很多接口,每个接口对应一个启动的docker容器。

Docker容器互联配置说明

编辑Dockerfile文件进行指定镜像创建:

# 创建Dockerfile文件存储目录: [root@docker-01 backup]# mkdir /root/dockerfile/inter-image -p [root@docker-01 backup]# cd /root/dockerfile/inter-image [root@docker-01 inter-image]# touch dockerfile # 编写Dockerfile文件配置信息: [root@docker-01 inter-image]# cat dockerfile FROM centos RUN sed -i "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-* RUN sed -i "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-* RUN yum install wget -y RUN yum install nginx -y EXPOSE 80 CMD /bin/bash # 构建Dcokerfile文件对应镜像: [root@docker-01 inter-image]# docker build -t "inter-image" . [root@docker-01 inter-image]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE inter-image latest f078bbadc840 5 seconds ago 346MB -- 以上所有配置信息表示自己制作一个inter-image镜像文件,网安同学们可以忽略上面信息

加载自检的docker镜像文件:

# 将本地自建的docker镜像文件上传到系统中并进行离线加载 [root@docker-01 inter-image]# docker load -i xiaoQ-inter-image.tar.gz

实现所有容器间互联配置(实现容器互访):

容器之间互联方法一:

# 基于上面创建的inter-image镜像启动第一个容器test1,并进入到容器中 [root@docker-01 inter-image]# docker run --name test1 -td inter-image 4c15e7331ee851a52a60b027b7d84befd4aada38e499c12313df9a3fe1d746d8 [root@docker-01 inter-image]# docker exec -it test1 /bin/bash [root@4c15e7331ee8 /]# /usr/sbin/nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@4c15e7331ee8 /]# /usr/sbin/nginx [root@4c15e7331ee8 /]# ps -ef|grep nginx 说明:使用ctrl+p或者ctrl+q进行退出容器,可以保证退出容器后,容器继续正常运行 # 基于上面创建的inter-image镜像启动第二个容器test2,并进入到容器中 [root@docker-01 inter-image]# docker run --name test2 -td inter-image 008a56efa38fd8ec3b6885d26ba3307b4fadf7d43bfb22fe444a27f88be46840 [root@docker-01 inter-image]# docker exec -it test2 /bin/bash # test1容器地址信息获取: [root@docker-01 ~]# docker exec -it test1 /bin/bash [root@4c15e7331ee8 /]# ip add 90: eth0@if91: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:0a brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.10/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever # test2容器地址信息获取: [root@docker-01 ~]# docker exec -it test2 /bin/bash [root@008a56efa38f /]# ip add 92: eth0@if93: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:0b brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.11/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever # 在test1与test2容器之间利用IP地址进行ping测试 [root@008a56efa38f /]# ping 172.17.0.10 # 在test1与test2容器之间利用IP地址进行curl测试 [root@008a56efa38f /]# curl -I http://172.17.0.10

利用以上方法操作过程,已经可以实现两个容器之间的网络互访;

但是存在一个问题,假如test1容器重启,那么在重启后就会重新分配IP地址;

所以为了使IP地址变了也可以访问,可以采取第二种互联方法。

容器之间互联方法二:

解决容器互联方法一的问题,可以给容器起个代号(设置网络别名),这样可以直接以代号访问,避免了容器重启IP变化带来的问题。

容器网络别名配置语法格式:

docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE][COMMAND]

容器网络别名配置实践操作:

# 基于上面创建的inter-image镜像启动第三个容器test3,并进入到容器中 [root@docker-01 ~]# docker run --name test3 -td inter-image f6d24214b781043951a46f675a4c4d69ce83332718f1d327f2969ad1af400cc8 [root@docker-01 ~]# docker exec -it test3 /bin/bash [root@f6d24214b781 /]# ip add 98: eth0@if99: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:0c brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.12/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever # 基于上面创建的inter-image镜像启动第四个容器test4,并进入到容器中 [root@docker-01 ~]# docker run --name test4 -td --link=test3:webtest inter-image [root@45ed1845a228 /]# [root@docker-01 ~]# docker exec -it test4 /bin/bash [root@45ed1845a228 /]# ip add 102: eth0@if103: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.13/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever 说明:启动一个test4容器,--link做链接,那么当我们重新启动test3容器时,就算ip变了,也没关系 我们可以在test4上ping别名webtest # 在test4容器中进行ping测试test3主机,但利用别名方式进行测试 [root@45ed1845a228 /]# ping webtest 说明:利用别名ping方式,实质访问的是test3主机,就算test3容器的ip变了也可以通

其他宿主机如何访问容器服务:

# 需要借助宿主机NAT映射功能(端口映射功能)实现访问 [root@docker-01 ~]# docker run --name web -p 8080:80 -itd inter-image /bin/bash --- B宿主机 -- A宿主机(192.168.30.101:8080) -- 172.16.0.10 80 docker
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Gustav

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!