这是来自adventofdocker.com的跨贴。
嘿,你好!恭喜你坚持到第11天了。今天我们来学习Docker Compose。在过去的几天里,我们了解了环境变量、网络和卷。我们来看看一个典型的命令,运行一个具有这些功能的容器:
docker run -d \
--name api \
--network myapp-network \
-v mydata:/data # -v (挂载卷) \
-e 秘密消息="Hello Docker!" \
-e 端口=8080 \
-p 8080:8080 # -p (端口映射) \
hello-world-go # hello-world-go (一个简单的 Go 语言示例应用)
启动容器(docker run
)并以后台模式运行(-d
)。设置容器名称为 api
,连接到 myapp-network
网络。将 mydata
卷挂载到容器内的 /data
目录,设置环境变量 秘密消息
为 "Hello Docker!"
和 端口
为 8080
,并将主机的 8080
端口映射到容器的 8080
端口。
进入全屏模式。退出全屏模式。
这可真不少需要记住和输入的!现在想象一下运行多个容器,每个容器都有自己的一套配置。这时候Docker Compose就派上用场了。
什么是 Docker Compose?Docker Compose(https://docs.docker.com/compose/)是一种工具,帮助你定义和运行多容器应用。你不再需要使用冗长的Docker命令,而是编写一个描述整个应用栈的 YAML 配置文件。
让我们把之前的设置转换成 Docker Compose 文件。创建一个新的文件,命名为 docker-compose.yml
。
services:
api:
build: .
ports:
- "8080:8080"
environment:
- SECRET_MESSAGE=Hello Docker!
- PORT=8080
volumes:
- mydata:/data
networks:
- myapp-network
volumes:
mydata:
networks:
myapp-network:
全屏模式或退出全屏
现在你可以直接运行这个命令,而不用输入那么长的Docker命令了。
docker compose up
进入全屏模式。退出全屏模式。
Docker Compose 将:
- 创建网络连接
- 创建数据卷
- 如有必要,构建镜像
- 根据所有指定的配置启动容器
全部停下来:
docker compose down # 停止并移除所有由 Docker Compose 创建的容器和网络
进入全屏 退出全屏
让我们给应用程序增加一些复杂性,我们将给应用程序添加一个数据库和一个反代。
services:
服务:
api:
API:
build: .
构建: .
ports:
端口:
- "8080:8080"
environment:
环境:
- SECRET_MESSAGE=你好 Docker!
- 端口=8080
volumes:
卷:
- mydata:/数据
networks:
网络:
- myapp网络
depends_on:
依赖:
- 数据库
db:
数据库:
image: postgres
镜像: postgres
ports:
端口:
- "5432:5432"
environment:
环境:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=myapp
volumes:
卷:
- postgres_data:/var/lib/postgresql/data
networks:
网络:
- myapp网络
nginx:
NGINX:
image: nginx
镜像: nginx
ports:
端口:
- "80:80"
networks:
网络:
- myapp网络
depends_on:
依赖:
- api
volumes:
卷:
mydata:
postgres_data:
networks:
网络:
myapp网络:
进入全屏 退出全屏
我们在这里做了以下几件事情:
- 添加了数据库服务
- 添加了反向代理服务
- 添加了对API服务的依赖(因此它会在数据库启动之后再启动)
- 添加了对Nginx服务的依赖(因此它会在API启动之后再启动)
为了简便起见,我们直接将密钥硬编码在这里。当然,在实际部署中不会这么做!如何管理密钥是另一个话题(也许留到明天再说)。
Docker Compose 的基本命令这里有一些你经常会使用的重要命令:
docker compose up
- 启动服务,即运行相关容器docker compose up -d
- 以分离模式启动服务docker compose down
- 停止并移除服务容器docker compose ps
- 查看正在运行的服务docker compose logs
- 查看服务的日志信息docker compose build
- 构建或重新构建服务,即生成新的服务镜像
这只是Docker Compose能做的开始!明天我们会更深入地了解一些更高级的功能。
就像往常一样,仅仅通过查看代码你不会学到任何东西。所以试着将你现有的 Docker 命令转换为一个 compose 文件。试着玩玩看,看看它是怎么工作的,以及如何让它出问题。
如果你有任何问题,欢迎通过 邮件 联系我们。
祝你编程愉快!🐳🎄
乔纳斯 (qiáo nà sī)
共同学习,写下你的评论
评论加载中...
作者其他优质文章