Docker - 容器链接

容器链接简介

你好,有抱负的Docker爱好者们!今天,我们将深入到容器链接的精彩世界。作为你友好的邻居计算机老师,我在这里引导你开始这段旅程,即使你之前从未编写过一行代码。那么,系好安全带,让我们一起扬帆起航,驶向容器之海!

Docker - Container Linking

容器链接就像在聚会上介绍两位朋友。它允许容器之间相互通信,共享信息和资源。想象你在一个百家宴(这就是我们的Docker宿主机),每一道菜(容器)都需要知道其他菜品的可用情况。这基本上就是我们使用容器链接做的事情!

为什么容器链接很重要

你可能好奇,“我为什么要关心容器链接?”让我给你讲一个小故事。曾经有一个遥远的数据中心,应用程序都是孤立存在的。它们无法相互交谈、共享数据或一起工作。这是一种孤独的存在。但是,容器链接的出现改变了这一切!

容器链接允许我们:

  1. 创建复杂的多容器应用程序
  2. 在容器之间共享数据
  3. 通过隔离服务来提高安全性
  4. 更容易扩展我们的应用程序

基础容器链接

让我们从一个简单的例子开始。我们将创建两个容器:一个网页服务器和一个数据库,并将它们链接起来。

步骤 1:创建数据库容器

首先,我们将创建我们的数据库容器。在这个例子中,我们将使用MySQL。

docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=secret mysql:latest

让我们分解一下:

  • -d:在后台运行容器
  • --name mydb:给我们的容器命名
  • -e MYSQL_ROOT_PASSWORD=secret:设置root密码的环境变量
  • mysql:latest:使用最新的MySQL镜像

步骤 2:创建网页服务器容器

现在,让我们创建我们的网页服务器容器并将其链接到数据库。

docker run -d --name myweb --link mydb:db -p 80:80 nginx:latest

这里发生了什么:

  • --link mydb:db:这是魔法!我们将我们的mydb容器链接起来,并在我们的网页容器中称它为db
  • -p 80:80:将宿主机的80端口映射到容器内的80端口

理解链接

当我们使用--link选项时,Docker会为我们做几件事情:

  1. 在网页容器的/etc/hosts文件中添加一个条目
  2. 在网页容器中设置环境变量
  3. 允许网页容器连接到数据库容器

让我们窥视一下我们的网页容器,看看发生了什么:

docker exec -it myweb bash

一旦进入,我们可以检查/etc/hosts文件:

cat /etc/hosts

你应该能看到一个db容器的条目及其IP地址。

环境变量

Docker也为我们设置了环境变量。让我们列出它们:

env | grep DB_

你会看到像DB_PORTDB_NAME等变量。这些使得我们的应用程序能够轻松地连接到数据库。

旧式链接与用户定义网络

现在,我有一个坦白。我们刚刚使用的--link标志实际上在Docker中已经被认为是旧式方法。这就像在智能手机时代使用翻盖手机——它管用,但是有更好的选项可用。

链接容器的现代方法是使用用户定义网络。让我们看看它是如何工作的:

步骤 1:创建网络

docker network create mynetwork

步骤 2:在网络中运行容器

docker run -d --name mydb --network mynetwork -e MYSQL_ROOT_PASSWORD=secret mysql:latest
docker run -d --name myweb --network mynetwork -p 80:80 nginx:latest

现在我们的容器可以使用它们的名称作为主机名进行通信,而无需任何显式链接!

用户定义网络的优点

用户定义网络提供了几个好处:

  1. 更好的隔离性
  2. 自动DNS解析
  3. 能够即时连接或断开容器与网络的连接

实际示例:WordPress和MySQL

让我们将我们的知识应用到现实世界的例子中:使用MySQL设置WordPress。

步骤 1:创建网络

docker network create wordpress-network

步骤 2:运行MySQL容器

docker run -d --name wordpress-db --network wordpress-network -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpresspassword mysql:5.7

步骤 3:运行WordPress容器

docker run -d --name wordpress-site --network wordpress-network -e WORDPRESS_DB_HOST=wordpress-db -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpresspassword -e WORDPRESS_DB_NAME=wordpress -p 8080:80 wordpress:latest

现在,如果你在浏览器中访问http://localhost:8080,你应该能看到WordPress的设置页面!

结论

恭喜你!你已经迈出了进入容器链接世界的第一步。我们涵盖了从基本链接到用户定义网络,甚至使用容器设置了一个真实的WordPress站点。

记住,容器链接就是让我们的应用程序能够和谐地一起工作。这就像指挥一个乐队——每个容器都是一种乐器,当正确链接时,它们一起创造出美妙的音乐。

在你继续你的Docker旅程时,继续尝试不同的容器和网络选项。你越多练习,你对这些概念就会越熟悉。

愉快地容器化,愿你的Docker镜像总是成功构建!

方法 描述 示例
旧式链接 使用--link标志连接容器 docker run --name myweb --link mydb:db nginx:latest
用户定义网络 为容器通信创建自定义网络 docker network create mynetwork
环境变量 当链接容器时Docker自动设置 DB_PORTDB_NAME
DNS解析 允许容器使用容器名通信 mysql://wordpress-db:3306
端口映射 将容器端口暴露给宿主机 -p 8080:80

Credits: Image by storyset