Docker网络概述
Docker网络是Docker提供的用于容器间通信以及容器与主机或其他网络实体之间通信的解决方案。Docker支持多种类型的网络,可以根据不同的场景选择不同的网络方案。
Docker 的网络子系统使用了基于驱动程序的可插拔设计。Docker默认存在多种网络驱动程序,较为常用的有:
1、bridge:是Docker的默认网络驱动,Docker 容器启动时会自动创建一个与主机相连的虚拟网络桥接,然后将容器连接到这个桥接上。容器之间可以通过容器名称访问,而不需要暴露端口。
如果两个容器属于同一个网络(如默认的 bridge 网络),则容器之间可以使用不同的网络配置通过网络互相通信。当容器不具有公共IP时,可以用容器名称来代替IP地址。
2、host:网络驱动不会为容器创建额外的网络命名空间,而是容器直接使用主机的网络命名空间,实现容器与主机之间的通信。使用 host 网络驱动可以提高网络性能,但是容器之间无法直接相互通信,只能通过主机来中转。
3、none:网络驱动表示容器没有任何网络接口,即没有网络连接,只有回环地址。在某些场景下可能会使用到这种网络类型,例如一个完全隔离的容器场景。
需要注意的是,Docker 内置的网络驱动并不支持跨主机的容器通信,如果需要在多台主机的 Docker 容器之间通信,可以使用第三方的网络插件,如Weave Net、Calico等。
Docker网络操作
Docker Network命令是Docker提供的用于管理网络的子命令集合,可以使用这些命令来创建、删除、连接和断开连接Docker容器的网络,以及查看已存在的网络等操作。以下是一些常用的 Docker Network 命令和说明:
1、create:这个命令用于创建一个 Docker 网络。通过指定不同的网络驱动程序和选项,可以创建不同类型的网络。
- 例如:docker network create --driver bridge my-bridge-network,将创建一个名为my-bridge-network的桥接网络
2、ls:用来列出所有现有的 Docker 网络。
3、inspect:用来查看某个 Docker 网络的详细信息。
4、connect:使用该命令可以将一个已启动的 Docker 容器连接到一个指定的网络上。
- docker network connect my-bridge-network container-name
5、disconnect:使用该命令可以将已连接到 Docker 网络的某个容器与网络断开连接。
- docker network disconnect my-bridge-network container-name
Docker网络示例
本示例展示创建MariaDB服务器容器,并通过MaraiDB客户端和其他客户端实现对MariaDB服务器容器的访问。
首先,创建一个新的桥接网络:
- docker network create new-network
然后,查看当前主机的所有网络:
- docker network ls
创建一个MariaDB的容器,连接到new-network网络:
- docker run --detach --network new-network --name myMariadb --env MARIADB_USER=root --env MARIADB_PASSWORD=root --env MARIADB_ROOT_PASSWORD=root mariadb:10.3
其中 –env是配置镜像使用的环境变量,本例中是为MariaDB数据库配置初始的用户名和密码。
创建完成的镜像可能自动关闭,使用docker ps -a命令查看镜像运行状态,如果没有处于运行状态,使用docker start命令启动该镜像。
通过如下命令启动一个MariaDB的客户端:
- docker run -it --network new-network --rm mariadb:10.3 mysql -hmyMariadb -uroot -proot
上述命令中:
- --network new-network:将容器绑定到new-network
- --rm:容器退出后自动删除
- mariadb:10.3:镜像的名称和版本
- mysql -hmyMariadb -uroot -proot:进入容器后执行的命令,启动MaraiaDB客户端,访问主机名为myMariadb的服务器,这里是直接使用了前面启动的容器的名称作为主机名
总结
1、虚拟化技术(Virtualization)是一种在单一的硬件平台上运行多个独立操作系统或应用程序的技术。
- 全虚拟化
- 半虚拟化
- 容器化
2、容器化技术(Containerization)是一种操作系统级别或应用程序级别的虚拟化技术,它通过隔离操作系统层面的资源,将应用程序打包成一个独立的可运行的容器,使得应用程序在不同的计算环境中能够稳定、高效地运行。
3、Docker是一个开源的容器化平台,允许开发人员将应用程序及其所有依赖项打包到一个轻量、可移植的容器中,然后在不同的环境中部署和运行这些容器。
4、Docker中的核心概念包括镜像、容器、仓库、文件和网络等。
5、Docker使用C/S架构。 Docker客户端与Docker守护进程通信,Docker守护进程负责构建、运行和分发Docker容器。
6、Docker中的镜像管理包括创建、查看、构建、保存和删除镜像等操作。Docker提供了客户端命令、编程语言API等操作Docker的方式。
7、Docker 的容器管理可以通过 Docker CLI 命令行工具来完成。Docker 提供了丰富的命令,用于管理容器的创建、启动、停止、删除、暂停、恢复等操作。
8、Dockerfile 是一个文本文件,包含一系列命令,这些命令用于在 Docker 镜像中自动执行操作。Dockerfile 定义了如何构建 Docker 镜像的步骤和所需的操作。
9、在 Docker 中,镜像有一个很重要的特性叫做分层,每个镜像都由一系列分层的文件系统组成,每一层都包含了特定软件包、库和文件。
10、在 Docker 中,每次从镜像启动容器时,Docker 会自动创建一个可写的容器层(也称为容器快照层),用于保存容器中的写入操作结果。这个可写层会在容器启动时创建,可以对容器进行修改、更新等操作,但不会影响到镜像本身。
11、当我们使用 Docker 运行一个容器时,Docker会将镜像层叠加在一起。在容器层中,用户看到的是一个由所有镜像层叠加之后的文件系统。
12、Docker网络是Docker提供的用于容器间通信以及容器与主机或其他网络实体之间通信的解决方案。
13、Docker支持多种类型的网络,可以根据不同的场景选择不同的网络方案。
- 1、bridge
- 2、host
- 3、none