Docker 入门指南
Docker 是一款工具,它允许开发者将应用程序及其所有依赖项打包到一个容器中。这样,该容器就可以轻松迁移到任何安装了 Docker 的机器上运行,而无需担心环境差异。它就像一种标准化的软件打包和运行方式。
容器是什么?
容器就像一个小包裹,里面包含了程序运行所需的一切,因此可以轻松地将其移动并在不同的计算机上运行,而不会造成任何问题。
最酷的是,这个迷你电脑(容器)就像一个披着斗篷的超级英雄。它可以在任何电脑上运行,无论这些电脑配置多么不同,因为它自带一个特殊的运行环境。这是一种简洁高效的软件管理方式,确保软件无论运行在何处都能以相同的方式工作。
我们为什么需要 Docker?
- 一致性: Docker 确保软件在你的电脑、你朋友的电脑或任何其他电脑上都能以相同的方式运行。它保证了系统的一致性。
- 便携性:您可以将软件及其相关组件打包到 Docker 容器中,然后将其部署到任何地方。这就像把游戏及其所有规则装进行李箱,然后去朋友家玩一样。
- 隔离性: Docker 容器就像一个个小气泡。气泡内部发生的事情只会留在气泡内部。这意味着容器内的一个程序不会干扰容器外的另一个程序。
- 效率: Docker 有助于节省计算机资源。您无需为了一个程序而占用整台计算机,而是可以在同一台计算机上运行多个容器,而且它们之间不会相互干扰。
- 速度: Docker 让软件的启动、停止和共享变得快捷方便。就像打开和关闭游戏机一样——快速又简单。
什么是Docker镜像?
Docker 镜像就像一个程序及其运行所需一切的快照。它是一个打包版本,包含了代码、工具和设置,就像一份包含所有原料的饼干配方快照一样。
图片就是配方,容器就是你按照配方实际制作并运行程序后得到的成品。
一些基本的Docker命令。
-
docker run nginx- 这条命令告诉 Docker 使用“nginx”镜像运行一个容器。这就像告诉 Docker 启动一个预先编写好的程序(nginx,一个 Web 服务器)的新实例一样。
-
docker ps- 显示正在运行的容器列表。这就像检查当前有哪些程序正在运行一样。
-
docker ps -a- 它会显示所有容器的列表,包括已停止的容器。这就像查看你运行过的所有程序的历史记录一样。
-
docker stop silly_sammet- 停止名为“silly_sammet”的正在运行的容器。这就像关闭一个正在运行的程序。
-
docker rm silly_sammet- 删除名为“silly_sammet”的已停止容器。这就像丢弃不再需要的程序的指令一样。
-
docker images- 列出所有已安装的 Docker 镜像。就像查看一个菜单,上面列出了所有可以运行的不同程序。
-
docker rmi nginx- 移除“nginx”镜像。这就像删除一个你不再想使用的程序的配方一样。
-
docker pull nginx- 从互联网下载“nginx”镜像。这就像从菜谱中获取一份新食谱一样。
-
docker run ubuntu sleep 5- 运行一个使用“ubuntu”镜像的容器,并使其休眠5秒钟。这就像启动一个程序,它会等待一会儿然后停止。
-
docker exec distracted_mcclintock cat /etc/hosts- 在名为“distracted_mcclintock”的运行容器内执行命令。这就像翻开食谱书查看特定页面一样。
-
docker run -d kodekloud/simple-webapp- 以与“kodekloud/simple-webapp”镜像分离的模式运行容器。这就像启动一个程序并让它在后台运行一样。
-
docker attach a043d- 将你的终端连接到 ID 为“a043d”的正在运行的容器。这就像跳进一个正在运行的程序,看看里面发生了什么。
Docker的一些概念:
-
带着标签跑:
- 标签就像程序的不同版本,它用来指定你想运行哪个版本。
- 示例代码:
docker run nginx:latest - 这将运行最新版本的Nginx程序。
-
使用标准输入运行:
- 标准输入(STDIN)就像在键盘上打字一样。有些程序需要你输入数据。
- 示例代码:
docker run -i -t ubuntu - 这会在 Ubuntu 容器内运行一个交互式终端,允许您输入命令。
-
启用端口映射运行:
- 端口就像门一样。程序通过它们与外界通信。
- 示例代码:
docker run -p 8080:80 nginx - 它会运行 Nginx,并打开你电脑的 8080 端口,将其连接到容器的 80 端口。
-
使用体积映射运行:
- 卷就像共享文件夹一样,允许你将内容存储在容器之外。
- 示例代码:
docker run -v /your/local/folder:/container/folder nginx - 它会运行 Nginx,并将您计算机上的文件夹连接到容器内的文件夹。
-
检查容器:
- 检查就像仔细查看一个正在运行的程序。
- 示例代码:
docker inspect container_name - 这可以为您提供有关正在运行或已停止的容器的详细信息。
-
容器日志:
- 日志就像日记一样,记录着程序正在执行的操作。
- 示例代码:
docker logs container_name - 这将显示特定容器的日志或活动。
环境变量
环境变量就像程序用来查找重要信息的便捷笔记,就像程序用来理解和更好地工作的秘密信息!
-
Python脚本(app.py)中的环境变量:
- 假设你有一个用 Python 编写的程序(app.py)。你可能想在不修改代码的情况下对其进行自定义。你可以使用环境变量。
- 示例代码(app.py):
import os app_color = os.getenv("APP_COLOR", "default_color") print(f"The app color is {app_color}")
- 脚本正常运行:
python app.py - 使用特定颜色跑步:
export APP_COLOR=blue; python app.py
-
在 Docker 中使用环境变量:
- Docker容器也可以使用环境变量。这就像给容器内的程序下达指令一样。
- 示例代码:
docker run -e APP_COLOR=green simple-webapp-color- 这会运行一个 Docker 容器(
simple-webapp-color),并将环境变量设置APP_COLOR为“green”。
-
检查环境变量:
- 有时,您需要检查正在运行的容器正在使用哪些环境变量。
- 示例代码:
docker inspect blissful_hopper - 此命令提供有关名为“blissful_hopper”的容器的详细信息,包括其环境变量。
简单来说,环境变量就像程序(或 Docker 容器)用来了解自身行为的小笔记。你可以在运行程序之前设置这些笔记,程序会根据它们进行自定义。export第二个示例中的命令就像在运行程序之前写一张纸条,告诉它应该如何运行。这条docker inspect命令就像窥探容器内部,看看它里面有什么笔记。
Docker 镜像
Dockerfile:
Dockerfile就像一组指令,指导Docker如何创建镜像。它就像烘焙蛋糕的食谱。
# Use the Ubuntu base image
FROM Ubuntu
# Update apt repository
RUN apt-get update
# Install dependencies using apt
RUN apt-get install -y python
# Install Python dependencies using pip
RUN pip install flask
RUN pip install flask-mysql
# Copy source code to /opt folder
COPY . /opt/source-code
# Set the working directory
WORKDIR /opt/source-code
# Specify entry point to run the web server
ENTRYPOINT ["flask", "run"]
创建您自己的图像的步骤:
- 创建一个名为 `<filename>` 的文件,
Dockerfile内容如上所述。 - 将其保存在与源代码相同的目录中。
构建 Docker 镜像:
在终端中运行以下命令:
docker build -t your-image-name .
该命令告诉 Docker 使用当前目录中的 Dockerfile 构建镜像(.),并用您选择的名称标记它(-t your-image-name)。
分层架构:
- 把 Docker 镜像想象成一个分层蛋糕。Dockerfile 中的每条指令都会给镜像添加一层。
- 层是可重用的。如果您更改了代码,Docker 只会重建受影响的层,从而提高了效率。
Docker 构建输出:
- 构建镜像时,Docker 会显示每个步骤。如果出现错误,它会给出错误信息。
哪些东西可以装箱?
- 几乎任何东西!应用程序、服务、数据库、网站,基本上任何软件都可以容器化。
- 这就像把你的软件装进一个盒子里,这样它就可以在任何地方运行而不会出现问题。
Docker CMD 与 ENTRYPOINT 有什么区别?
CMD在 Docker 中:
- 你可以把 CMD 看作是程序启动容器时默认执行的操作。
- 这就像在说,“嘿,当你运行这个容器时,默认执行这个操作。”
- 例如:
CMD ["flask", "run"]表示当容器启动时,它会自动运行 Flask Web 服务器。
CMD 示例:
FROM alpine
CMD ["sleep", "5"]
在这个例子中,当你运行一个使用此镜像的容器时,它会自动休眠 5 秒钟。
ENTRYPOINT在 Docker 中:
- 把 ENTRYPOINT 看作是容器执行的主要操作。它就像是最终的命令。
- 它会设置容器启动时要运行的默认应用程序,但你仍然可以根据需要覆盖它。
- 例如:
ENTRYPOINT ["flask", "run"]表示该容器主要用于运行 Flask Web 服务器,但如有需要,您仍然可以添加更多命令。
入口点示例:
FROM alpine
ENTRYPOINT ["sleep"]
CMD ["5"]
这里的主要目的是睡觉,如果你愿意,你仍然可以调整睡眠时间。
两种情况下,容器启动后都会休眠几秒钟。主要区别在于参数的提供方式以及这些参数是否容易被覆盖。
CMD 就像在说“这是默认操作”,而 ENTRYPOINT 就像在说“这是主要操作,但你可以根据需要进行一些调整”。它们都有助于定义容器启动时执行的操作。
Docker 中的网络:
Docker 网络帮助容器(程序)相互通信,确保它们能够顺利协同工作。
默认网络:
- Docker 会创建默认网络供容器通信。
- 示例代码:
docker run ubuntu --network=host- 这会运行一个使用主机网络的 Ubuntu 容器,这意味着它与主机共享网络命名空间。
用户自定义网络:
- 您可以创建自己的网络,以便更好地进行组织和控制。
- 示例代码:
docker network create --driver=bridge --subnet=182.18.0.0/16 custom-isolated-network
custom-isolated-network这将创建一个以特定子网命名的用户自定义桥接网络。
上市网络:
- 您可以查看您拥有的所有网络。
- 示例代码:
docker network ls
网络检查:
- 您可以查看特定网络的详细信息。
- 示例代码:
docker network inspect blissful_hopper- 这将显示名为“blissful_hopper”的网络的详细信息。
嵌入式 DNS:
- Docker 内置了 DNS 系统,容器可以通过名称相互查找。
- 示例代码:
mysql.connect(mysql)- 这可能是你的代码中名为“mysql”的服务使用 Docker 的 DNS 连接到另一个名为“mysql”的服务的一行代码。
Docker 存储:
Docker 存储就像决定在使用容器时将数据保存在哪里一样。您可以将数据保存在容器内,使用卷在容器之间共享数据,或者为了安全起见将其存储在容器外。
Docker 中的文件系统:
- Docker 使用分层架构来构建镜像。Dockerfile 中的每条指令都会向文件系统添加一个新的层。
# Dockerfile
FROM Ubuntu
RUN apt-get update && apt-get install -y python
RUN pip install flask flask-mysql
COPY . /opt/source-code
WORKDIR /opt/source-code
ENTRYPOINT ["flask", "run"]
- Dockerfile 中的层:
- 第 1 层:Ubuntu 基础层
- 第二层:apt软件包的变化
- 第三层:pip 包的变化
- 第四层:源代码
- 第 5 层:使用“flask”命令更新入口点
- 第 6 层:容器层
图像图层:
- 构建 Docker 镜像时,它由只读层组成。每一层都代表对镜像的更改或添加。
- 第 1 层:Ubuntu 基础层
- 第二层:apt软件包的变化
- 第三层:pip 包的变化
- 第四层:源代码
- 第 5 层:使用“flask”命令更新入口点
# Build the Docker image
docker build -t mmumshad/my-custom-app .
容器层:
- 运行 Docker 容器时,会在只读镜像层之上添加一个读写层。该层特定于正在运行的容器。
- 第 6 层:容器层
# Run the Docker container
docker run mmumshad/my-custom-app
卷数:
- 卷是一种将数据持久化到容器外部的方法。它们类似于外部存储。
# Create a Docker volume
docker volume create data_volume
# Use the volume in a container
docker run -v data_volume:/var/mysql mysql
- 您还可以使用以下命令将主机上的特定目录挂载到容器中
-v:
# Mount a host directory to a container directory
docker run -v /path/on/host:/var/mysql/mysql -d mysql
- docker run --mount 命令用于将主机上的特定目录或文件挂载到正在运行的 Docker 容器中。
docker run --mount type=bind,source=/mysql,target=/var/mysql mysql
存储驱动程序:
- Docker 使用存储驱动程序来管理数据的存储和访问方式。一些常见的存储驱动程序包括 AUFS、ZFS、BTRFS、Device Mapper、Overlay 和 Overlay2。
Docker Compose
Docker Compose 是一个方便的工具,它可以帮助您轻松运行和连接不同的软件服务,就像它们都是同一个事件的一部分一样。
Docker Compose基础知识:
-
运行单个容器:
- 通常情况下,您可以像这样运行单独的 Docker 容器:
docker run mmumshad/simple-webapp docker run mongodb docker run redis:alpine docker run ansible -
Docker Compose 文件(
docker-compose.yml):- Docker Compose 允许您在一个简单的文件中定义所有这些服务:
# docker-compose.yml version: '3' services: web: image: 'mmumshad/simple-webapp' database: image: 'mongodb' messaging: image: 'redis:alpine' orchestration: image: 'ansible'
- 此文件描述了您要运行的服务(
web,,,database),它们各自的镜像,以及任何其他配置。messagingorchestration
-
使用 Docker Compose 运行:
- 同时启动所有这些服务:
docker-compose up
- Docker Compose 会负责启动
docker-compose.yml文件中定义的所有容器。
-
使用 Docker Compose 构建:
- 您还可以使用 Docker Compose 构建镜像:
docker-compose build
- 此命令构建文件中指定的图像
docker-compose.yml。
运行链接容器:
-
如果要运行带有链接的独立容器:
docker run -d --name redis redis docker run --name voting-app -p 5000:80 --link redis:redis voting-app docker run --name result-app -p 5001:80 --link db:db result-app docker run -d --name worker --link db:db --link redis:redis worker -
在 Docker Compose 中:
# docker-compose.yml version: '3' services: vote: image: 'voting-app' ports: - '5000:80' links: - 'redis:redis' result: image: 'result-app' ports: - '5001:80' links: - 'db:db' worker: image: 'worker' links: - 'db:db' - 'redis:redis' db: image: 'db' redis: image: 'redis'
Docker Compose 允许你将整个应用程序堆栈描述在一个文件中,从而轻松管理、运行和连接不同的服务。这就像把活动的所有任务都写在一个计划里,然后 Docker Compose 会为你处理所有设置。
Docker Compose 概述
Docker Compose 文档
Docker 镜像仓库
Docker 镜像仓库是一个供人们存储和共享 Docker 镜像的地方,方便其他人使用和运行他们的软件。它就像一个大型在线程序库,可以轻松下载并在不同的计算机上使用。
Docker 镜像仓库基础知识:
-
公共登记处:
- Docker镜像可以存储在Docker Hub等公共镜像仓库中并进行共享。
- 例子:
docker pull nginx -
私人登记处:
- 有时,您可能希望将图片保存在您自己的私有存储库中。
- 例子:
- 登录私有注册表:
bash
docker login private-registry.io
- Run a container from an image in the private registry:
```bash
docker run private-registry.io/apps/internal-app
```
- 部署您自己的私有注册表:
- 您可以为您的团队或公司部署自己的私有注册表。
- 例子:
- 在您的计算机上运行私有注册表:
docker run -d -p 5000:5000 --name registry registry:2
```
{% endraw %}
- Tag your image for the private registry:
{% raw %}
bash
docker image tag my-image localhost:5000/my-image
- Push the image to your private registry:
bash
docker push localhost:5000/my-image
```
- Pull the image from your private registry:
bash
docker pull localhost:5000/my-image
-
从远程私有注册表拉取镜像:
- 您还可以使用 IP 地址或域名从远程私有镜像仓库拉取镜像。
- 例子:
docker pull 192.168.56.100:5000/my-image
Docker 镜像仓库就像一个存储空间,人们可以在这里保存和共享 Docker 镜像。你可以使用公共镜像仓库来存储常用镜像,也可以根据自身需求搭建私有镜像仓库。它就像一个专门用于共享和存储软件蓝图(镜像)的库。
Docker 引擎
想象一下,你有一个神奇的盒子(Docker Engine),它可以为你运行和管理各种程序(容器)。Docker Engine 就像这个神奇盒子的大脑。
-
Docker守护进程:
- 守护精灵就像魔法盒的看守人。它时刻都在,准备接受指令,确保一切顺利运行。
-
REST API:
- 把 REST API 想象成一套规则,它让你能够与这个神奇的盒子对话。它就像一种你和守护进程用来沟通的语言。你告诉守护进程该做什么,它就能理解,因为你们说的是同一种语言。
-
Docker CLI(命令行界面):
- Docker CLI 就像一根魔法棒,用来指挥 Docker 守护进程。你输入命令,守护进程就会执行你的指令。这就像念“阿布拉卡达布拉”咒语一样,让事情发生。
连接到远程 Docker 引擎:
连接到远程 Docker 引擎允许您控制另一台机器上的容器,并且设置约束可确保容器仅使用指定的资源。
-
Docker 主机 IP:
- 您可以使用 IP 地址和端口连接到另一台机器上的 Docker 引擎。
- 例子:
docker -H=remote-docker-engine:2375 run nginx
- 这会指示本地 Docker CLI 与远程 Docker 引擎通信。
-
运行带约束的容器:
- Docker 允许您为容器设置资源限制,例如 CPU 和内存限制。
- 例子:
docker run --cpus=0.5 ubuntu docker run --memory=100m ubuntu
- 这些命令将容器限制为仅使用半个 CPU 核心和 100 兆字节的内存。
当然,我们来简化一下PID命名空间的概念:
命名空间 PID:
PID 命名空间允许你在容器中为进程(如程序或任务)创建一个单独的区域,这样它们就有了自己的一组“票号”(进程 ID),不会与容器外的进程冲突。
示例代码:
- 使用主机 PID 命名空间运行容器:
- 这意味着容器与主机共享相同的“票号”。
docker run --pid=host ubuntu
- 使用隔离的 PID 命名空间运行容器:
- 这意味着容器拥有自己独立的一组“票号”,与主机上的票号不同。
docker run --pid=container ubuntu
在第一个例子中,容器与进程的交互方式如同它与宿主机处于同一空间。在第二个例子中,容器拥有自己独立的进程空间。这就像在大型活动中拥有一个专属区域,你的团队拥有自己的一套票号,可以独立于其他参与者进行活动。
容器化概念:
-
进程 ID 命名空间:
- 容器拥有自己独立的进程 ID (PID) 空间,因此容器内的进程与容器外的进程是分开的。
- 例子:
docker run --pid=host ubuntu
- This command runs a container with the host's PID namespace, so it shares the same processes.
-
网络命名空间:
- 容器也拥有自己独立的网络命名空间,这意味着它们可以拥有自己的网络配置。
- 例子:
docker run --net=host nginx
- This command runs a container with the host's network namespace.
-
Unix 分时命名空间:
- 该命名空间允许容器拥有自己的时间视图,与主机和其他容器的时间视图分开。
- 例子:
docker run --uts=host ubuntu
- This command runs a container with the host's Unix time sharing namespace.
-
进程间挂载命名空间:
- 挂载命名空间隔离文件系统,允许容器拥有自己的文件系统视图。
- 例子:
docker run --mount=type=bind,source=/host/folder,target=/container/folder ubuntu
- This command mounts a folder from the host into the container.
当然可以!让我们简化一下 cgroups 的概念:
C组:
cgroups(控制组)有助于管理和分配系统资源,例如 CPU 和内存,使其在不同的进程或容器之间共享。它们确保没有单个进程或容器会占用所有可用资源,从而保持资源平衡。
示例代码:
- 使用 Cgroups 设置 CPU 限制:
- 这就像说派对上的每个客人只能吃一定量的食物一样。
docker run --cpus=0.5 ubuntu
- 这样就限制了容器只能使用半个 CPU 核心。
- 使用 Cgroups 设置内存限制:
- 这就像说每个客人只能在舞池中占用一定面积的空间一样。
docker run --memory=100m ubuntu
- 这样就将容器限制为只能使用 100 兆字节的内存。
Docker Engine 概述
使用 Docker Engine API 进行开发
运行时指标
Linux容器和Windows容器的概念:
Linux 容器(默认):
Linux 容器是一种将软件及其所需的一切打包和运行的方式,它们在运行 Linux 的计算机上最为适用。
Windows 容器:
Windows 容器是一种打包和运行软件的方式,就像 Linux 容器一样,但它们是为在运行 Windows 的计算机上运行而设计的。
Windows容器基础知识:
-
容器类型:
- Windows 容器主要分为两种类型:Windows Server Core 和 Nano Server。
- Windows Server Core:可以把它看作是一个功能更全面的容器,适用于各种应用程序。
- Nano Server:可以把它看作是一个轻量级容器,专为特定的、极简的用例而设计。
- Windows 容器主要分为两种类型:Windows Server Core 和 Nano Server。
-
基础图像:
- 基础图像就像创建容器时使用的空白画布。
- 例子:
docker pull mcr.microsoft.com/windows/servercore:ltsc2019 - 基础图像就像创建容器时使用的空白画布。
- This command pulls the Windows Server Core base image.
- Example:
```bash
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2019
```
- This command pulls the Nano Server base image.
- 支持的环境:
- Windows 容器可以在特定版本的 Windows 操作系统上运行。
- 例子:
- 您可以在 Windows Server 2016 上运行 Windows 容器。
- Windows 容器可以在特定版本的 Windows 操作系统上运行。
- Example:
- You can run Windows containers on Windows 10 Professional and Enterprise, with Hyper-V Isolated Containers for additional isolation.
容器编排
容器编排是一种管理和协调多个容器的方法,确保它们能够无缝协作来运行应用程序,就像一个超级智能的经理确保所有机器人协同工作来建造一座完美的塔一样。
为什么要进行管弦乐编曲?
-
多项任务,一位经理:
- 想象一下,你有许多机器人(容器)执行不同的任务。编排就像拥有一个超级智能的管理者(编排器),他告诉每个机器人该做什么,并确保一切顺利进行。
-
一致性:
- 流程编排确保所有任务每次都以相同的方式完成。这就像给机器人制定了一套指令,确保它们行动的一致性。
-
效率:
- 流程编排有助于优化任务,确保资源(例如时间和材料)得到高效利用。这就像一位经理确保所有机器人协同工作,避免能源浪费。
-
规模:
- 当需要完成更多工作时,编排功能可以轻松创建额外的机器人(容器)。这就像在任务繁重时神奇地召唤更多机器人来帮忙一样。
-
可靠性:
- 编排机制确保任务能够可靠地完成,即使某个机器人(容器)发生故障。它就像一个备用方案,确保无论发生什么情况,任务都能完成。
-
协调:
- 编排系统负责协调各项任务,确保机器人无缝协作。这就像经理确保每个机器人都清楚自己的角色,并协同合作以实现总体目标。
容器编排代码:
# Create a Docker service with 100 replicas (instances) of a Node.js application
docker service create --replicas 100 --name my-nodejs-app nodejs
在这个例子中:
-
docker service create:此命令告诉 Docker 创建一个服务,该服务是一组正在运行的容器。 -
--replicas 100此标志指定您希望服务拥有 100 个实例(副本)。 -
--name my-nodejs-app此标志为您的服务指定一个名称,在本例中为“my-nodejs-app”。 -
nodejs这是你的Node.js应用程序的蓝图或配方。它就像烘焙纸杯蛋糕的蓝图一样。
所以,这段简单的代码就像是告诉你的神奇厨师助手(Docker Swarm)创建 100 个 Node.js 应用程序的副本,确保有大量容器正在运行并随时准备提供服务。
Docker Swarm
Docker Swarm 是一款工具,它能够协调和管理一组计算机(节点),使它们像机器人团队一样协同工作,从而以协调的方式部署和运行多个容器。它就像一个首席机器人经理,确保所有机器人共同构建出宏伟而令人惊叹的成果。
设置 Docker Swarm:
- 集群管理器:
- 想象一下,你有一个领导团队的首席机器人(集群管理器)。首席机器人决定需要做什么,并指导其他机器人(节点)如何协同工作。
# Initiate Docker Swarm on the Swarm Manager
docker swarm init
- 节点工作器:
- 现在,您已经准备好了工作机器人(节点工作机器人),它们可以加入团队了。集群管理器会分享一个特殊的代码(令牌)来邀请它们一起工作。
# Join a Node Worker to the Docker Swarm
docker swarm join --token <token> <Swarm Manager IP>
Docker Swarm 服务:
现在你们已经有了一个协调一致的团队,你们想创造一项服务,比如用你们的机器人团队建造高塔:
# Create a Docker service (a group of containers) with 3 replicas (instances)
docker service create --replicas 3 --network frontend --name my-web-server my-web-image
-
--replicas 3此标志告诉 Docker 创建服务的三个实例(副本)。 -
--network frontend此标志指定您的服务属于名为“frontend”的网络。 -
--name my-web-server这会给你的服务命名,在本例中为“my-web-server”。 -
my-web-image这是你的Web服务器的蓝图或蓝图,就像建造高塔的配方一样。
您组建了一支机器人团队,包括一个主控机器人(集群管理器)和若干工作机器人(节点工作机器人)。然后,您指示它们构建一个运行 Web 服务器应用程序的服务(一组容器)。主控机器人负责确保创建三个 Web 服务器副本并将其连接到“前端”网络。这就像有一个主控机器人经理,在工作机器人的协助下监督多个塔楼(容器)的建造。
好了,这篇文章就到这里。如果您对此或其他任何方面有任何疑问,请随时在下方评论区留言,或者通过Instagram、Facebook或Twitter
告诉我。
感谢阅读本文,我们下篇文章再见!❤️
文章来源:https://dev.to/abhixsh/docker-for-the-absolute-beginner-3h1p











