Fix words

This commit is contained in:
Baohua Yang
2026-01-10 22:39:51 -08:00
parent e08a34bcdf
commit 8bdb8406f9
36 changed files with 346 additions and 186 deletions

View File

@@ -1,11 +1,11 @@
# Docker 从入门到实践
[![](https://img.shields.io/github/stars/yeasy/docker_practice.svg?style=social&label=Stars)](https://github.com/yeasy/docker_practice) [![](https://img.shields.io/github/release/yeasy/docker_practice/all.svg)](https://github.com/yeasy/docker_practice/releases) [![](https://img.shields.io/badge/Based-Docker%20CE%20v20.10-blue.svg)](https://github.com/docker/docker-ce) [![](https://img.shields.io/badge/Docker%20%E6%8A%80%E6%9C%AF%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E6%88%98-jd.com-red.svg)][1]
[![](https://img.shields.io/github/stars/yeasy/docker_practice.svg?style=social&label=Stars)](https://github.com/yeasy/docker_practice) [![](https://img.shields.io/github/release/yeasy/docker_practice/all.svg)](https://github.com/yeasy/docker_practice/releases) [![](https://img.shields.io/badge/Based-Docker%20CE%20v27.x-blue.svg)](https://github.com/docker/docker-ce) [![](https://img.shields.io/badge/Docker%20%E6%8A%80%E6%9C%AF%E5%85%A5%E9%97%A8%E4%B8%8E%E5%AE%9E%E6%88%98-jd.com-red.svg)][1]
**v1.3.1**
**v1.4.0**
| 语言 | - |
| :------------- | :--- |
| :----------------------------------------------- | :------------------------------------------------- |
| [简体中文](https://github.com/yeasy/docker_practice) | [阅读](https://vuepress.mirror.docker-practice.com/) |
[Docker](https://www.docker.com) 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker可以让应用的部署、测试和分发都变得前所未有的高效和轻松
@@ -52,7 +52,9 @@ Docker 自身仍在快速发展中,生态环境也在蓬勃成长。建议初
* QQ VII 已满252403484
* QQ VIII已满544818750
* QQ IX 已满571502246
* QQ X 可加145983035
* QQ X 已满145983035
建议前往 [Github Discussions](https://github.com/yeasy/docker_practice/discussions) 进行技术交流。
>如果有容器技术相关的疑问请通过 [Issues](https://github.com/yeasy/docker_practice/issues/new/choose) 来提出。

View File

@@ -6,6 +6,7 @@
* [Docker 简介](introduction/README.md)
* [什么是 Docker](introduction/what.md)
* [为什么要用 Docker](introduction/why.md)
* [基本概念](basic_concept/README.md)
* [镜像](basic_concept/image.md)
* [容器](basic_concept/container.md)
@@ -18,7 +19,7 @@
* [Raspberry Pi](install/raspberry-pi.md)
* [Linux 离线安装](install/offline.md)
* [macOS](install/mac.md)
* [Windows 10](install/windows.md)
* [Windows 10/11](install/windows.md)
* [镜像加速器](install/mirror.md)
* [开启实验特性](install/experimental.md)
* [使用镜像](image/README.md)
@@ -63,24 +64,14 @@
* [数据卷](data_management/volume.md)
* [挂载主机目录](data_management/bind-mounts.md)
* [网络配置](network/README.md)
* [快速配置指南](network/quick_guide.md)
* [外部访问容器](network/port_mapping.md)
* [容器访问控制](network/access_control.md)
* [端口映射实现](network/port_mapping.md)
* [配置 docker0 网桥](network/docker0.md)
* [自定义网桥](network/bridge.md)
* [编辑网络配置文件](network/config_file.md)
* [配置 DNS](network/dns.md)
* [配置 HTTP/HTTPS 网络代理](network/http_https_proxy.md)
* [工具和示例](network/example.md)
* [实例创建一个点到点连接](network/ptp.md)
* [外部访问容器](network/port_mapping.md)
* [Docker Buildx](buildx/README.md)
* [BuildKit](buildx/buildkit.md)
* [使用 buildx 构建镜像](buildx/buildx.md)
* [使用 buildx 构建多种系统架构支持的 Docker 镜像](buildx/multi-arch-images.md)
* [Docker Compose](compose/README.md)
* [简介](compose/introduction.md)
* [Compose v2](compose/v2.md)
* [安装与卸载](compose/install.md)
* [使用](compose/usage.md)
* [命令说明](compose/commands.md)

View File

@@ -118,7 +118,7 @@ RUN apt-get update && apt-get install -y \
`apt-get update` 放在一条单独的 `RUN` 声明中会导致缓存问题以及后续的 `apt-get install` 失败比如假设你有一个 `Dockerfile` 文件
```docker
FROM ubuntu:18.04
FROM ubuntu:24.04
RUN apt-get update
@@ -128,7 +128,7 @@ RUN apt-get install -y curl
构建镜像后所有的层都在 Docker 的缓存中假设你后来又修改了其中的 `apt-get install` 添加了一个包
```docker
FROM ubuntu:18.04
FROM ubuntu:24.04
RUN apt-get update

View File

@@ -14,19 +14,29 @@
$ docker run --name mongo -d mongo
```
使用其他应用连接到容器可以用
使用其他应用连接到容器首先创建网络
```bash
$ docker run --name some-app --link some-mongo:mongo -d application-that-uses-mongo
$ docker network create my-mongo-net
```
然后启动 MongoDB 容器
```bash
$ docker run --name some-mongo -d --network my-mongo-net mongo
```
最后启动应用容器
```bash
$ docker run --name some-app -d --network my-mongo-net application-that-uses-mongo
```
或者通过 `mongo`
```bash
$ docker run -it --rm \
--link some-mongo:mongo \
--network my-mongo-net \
mongo \
sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/test"'
sh -c 'exec mongo "some-mongo:27017/test"'
```
```
## Dockerfile

View File

@@ -16,19 +16,31 @@ $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql
之后就可以使用其它应用来连接到该容器
首先创建网络
```bash
$ docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql
$ docker network create my-mysql-net
```
然后启动 MySQL 容器
```bash
$ docker run --name some-mysql -d --network my-mysql-net -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql
```
最后启动应用容器
```bash
$ docker run --name some-app -d --network my-mysql-net application-that-uses-mysql
```
或者通过 `mysql` 命令行连接
```bash
$ docker run -it --rm \
--link some-mysql:mysql \
--network my-mysql-net \
mysql \
sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
sh -c 'exec mysql -hsome-mysql -P3306 -uroot -pmysecretpassword'
```
## Dockerfile
请到 https://github.com/docker-library/docs/tree/master/mysql 查看

View File

@@ -22,19 +22,28 @@ $ docker run --name some-redis -d -p 6379:6379 redis redis-server --appendonly y
默认数据存储位置在 `VOLUME/data`可以使用 `--volumes-from some-volume-container` `-v /docker/host/dir:/data` 将数据存放到本地
使用其他应用连接到容器可以用
使用其他应用连接到容器首先创建网络
```bash
$ docker run --name some-app --link some-redis:redis -d application-that-uses-redis
$ docker network create my-redis-net
```
然后启动 redis 容器
```bash
$ docker run --name some-redis -d --network my-redis-net redis
```
最后启动应用容器
```bash
$ docker run --name some-app -d --network my-redis-net application-that-uses-redis
```
或者通过 `redis-cli`
```bash
$ docker run -it --rm \
--link some-redis:redis \
--network my-redis-net \
redis \
sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"'
sh -c 'exec redis-cli -h some-redis'
```
## Dockerfile

View File

@@ -10,15 +10,28 @@
启动容器需要 MySQL 的支持默认端口为 `80`
首先创建网络
```bash
$ docker run --name some-wordpress --link some-mysql:mysql -d wordpress
$ docker network create my-wordpress-net
```
启动 MySQL 容器
```bash
$ docker run --name some-mysql -d --network my-wordpress-net -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql
```
启动 WordPress 容器
```bash
$ docker run --name some-wordpress -d --network my-wordpress-net -e WORDPRESS_DB_HOST=some-mysql -e WORDPRESS_DB_PASSWORD=mysecretpassword wordpress
```
启动 WordPress 容器时可以指定的一些环境变量包括
* `WORDPRESS_DB_USER` 缺省为 `root`
* `WORDPRESS_DB_PASSWORD` 缺省为连接 mysql 容器的环境变量 `MYSQL_ROOT_PASSWORD` 的值
* `WORDPRESS_DB_NAME` 缺省为 `wordpress`
* `WORDPRESS_DB_HOST`: MySQL 服务的主机名
* `WORDPRESS_DB_USER`: MySQL 数据库的用户名
* `WORDPRESS_DB_PASSWORD`: MySQL 数据库的密码
* `WORDPRESS_DB_NAME`: WordPress 要使用的数据库名
## Dockerfile

View File

@@ -20,7 +20,8 @@
## 技术交流
* Docker 邮件列表 https://groups.google.com/forum/#!forum/docker-user
* Docker IRC 频道https://chat.freenode.net#docker
* Docker 社区 Slackhttps://dockercommunity.slack.com/
* Docker Community Discord: https://discord.gg/docker
* Docker Twitter 主页https://twitter.com/docker
## 其它

View File

@@ -1,8 +1,9 @@
# 基本概念
**Docker** 包括三个基本概念
* **镜像**`Image`
* **容器**`Container`
* **仓库**`Repository`
**Docker** 包括三个基本概念
* **镜像**`Image`Docker 镜像是一个特殊的文件系统除了提供容器运行时所需的程序资源配置等文件外还包含了一些为运行时准备的一些配置参数如匿名卷环境变量用户等镜像不包含任何动态数据其内容在构建之后也不会被改变
* **容器**`Container`镜像`Image`和容器`Container`的关系就像是面向对象程序设计中的 `` `实例` 一样镜像是静态的定义容器是镜像运行时的实体容器可以被创建启动停止删除暂停等
* **仓库**`Repository`镜像构建完成后可以很容易的在当前宿主机上运行但是如果需要在其它服务器上使用这个镜像我们就需要一个集中的存储分发镜像的服务Docker Registry 就是这样的服务
理解了这三个概念就理解了 **Docker** 的整个生命周期

View File

@@ -1,6 +1,6 @@
# Docker 镜像
我们都知道操作系统分为 **内核** **用户空间**对于 `Linux` 而言内核启动后会挂载 `root` 文件系统为其提供用户空间支持 **Docker 镜像**`Image`就相当于是一个 `root` 文件系统比如官方镜像 `ubuntu:18.04` 就包含了完整的一套 Ubuntu 18.04 最小系统的 `root` 文件系统
我们都知道操作系统分为 **内核** **用户空间**对于 `Linux` 而言内核启动后会挂载 `root` 文件系统为其提供用户空间支持 **Docker 镜像**`Image`就相当于是一个 `root` 文件系统比如官方镜像 `ubuntu:24.04` 就包含了完整的一套 Ubuntu 24.04 最小系统的 `root` 文件系统
**Docker 镜像** 是一个特殊的文件系统除了提供容器运行时所需的程序资源配置等文件外还包含了一些为运行时准备的一些配置参数如匿名卷环境变量用户等镜像 **不包含** 任何动态数据其内容在构建之后也不会被改变

View File

@@ -6,7 +6,7 @@
通常一个仓库会包含同一个软件不同版本的镜像而标签就常用于对应该软件的各个版本我们可以通过 `<仓库名>:<标签>` 的格式来指定具体是这个软件哪个版本的镜像如果不给出标签将以 `latest` 作为默认标签
[Ubuntu 镜像](https://hub.docker.com/_/ubuntu) 为例,`ubuntu` 是仓库的名字,其内包含有不同的版本标签,如,`16.04`, `18.04`。我们可以通过 `ubuntu:16.04`,或者 `ubuntu:18.04` 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 `ubuntu`,那将视为 `ubuntu:latest`。
[Ubuntu 镜像](https://hub.docker.com/_/ubuntu) 为例,`ubuntu` 是仓库的名字,其内包含有不同的版本标签,如,`22.04`, `24.04`。我们可以通过 `ubuntu:22.04`,或者 `ubuntu:24.04` 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 `ubuntu`,那将视为 `ubuntu:latest`。
仓库名经常以 *两段式路径* 形式出现比如 `jwilder/nginx-proxy`前者往往意味着 Docker Registry 多用户环境下的用户名后者则往往是对应的软件名但这并非绝对取决于所使用的具体 Docker Registry 的软件或服务

View File

@@ -145,9 +145,9 @@ $ ssh-add ~/.ssh/id_rsa
$ docker build -t test --ssh default=$SSH_AUTH_SOCK .
```
## docker-compose build 使用 Buildkit
## docker compose build 使用 Buildkit
设置 `COMPOSE_DOCKER_CLI_BUILD=1` 环境变量即可使用
设置 `COMPOSE_DOCKER_CLI_BUILD=1` `DOCKER_BUILDKIT=1` 环境变量即可使用
## 官方文档

View File

@@ -10,6 +10,8 @@ CentOSCommunity Enterprise Operating System中文意思是社区企业
### 使用 CentOS 官方镜像
**注意CentOS 8 已于 2021 12 31 日停止维护EOL对于新部署推荐使用 CentOS Stream Rocky LinuxAlmaLinux 等替代发行版**
使用 `docker run` 直接运行 `CentOS 7` 镜像并登录 `bash`
```bash
@@ -33,7 +35,6 @@ CentOS Linux release 7.9.2009 (Core)
使用 `docker run` 命令直接运行 `Fedora` 官方镜像并登录 `bash`
```bash
$ docker run -it fedora bash
Unable to find image 'fedora:latest' locally
latest: Pulling from library/fedora
@@ -41,8 +42,8 @@ latest: Pulling from library/fedora
Digest: sha256:64a02df6aac27d1200c2572fe4b9949f1970d05f74d367ce4af994ba5dc3669e
Status: Downloaded newer image for fedora:latest
[root@196ca341419b /]# cat /etc/redhat-release
Fedora release 24 (Twenty Four)
```
Fedora release 39 (Thirty Nine)
## 相关资源

View File

@@ -1,7 +1,22 @@
# 简介
目前与容器相关的云计算主要分为种类型
随着容器技术的普及目前主流的云计算服务商都提供了成熟的容器服务与容器相关的云计算服务主要分为以下几种类型
一种是传统的 IaaS 服务商提供对容器相关的服务包括镜像下载容器托管等
## 1. 容器编排托管服务 (Managed K8s)
另一种是直接基于容器技术对外提供容器云服务所谓 Container as a ServiceCaaS
这是目前最主流的形式云厂商托管 Kubernetes 的控制平面Master节点用户只需管理工作节点Worker Node
* **优势**降低了 Kubernetes 集群的维护成本高可用性由厂商保证
* **典型服务**AWS EKS, Azure AKS, Google GKE, 阿里云 ACK, 腾讯云 TKE
## 2. 容器实例服务 (Serverless Containers)
这一类服务通常被称为 CaaS (Container as a Service)用户无需管理底层服务器EC2/CVM只需提供镜像和配置即可运行容器
* **优势**极致的弹性按秒计费零运维
* **典型服务**AWS Fargate, Azure Container Instances, Google Cloud Run, 阿里云 ECI
## 3. 镜像仓库服务 (Container Registry)
提供安全可靠的私有 Docker 镜像存储服务通常与云厂商的 CI/CD 流水线深度集成
* **典型服务**AWS ECR, Azure ACR, Google GCR/GAR, 阿里云 ACR
本章将介绍如何在几个主流云平台上使用 Docker Kubernetes 服务

View File

@@ -4,12 +4,12 @@
对于 Compose 来说大部分命令的对象既可以是项目本身也可以指定为项目中的服务或者容器如果没有特别的说明命令对象将是项目这意味着项目中所有的服务都会受到命令影响
执行 `docker-compose [COMMAND] --help` 或者 `docker-compose help [COMMAND]` 可以查看具体某个命令的使用格式
执行 `docker compose [COMMAND] --help` 或者 `docker compose help [COMMAND]` 可以查看具体某个命令的使用格式
`docker-compose` 命令的基本的使用格式是
`docker compose` 命令的基本的使用格式是
```bash
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
```
## 命令选项
@@ -26,13 +26,13 @@ docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
### `build`
格式为 `docker-compose build [options] [SERVICE...]`
格式为 `docker compose build [options] [SERVICE...]`
构建重新构建项目中的服务容器
服务容器一旦构建后将会带上一个标记名例如对于 web 项目中的一个 db 容器可能是 web_db
可以随时在项目目录下运行 `docker-compose build` 来重新构建服务
可以随时在项目目录下运行 `docker compose build` 来重新构建服务
选项包括
@@ -64,19 +64,19 @@ docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
### `kill`
格式为 `docker-compose kill [options] [SERVICE...]`
格式为 `docker compose kill [options] [SERVICE...]`
通过发送 `SIGKILL` 信号来强制停止服务容器
支持通过 `-s` 参数来指定发送的信号例如通过如下指令发送 `SIGINT` 信号
```bash
$ docker-compose kill -s SIGINT
$ docker compose kill -s SIGINT
```
### `logs`
格式为 `docker-compose logs [options] [SERVICE...]`
格式为 `docker compose logs [options] [SERVICE...]`
查看服务容器的输出默认情况下docker-compose 将对不同的服务输出使用不同的颜色来区分可以通过 `--no-color` 来关闭颜色
@@ -84,13 +84,13 @@ $ docker-compose kill -s SIGINT
### `pause`
格式为 `docker-compose pause [SERVICE...]`
格式为 `docker compose pause [SERVICE...]`
暂停一个服务容器
### `port`
格式为 `docker-compose port [options] SERVICE PRIVATE_PORT`
格式为 `docker compose port [options] SERVICE PRIVATE_PORT`
打印某个容器端口所映射的公共端口
@@ -102,7 +102,7 @@ $ docker-compose kill -s SIGINT
### `ps`
格式为 `docker-compose ps [options] [SERVICE...]`
格式为 `docker compose ps [options] [SERVICE...]`
列出项目中目前的所有容器
@@ -112,7 +112,7 @@ $ docker-compose kill -s SIGINT
### `pull`
格式为 `docker-compose pull [options] [SERVICE...]`
格式为 `docker compose pull [options] [SERVICE...]`
拉取服务依赖的镜像
@@ -126,7 +126,7 @@ $ docker-compose kill -s SIGINT
### `restart`
格式为 `docker-compose restart [options] [SERVICE...]`
格式为 `docker compose restart [options] [SERVICE...]`
重启项目中的服务
@@ -136,9 +136,9 @@ $ docker-compose kill -s SIGINT
### `rm`
格式为 `docker-compose rm [options] [SERVICE...]`
格式为 `docker compose rm [options] [SERVICE...]`
删除所有停止状态的服务容器推荐先执行 `docker-compose stop` 命令来停止容器
删除所有停止状态的服务容器推荐先执行 `docker compose stop` 命令来停止容器
选项
@@ -147,14 +147,14 @@ $ docker-compose kill -s SIGINT
* `-v` 删除容器所挂载的数据卷
### `run`
格式为 `docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]`
格式为 `docker compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]`
在指定服务上执行一个命令
例如
```bash
$ docker-compose run ubuntu ping docker.com
$ docker compose run ubuntu ping docker.com
```
将会启动一个 ubuntu 服务容器并执行 `ping docker.com` 命令
@@ -172,7 +172,7 @@ $ docker-compose run ubuntu ping docker.com
如果不希望自动启动关联的容器可以使用 `--no-deps` 选项例如
```bash
$ docker-compose run --no-deps web python manage.py shell
$ docker compose run --no-deps web python manage.py shell
```
将不会启动 web 容器所关联的其它容器
@@ -201,14 +201,14 @@ $ docker-compose run --no-deps web python manage.py shell
### `scale`
格式为 `docker-compose scale [options] [SERVICE=NUM...]`
格式为 `docker compose scale [options] [SERVICE=NUM...]`
设置指定服务运行的容器个数
通过 `service=num` 的参数来设置数量例如
```bash
$ docker-compose scale web=3 db=2
$ docker compose scale web=3 db=2
```
将启动 3 个容器运行 web 服务2 个容器运行 db 服务
@@ -221,15 +221,15 @@ $ docker-compose scale web=3 db=2
### `start`
格式为 `docker-compose start [SERVICE...]`
格式为 `docker compose start [SERVICE...]`
启动已经存在的服务容器
### `stop`
格式为 `docker-compose stop [options] [SERVICE...]`
格式为 `docker compose stop [options] [SERVICE...]`
停止已经处于运行状态的容器但不删除它通过 `docker-compose start` 可以再次启动这些容器
停止已经处于运行状态的容器但不删除它通过 `docker compose start` 可以再次启动这些容器
选项
@@ -241,13 +241,13 @@ $ docker-compose scale web=3 db=2
### `unpause`
格式为 `docker-compose unpause [SERVICE...]`
格式为 `docker compose unpause [SERVICE...]`
恢复处于暂停状态中的服务
### `up`
格式为 `docker-compose up [options] [SERVICE...]`
格式为 `docker compose up [options] [SERVICE...]`
该命令十分强大它将尝试自动完成包括构建镜像重新创建服务启动服务并关联服务相关容器的一系列操作
@@ -255,13 +255,13 @@ $ docker-compose scale web=3 db=2
可以说大部分时候都可以直接通过该命令来启动一个项目
默认情况`docker-compose up` 启动的容器都在前台控制台将会同时打印所有容器的输出信息可以很方便进行调试
默认情况`docker compose up` 启动的容器都在前台控制台将会同时打印所有容器的输出信息可以很方便进行调试
当通过 `Ctrl-C` 停止命令时所有容器将会停止
如果使用 `docker-compose up -d`将会在后台启动并运行所有的容器一般推荐生产环境下使用该选项
如果使用 `docker compose up -d`将会在后台启动并运行所有的容器一般推荐生产环境下使用该选项
默认情况如果服务容器已经存在`docker-compose up` 将会尝试停止容器然后重新创建保持使用 `volumes-from` 挂载的卷以保证新启动的服务匹配 `docker-compose.yml` 文件的最新内容如果用户不希望容器被停止并重新创建可以使用 `docker-compose up --no-recreate`这样将只会启动处于停止状态的容器而忽略已经运行的服务如果用户只想重新部署某个服务可以使用 `docker-compose up --no-deps -d <SERVICE_NAME>` 来重新创建服务并后台停止旧服务启动新服务并不会影响到其所依赖的服务
默认情况如果服务容器已经存在`docker compose up` 将会尝试停止容器然后重新创建保持使用 `volumes-from` 挂载的卷以保证新启动的服务匹配 `docker-compose.yml` 文件的最新内容如果用户不希望容器被停止并重新创建可以使用 `docker compose up --no-recreate`这样将只会启动处于停止状态的容器而忽略已经运行的服务如果用户只想重新部署某个服务可以使用 `docker compose up --no-deps -d <SERVICE_NAME>` 来重新创建服务并后台停止旧服务启动新服务并不会影响到其所依赖的服务
选项
@@ -281,7 +281,7 @@ $ docker-compose scale web=3 db=2
### `version`
格式为 `docker-compose version`
格式为 `docker compose version`
打印版本信息

View File

@@ -5,7 +5,7 @@
默认的模板文件名称为 `docker-compose.yml`格式为 YAML 格式
```yaml
version: "3"
version: "3" # 在 Compose V2 中version 字段已成为可选,且推荐不再使用。
services:
webapp:
@@ -306,7 +306,7 @@ labels:
## `links`
>注意不推荐使用该指令
>注意不推荐使用该指令容器之间应通过 Docker 网络networks进行互联
## `logging`

View File

@@ -49,10 +49,10 @@ services:
查看 [`docker-compose.yml` 章节](compose_file.md) 了解更多详细的工作机制
现在我们就可以使用 `docker-compose run` 命令启动一个 `Django` 应用了
现在我们就可以使用 `docker compose run` 命令启动一个 `Django` 应用了
```bash
$ docker-compose run web django-admin startproject django_example .
$ docker compose run web django-admin startproject django_example .
```
由于 web 服务所使用的镜像并不存在所以 Compose 会首先使用 `Dockerfile` web 服务构建一个镜像接着使用这个镜像在容器里运行 `django-admin startproject django_example` 指令
@@ -85,10 +85,10 @@ DATABASES = {
}
```
这些信息是在 [postgres](https://hub.docker.com/_/postgres/) 镜像固定设置好的。然后,运行 `docker-compose up`
这些信息是在 [postgres](https://hub.docker.com/_/postgres/) 镜像固定设置好的。然后,运行 `docker compose up`
```bash
$ docker-compose up
$ docker compose up
django_db_1 is up-to-date
Creating django_web_1 ...
@@ -113,8 +113,8 @@ web_1 | Quit the server with CONTROL-C.
这个 `Django` 应用已经开始在你的 Docker 守护进程里监听着 `8000` 端口了打开 `127.0.0.1:8000` 即可看到 `Django` 欢迎页面
你还可以在 Docker 上运行其它的管理命令例如对于同步数据库结构这种事在运行完 `docker-compose up` 在另外一个终端进入文件夹运行以下命令即可
你还可以在 Docker 上运行其它的管理命令例如对于同步数据库结构这种事在运行完 `docker compose up` 在另外一个终端进入文件夹运行以下命令即可
```bash
$ docker-compose run web python manage.py syncdb
$ docker compose run web python manage.py syncdb
```

View File

@@ -1,59 +1,46 @@
# 安装与卸载
`Compose` Docker 官方的开源项目负责实现对 Docker 容器集群的快速编排
`v2` 版本开始`Compose` 作为 `docker` 的子命令存在例如 `docker compose up`
`Compose` 支持 LinuxmacOSWindows 10 三大平台
`Compose` 可以通过 Python 的包管理工具 `pip` 进行安装也可以直接下载编译好的二进制文件使用甚至能够直接在 Docker 容器中运行
`Docker Desktop for Mac/Windows` 自带 `docker-compose` 二进制文件安装 Docker 之后可以直接使用
```bash
$ docker-compose --version
docker-compose version 1.27.4, build 40524192
```
`Docker Desktop for Mac/Windows` 自带 `docker compose` 命令
Linux 系统请使用以下介绍的方法安装
## 二进制包
## Linux
Linux 的也安装十分简单 [官方 GitHub Release](https://github.com/docker/compose/releases) 处直接下载编译好的二进制文件即可
Linux 你可以通过下载 `docker-compose` 二进制包来安装
[官方 GitHub Release](https://github.com/docker/compose/releases) 处直接下载编译好的二进制文件即可。
例如 Linux 64 位系统上直接下载对应的二进制包
```bash
$ sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 国内用户可以使用以下方式加快下载
$ sudo curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$ mkdir -p $DOCKER_CONFIG/cli-plugins
$ curl -SL https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
```
## PIP 安装
** `x86_64` 架构的 Linux 建议按照上边的方法下载二进制包进行安装如果您计算机的架构是 `ARM` (例如树莓派)再使用 `pip` 安装
这种方式是将 Compose 当作一个 Python 应用来从 pip 源中安装
执行安装命令
之后执行
```bash
$ sudo pip install -U docker-compose
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
```
可以看到类似如下输出说明安装成功
## 测试安装
```bash
Collecting docker-compose
Downloading docker-compose-1.27.4.tar.gz (149kB): 149kB downloaded
...
Successfully installed docker-compose cached-property requests texttable websocket-client docker-py dockerpty six enum34 backports.ssl-match-hostname ipaddress
$ docker compose version
Docker Compose version v2.29.1
```
## bash 补全命令
```bash
$ curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
$ curl -L https://raw.githubusercontent.com/docker/compose/v2.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
```
## 卸载
@@ -61,11 +48,5 @@ $ curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/comple
如果是二进制包方式安装的删除二进制文件即可
```bash
$ sudo rm /usr/local/bin/docker-compose
```
如果是通过 `pip` 安装的则执行如下命令即可删除
```bash
$ sudo pip uninstall docker-compose
$ rm $DOCKER_CONFIG/cli-plugins/docker-compose
```

View File

@@ -47,10 +47,10 @@ services:
- "3000:3000"
```
所有文件就绪后我们就可以通过使用 `docker-compose run` 命令生成应用的骨架了
所有文件就绪后我们就可以通过使用 `docker compose run` 命令生成应用的骨架了
```bash
$ docker-compose run web rails new . --force --database=postgresql --skip-bundle
$ docker compose run web rails new . --force --database=postgresql --skip-bundle
```
`Compose` 会先使用 `Dockerfile` web 服务创建一个镜像接着使用这个镜像在容器里运行 `rails new ` 和它之后的命令一旦这个命令运行完后应该就可以看一个崭新的应用已经生成了
@@ -73,7 +73,7 @@ gem 'therubyracer', platforms: :ruby
现在我们已经有一个新的 `Gemfile` 文件需要再重新创建镜像这个会步骤会改变 Dockerfile 文件本身所以需要重建一次
```bash
$ docker-compose build
$ docker compose build
```
应用现在就可以启动了但配置还未完成Rails 默认读取的数据库目标是 `localhost` 我们需要手动指定容器的 `db` 同样的还需要把用户名修改成和 postgres 镜像预定的一致
@@ -97,7 +97,7 @@ test:
现在就可以启动应用了
```bash
$ docker-compose up
$ docker compose up
```
如果一切正常你应该可以看到 PostgreSQL 的输出几秒后可以看到这样的重复信息
@@ -111,7 +111,7 @@ myapp_web_1 | [2014-01-17 17:16:29] INFO WEBrick::HTTPServer#start: pid=1 port=
最后 我们需要做的是创建数据库打开另一个终端运行
```bash
$ docker-compose run web rake db:create
$ docker compose run web rake db:create
```
这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了

View File

@@ -68,7 +68,67 @@ services:
### 运行 compose 项目
```bash
$ docker-compose up
$ docker compose up
```
此时访问本地 `5000` 端口每次刷新页面计数就会加 1
按下 `Ctrl-C` 停止项目
### 后台运行
```bash
$ docker compose up -d
```
### 停止
```bash
$ docker compose stop
```
### 进入服务
```bash
$ docker compose exec redis sh
/data # redis-cli
127.0.0.1:6379> get hits
"9"
```
### 查看日志
```bash
$ docker compose logs -f
```
### 构建镜像
```bash
$ docker compose build
```
### 启动服务
```bash
$ docker compose start
```
### 运行一次性命令
```bash
$ docker compose run web python app.py
```
### 验证 `docker-compose.yml`
```bash
$ docker compose config
```
### 删除项目
```bash
$ docker compose down
```

View File

@@ -1,7 +0,0 @@
# Compose V2
目前 Docker 官方用 GO 语言 [重写](https://github.com/docker/compose-cli) 了 Docker Compose并将其作为了 docker cli 的子命令,称为 `Compose V2`。你可以参照官方文档安装,然后将熟悉的 `docker-compose` 命令替换为 `docker compose`,即可使用 Docker Compose。
## 官方文档
* [Compose V2 beta](https://docs.docker.com/compose/cli-command/)

View File

@@ -48,4 +48,4 @@ volumes:
## 构建并运行项目
运行 `docker-compose up -d` Compose 就会拉取镜像再创建我们所需要的镜像然后启动 `wordpress` 和数据库容器 接着浏览器访问 `127.0.0.1:8000` 端口就能看到 `WordPress` 安装界面了
运行 `docker compose up -d` Compose 就会拉取镜像再创建我们所需要的镜像然后启动 `wordpress` 和数据库容器 接着浏览器访问 `127.0.0.1:8000` 端口就能看到 `WordPress` 安装界面了

View File

@@ -119,7 +119,7 @@ networks:
subnet: 172.16.238.0/24
```
使用 `docker-compose up` 启动集群之后使用 `docker exec` 命令登录到任一节点测试 `etcd` 集群
使用 `docker compose up` 启动集群之后使用 `docker exec` 命令登录到任一节点测试 `etcd` 集群
```bash
/ # etcdctl member list

View File

@@ -57,7 +57,7 @@ RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
既然 `RUN` 就像 Shell 脚本一样可以执行命令那么我们是否就可以像 Shell 脚本一样把每个命令对应一个 RUN 比如这样
```docker
FROM debian:stretch
FROM debian:bookworm
RUN apt-get update
RUN apt-get install -y gcc libc6-dev make wget
@@ -78,7 +78,7 @@ RUN make -C /usr/src/redis install
上面的 `Dockerfile` 正确的写法应该是这样
```docker
FROM debian:stretch
FROM debian:bookworm
RUN set -x; buildDeps='gcc libc6-dev make wget' \
&& apt-get update \

View File

@@ -16,17 +16,17 @@ $ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
比如
```bash
$ docker pull ubuntu:18.04
$ docker pull ubuntu:24.04
18.04: Pulling from library/ubuntu
92dc2a97ff99: Pull complete
be13a9d27eb8: Pull complete
c8299583700a: Pull complete
Digest: sha256:4bc3ae6596938cb0d9e5ac51a1152ec9dcac2a1c50829c74abd9c4361e321b26
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
Status: Downloaded newer image for ubuntu:24.04
docker.io/library/ubuntu:24.04
```
上面的命令中没有给出 Docker 镜像仓库地址因此将会从 Docker Hub `docker.io`获取镜像而镜像名称是 `ubuntu:18.04`因此将会获取官方镜像 `library/ubuntu` 仓库中标签为 `18.04` 的镜像`docker pull` 命令的输出结果最后一行给出了镜像的完整名称 `docker.io/library/ubuntu:18.04`
上面的命令中没有给出 Docker 镜像仓库地址因此将会从 Docker Hub `docker.io`获取镜像而镜像名称是 `ubuntu:24.04`因此将会获取官方镜像 `library/ubuntu` 仓库中标签为 `24.04` 的镜像`docker pull` 命令的输出结果最后一行给出了镜像的完整名称 `docker.io/library/ubuntu:24.04`
从下载过程中可以看到我们之前提及的分层存储的概念镜像是由多层存储所构成下载也是一层层的去下载并非单一文件下载过程中给出了每一层的 ID 的前 12 并且下载结束后给出该镜像完整的 `sha256` 的摘要以确保下载一致性
@@ -36,33 +36,33 @@ docker.io/library/ubuntu:18.04
## 运行
有了镜像后我们就能够以这个镜像为基础启动并运行一个容器以上面的 `ubuntu:18.04` 为例如果我们打算启动里面的 `bash` 并且进行交互式操作的话可以执行下面的命令
有了镜像后我们就能够以这个镜像为基础启动并运行一个容器以上面的 `ubuntu:24.04` 为例如果我们打算启动里面的 `bash` 并且进行交互式操作的话可以执行下面的命令
```bash
$ docker run -it --rm ubuntu:18.04 bash
$ docker run -it --rm ubuntu:24.04 bash
root@e7009c6ce357:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
VERSION="24.04 LTS (Noble Numbat)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
PRETTY_NAME="Ubuntu 24.04 LTS"
VERSION_ID="24.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
VERSION_CODENAME=noble
UBUNTU_CODENAME=noble
```
`docker run` 就是运行容器的命令具体格式我们会在 [容器](../container) 一节进行详细讲解我们这里简要的说明一下上面用到的参数
* `-it`这是两个参数一个是 `-i`交互式操作一个是 `-t` 终端我们这里打算进入 `bash` 执行一些命令并查看返回结果因此我们需要交互式终端
* `--rm`这个参数是说容器退出后随之将其删除默认情况下为了排障需求退出的容器并不会立即删除除非手动 `docker rm`我们这里只是随便执行个命令看看结果不需要排障和保留结果因此使用 `--rm` 可以避免浪费空间
* `ubuntu:18.04`这是指用 `ubuntu:18.04` 镜像为基础来启动容器
* `ubuntu:24.04`这是指用 `ubuntu:24.04` 镜像为基础来启动容器
* `bash`放在镜像名后的是 **命令**这里我们希望有个交互式 Shell因此用的是 `bash`
进入容器后我们可以在 Shell 下操作执行任何所需的命令这里我们执行了 `cat /etc/os-release`这是 Linux 常用的查看当前系统版本的命令从返回的结果可以看到容器内是 `Ubuntu 18.04.1 LTS` 系统
进入容器后我们可以在 Shell 下操作执行任何所需的命令这里我们执行了 `cat /etc/os-release`这是 Linux 常用的查看当前系统版本的命令从返回的结果可以看到容器内是 `Ubuntu 24.04 LTS` 系统
最后我们通过 `exit` 退出了这个容器

View File

@@ -6,7 +6,7 @@
### 系统要求
Docker 支持 64 位版本 CentOS 7/8并且要求内核版本不低于 3.10 CentOS 7 满足最低内核的要求但由于内核版本比较低部分功能 `overlay2` 存储层驱动无法使用并且部分功能可能不太稳定
Docker 支持 64 位版本 CentOS 7/8/9以及 Rocky Linux/AlmaLinux 8/9并且要求内核版本不低于 3.10 CentOS 7 满足最低内核的要求但由于内核版本比较低部分功能 `overlay2` 存储层驱动无法使用并且部分功能可能不太稳定对于 CentOS 8 及更高版本以及 Rocky Linux/AlmaLinux推荐使用 `dnf` 包管理器
### 卸载旧版本
@@ -22,7 +22,9 @@ $ sudo yum remove docker \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
docker-engine \
docker-ce-cli \
containerd.io
```
## 使用 yum 安装
@@ -30,7 +32,7 @@ $ sudo yum remove docker \
执行以下命令安装依赖包
```bash
$ sudo yum install -y yum-utils
$ sudo dnf install -y dnf-utils
```
鉴于国内网络问题强烈建议使用国内源官方源请在注释中查看
@@ -38,14 +40,14 @@ $ sudo yum install -y yum-utils
执行下面的命令添加 `yum` 软件源
```bash
$ sudo yum-config-manager \
$ sudo dnf config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
$ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/dnf.repos.d/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# $ sudo dnf config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
```
@@ -53,15 +55,15 @@ $ sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.r
如果需要测试版本的 Docker 请执行以下命令
```bash
$ sudo yum-config-manager --enable docker-ce-test
$ sudo dnf config-manager --enable docker-ce-test
```
### 安装 Docker
更新 `yum` 软件源缓存并安装 `docker-ce`
更新 `dnf` 软件源缓存并安装 `docker-ce`
```bash
$ sudo yum install docker-ce docker-ce-cli containerd.io
$ sudo dnf install docker-ce docker-ce-cli containerd.io
```
## CentOS8 额外设置

View File

@@ -2,7 +2,7 @@
## 系统要求
[Docker Desktop for Mac](https://docs.docker.com/docker-for-mac/) 要求系统最低为 macOS 必须是 10.15 或更高版本, Catalina、Big Sur 或者 Monterey建议升级到最新版本的 macOS
[Docker Desktop for Mac](https://docs.docker.com/docker-for-mac/) 要求系统最低为 macOS Monterey 12.0 或更高版本,建议升级到最新版本的 macOS如 Sonoma 或 Ventura
## 安装
@@ -42,7 +42,7 @@ $ brew install --cask docker
```bash
$ docker --version
Docker version 20.10.0, build 7287ab3
Docker version 27.2.1, build 9e34c9b
```
如果 `docker version``docker info` 都正常的话可以尝试运行一个 [Nginx 服务器](https://hub.docker.com/_/nginx/)

View File

@@ -24,7 +24,6 @@ $ for pkg in docker \
docker-engine \
docker.io \
docker-doc \
docker-compose \
podman-docker \
containerd \
runc;

View File

@@ -1,4 +1,4 @@
# Windows 10
# Windows 10/11
## 系统要求

View File

@@ -2,8 +2,22 @@
本章将带领你进入 **Docker** 的世界
什么是 **Docker**
## 本章内容
用它会带来什么样的好处
* [什么是 Docker](what.md)
* 介绍 Docker 的起源发展历程以及其背后的核心技术Cgroups, Namespaces, UnionFS
* 了解 Docker 是如何改变软件交付方式的
* [为什么要用 Docker](why.md)
* 对比传统虚拟机技术阐述 Docker 在启动速度资源利用率交付效率等方面的巨大优势
* 探讨 Docker DevOps微服务架构中的关键作用
## 学习目标
通过本章的学习你将能够
1. 理解 Docker 的核心概念与架构
2. 明白 Docker 解决了现代软件开发与运维中的哪些痛点
3. 建立起对容器技术的初步认知为后续的实战操作打下基础
好吧让我们带着问题开始这神奇之旅

View File

@@ -107,7 +107,7 @@ oom_score = 0
stream_idle_timeout = "4h0m0s"
enable_selinux = false
selinux_category_range = 1024
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5"
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"
stats_collect_period = 10
# systemd_cgroup = false
enable_tls_streaming = false
@@ -377,7 +377,7 @@ $ kubectl get node -o yaml | grep CIDR
```
```bash
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/kube-flannel.yml
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.24.0/Documentation/kube-flannel.yml
```
## master 节点默认不能运行 pod

View File

@@ -45,4 +45,4 @@ PING busybox2 (172.19.0.3): 56 data bytes
使用自定义网络容器之间可以通过容器名直接进行通信这比使用 `--link` 更加灵活和强大
接下来的部分将介绍在一些场景中Docker 所有的网络定制配置以及通过 Linux 命令来调整补充甚至替换 Docker 默认的网络配置
接下来的部分将介绍 Docker 的一些高级网络配置包括 DNS 配置和端口映射等内容

View File

@@ -1,16 +1,39 @@
# podman
[`podman`](https://github.com/containers/podman) 是一个无守护程序docker 命令兼容的下一代 Linux 容器工具。
[`podman`](https://github.com/containers/podman) 是一个无守护进程、Docker 命令高度兼容的下一代 Linux 容器工具。它由 Red Hat 开发,旨在提供一个更安全的容器运行环境。
## Podman vs Docker
| 特性 | Docker | Podman |
| :--- | :--- | :--- |
| **架构** | C/S 架构依赖守护进程 (`dockerd`) | 无守护进程 (Daemonless) |
| **权限** | 默认需要 root 权限 (虽有 Rootless 模式) | 默认支持 Rootless ( root 用户运行) |
| **生态** | 完整的生态系统 (Compose, Swarm) | 专注单机容器配合 Kubernetes 使用 |
| **镜像构建** | `docker build` | `podman build` `buildah` |
## 安装
### CentOS / RHEL
```bash
$ sudo yum -y install podman
```
### macOS
macOS 上需要安装 Podman Desktop 或通过 Homebrew 安装
```bash
$ brew install podman
$ podman machine init
$ podman machine start
```
## 使用
`podman` docker 命令完全兼容只需将 `docker` 替换为 `podman` 即可例如运行一个容器
`podman` 的命令行几乎与 `docker` 完全兼容大多数情况下只需将 `docker` 替换为 `podman` 即可
### 运行容器
```bash
# $ docker run -d -p 80:80 nginx:alpine
@@ -18,6 +41,39 @@ $ sudo yum -y install podman
$ podman run -d -p 80:80 nginx:alpine
```
### 列出容器
```bash
$ podman ps
```
### 构建镜像
```bash
$ podman build -t myimage .
```
## Pods 的概念
Docker 不同Podman 支持 "Pod" 的概念类似于 Kubernetes Pod允许你在同一个网络命名空间中运行多个容器
```bash
# 创建一个 Pod
$ podman pod create --name mypod -p 8080:80
# 在 Pod 中运行容器
$ podman run -d --pod mypod --name webbing nginx
```
## 迁移到 Podman
如果你习惯使用 `docker` 命令可以简单地设置别名
```bash
$ alias docker=podman
```
## 参考
* https://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users/
* [Podman 官方网站](https://podman.io/)
* [Podman GitHub 仓库](https://github.com/containers/podman)

View File

@@ -1,6 +1,6 @@
# Docker Hub
目前 Docker 官方维护了一个公共仓库 [Docker Hub](https://hub.docker.com/),其中已经包括了数量超过 [2,650,000](https://hub.docker.com/search/?type=image) 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
目前 Docker 官方维护了一个公共仓库 [Docker Hub](https://hub.docker.com/),其中已经包括了数量超过 [10,000,000](https://hub.docker.com/search/?type=image) 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
## 注册

View File

@@ -166,7 +166,7 @@ volumes:
## 启动
```bash
$ docker-compose up -d
$ docker compose up -d
```
这样我们就搭建好了一个具有权限认证TLS 的私有仓库接下来我们测试其功能是否正常

View File

@@ -1,8 +1,8 @@
# 使用 compose 文件
# 使用 Compose 文件
正如之前使用 `docker-compose.yml` 来一次配置启动多个容器 `Swarm` 集群中也可以使用 `compose` 文件 `docker-compose.yml` 来配置启动多个服务
正如之前使用 `compose.yml` 来一次配置启动多个容器 `Swarm` 集群中也可以使用 `compose` 文件 `compose.yml` 来配置启动多个服务
上一节中我们使用 `docker service create` 一次只能部署一个服务使用 `docker-compose.yml` 我们可以一次启动多个关联的服务
上一节中我们使用 `docker service create` 一次只能部署一个服务使用 `compose.yml` 我们可以一次启动多个关联的服务
我们以在 `Swarm` 集群中部署 `WordPress` 为例进行说明
@@ -58,14 +58,14 @@ networks:
`Swarm` 集群管理节点新建该文件其中的 `visualizer` 服务提供一个可视化页面我们可以从浏览器中很直观的查看集群中各个服务的运行节点
`Swarm` 集群中使用 `docker-compose.yml` 我们用 `docker stack` 命令下面我们对该命令进行详细讲解
`Swarm` 集群中使用 `compose.yml` 我们用 `docker stack` 命令下面我们对该命令进行详细讲解
## 部署服务
部署服务使用 `docker stack deploy`其中 `-c` 参数指定 compose 文件名
```bash
$ docker stack deploy -c docker-compose.yml wordpress
$ docker stack deploy -c compose.yml wordpress
```
现在我们打开浏览器输入 `任一节点IP:8080` 即可看到各节点运行状态如下图所示