Docker 入门(四)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Docker 入门(四)

本系列往期文章:

概述:Docker 入门(一)

镜像:Docker 入门(二)

volume:Docker 入门(三)


场景:假设我们有一个 web 应用,需要显示总共连接的次数,同时我们使用另一个 redis 服务去记录这个数值,显然 web 是需要连接到 redis 上的,而在 docker 容器中,每个容器都默认有自己独立的虚拟网络,那么容器之间应该如何连接?



01


link



首先我们启动一个 redis 容器,并通过 --name 指定容器名也叫 redis :

docker run --name redis redis

然后,启动 web 容器,通过 --link 指定连接的容器并指定这个连接的名称(注意以下指令都是在 docker run 后面添加的部分):

--link  redis:redis_connection

而我们的 web 程序中直接使用上面定义的连接名 redis_connetion 即可:


这样 web 容器便可以连接上 redis 容器了,如下图所示:

使用 link 方法,其会在容器启动时(容器每次启动都会默认配置不同的虚拟网络)找到连接的目标容器并在本容器内部设置环境变量并修改 /etc/hosts 文件,这也是我们可以直接使用连接别名而不用指定具体 IP 地址的原因。


但是,不建议使用这种方式,同时这种方式也将会在未来被移除。



02


net



1、net 方式一,如下图所示:

我们先将 redis 容器的端口暴露到本地宿主机,然后在 web 中指定本地宿主机具体的 IP 地址,这样也可以实现连接,但是需要注意的是,在 web 中不能直接使用 localhost ,因为前面已经提到了,每个容器都有自己独立的虚拟网络,使用 localhost 将会指向的是这个容器内部,而不是宿主机。


这种方式,我们也可以看到,很麻烦,一方面 redis 需要暴露端口,另一方面还必须知道宿主机具体的 IP 地址。



2、net 方式二,如下图所示:

这里与前一种方式不同的是,我们直接通过 --net host 指定容器直接使用宿主机网络,这样在 web 中就可以直接通过 localhost 连接到 redis 了,不用知道宿主机具体的 IP 地址,对比上一种方式看似有一点小的改进。


但是这种方式的问题在于,对于 MacOS 系统无法使用,因为在 MacOS 上 Docker 仍然是跑在一层虚拟机中的,这种方式目前还无法穿透这层虚拟机直接将 localhost 映射到宿主机本地,同时,直接使用宿主机网络,容器其实会全部暴露出来,存在安全隐患,因此也不建议使用这种方式。



3、net 方式三,如下图所示:

这里通过 --net container 的方式直接指定 web 使用与 redis 相同的网络,这样既避免了无谓的端口暴露,同时又能保持容器与宿主机之间的隔离,这种方式是建议使用的。


但是存在需要注意的地方,那就是 --net container 指定容器网络与 -p 暴露端口不能同时使用,换句话说,本来我们的 web 容器是需要 -p 暴露端口到宿主机,这样我们才能在本地访问到 web 服务,但是因为我们已经使用了 --net container 指定其使用与 redis 相同的网络,所以不能再使用 -p 了,那怎么办?可以在另一个 redis 容器上使用 -p ,将本来应该由 web 直接暴露的端口间接的由 redis 暴露,毕竟此时我们的 web 和 redis 容器都已经使用了同一个网络,所以这样做也是没问题的,但还是有点别扭的。




03


自定义网络



官方在宣告 link 方式将会被移除的同时,推荐的替代方式就是自定义网络。


创建一个简单的自定义网络:

docker network create -d bridge my-network

将 web 和 redis 容器连接到同一个自定义的网络中,并直接在 web 中的 redis host 指向 redis 容器的别名,即可完成连接,如下图所示:

对于自定义网络,我们不仅能够在容器启动时通过 --net 直接指定,还能够在容器已经启动完成后通过:

docker network connect [network-name] [container]

后续添加进去,这也就意味着我们可以方便快速的完成容器网络的切换与迁 移。


通过自定义网络,我们还能够定义更加复杂的网络规则,比如网关、子网、IP 地址范围等等,当然更多的细节还请查阅官方文档。




04


结语



本文通过一个简单的示例描述了容器之间互相连接的几种不同方式,重点关注下自定义网络就好了,本篇完。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
82 5
|
1月前
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
1天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
7天前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
39 2
|
14天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
24 3
|
19天前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
41 2
|
26天前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
1月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
|
1月前
|
Ubuntu Linux 虚拟化
Docker入门实践(一)
Docker入门实践(一)
|
1月前
|
Oracle 关系型数据库 Linux
Docker入门和安装
这篇文章提供了Docker的入门指南和在CentOS系统上安装Docker的详细步骤。
39 0
Docker入门和安装
下一篇
无影云桌面