Docker Compose
Docker Compose
简介
在前面学习的docker我们操作的都是单个容器,Dockerfile build 手动操作。
在微服务情况下,100个微服务!如果使用一个 一个的手动操作也是非常麻烦的。
因此 Docker Compose 来轻松高效的管理容器,定义运行多个容器!
官网介绍
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。要了解有关 Compose 的所有功能的更多信息,请参阅功能列表。
Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流。您可以在Common Use Cases 中了解有关每个案例的更多信息。
使用 Compose 基本上是一个三步过程:
- 使用 定义您的应用程序的环境,Dockerfile以便它可以在任何地方复制。
- 定义组成您的应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
- 运行docker compose up和 Docker compose command 命令启动并运行你的整个应用程序。您也可以docker-compose up使用docker-compose 二进制文件运行。
Docker Compose 的理解
Docker Compose 就是把多个容器编排到一个文件中。
Docker Compose 安装
Linux 环境下
## 1. 运行此命令以下载 Docker Compose 的当前稳定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
## 你可以也通过执行下面的命令,高速安装Docker Compose。
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
## 2. 对二进制文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
##测试安装。
$ docker-compose --version
docker-compose version 1.29.2, build 1110ad01啊
Docker Compose 常用命令和配置
- ps:列出所有compose运行 容器
docker-compose ps
- logs:查看服务日志输出
docker-compose ps
- port:打印绑定的公共端口
docker-compose port eureka 8761
- build:构建或者重新构建服务
docker-compose build
- start;启动指定服务已存在的容器
docker-compose start xiaomingapp
- stop:停止已运行的服务的容器
docker-compose stop redis
- rm:删除知道服务的容器
docker-compose rm redis
- up:构建、启动容器
docker-compose up
- kill:停止知道服务的容器
- run:在一个服务上执行一个命令
docker-compose run web bash
- pull:下载服务镜像
- scale:设置知道服务运行容器的个数,以service=num形式指定
docker-compose scale user=3 movie=3
docker-compos.yaml 属性
docker-compose.yaml 核心
具体每个参数参考官方文档
官方文档:https://docs.docker.com/compose/compose-file/compose-file-v3/
## 主要是分为 3层. 版本--》服务--〉其他配置/
version: "" ## 版本
services: ## 服务
服务1: ## web
build:
...
image:
networks:
volumes
...
服务2: ## redis
...
## 其他配置 网络/卷,全局规则
volumes:
network:
configs:
案例
version: "3.9" ## 版本
services: ## 服务
web:
build: .
depends_on: ##依赖。先执行 db redis
- db
- redis
redis:
image: redis
db:
image: postgres
学习,需要掌握规律!
使用docker-compose 网络
使用docker-compose 编排容器,会创建一个默认定义一个网络,所有容器都是使用该网络,而且容器之间是可以连通的。
xiaoming[root@cn-mbp-c02v221ahv2f java]# docker network list
NETWORK ID NAME DRIVER SCOPE
25463fc507cb bridge bridge local
77b421abcbd9 host host local
e5f240fc6078 java_default bridge local
b7ade70af5bc mynet bridge local
c2509facb374 none null local
3f39b14d72a7 redis bridge local
使用docker-compose 打包部署jar
编写测试java web 应用 只使用redis 做测试
@RestController
public class HelloController {
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping("hello/{name}")
public String hello(@PathVariable("name") String name){
redisTemplate.opsForValue().set("name",name);
return (String) redisTemplate.opsForValue().get("name");
}
这里我们使用 redis服务名称进行网络连通
server.port=8080
spring.redis.host=redis
[root@cn-mbp-c02v221ahv2f java]# vi docker-compose.yml
version: '3.3'
services:
xiaomingapp:
image: xiaomingapp
build: .
ports:
- 8080:8080
depends_on:
- redis
redis:
image: "redis:alpine"
[root@cn-mbp-c02v221ahv2f java]# vi Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
[root@cn-mbp-c02v221ahv2f java]# ll
total 26424
-rw-r--r--. 1 root root 168 Aug 3 01:49 docker-compose.yml
-rw-r--r--. 1 root root 108 Aug 3 01:48 Dockerfile
-rw-r--r--. 1 root root 27049938 Aug 3 01:48 hello-0.0.1-SNAPSHOT.jar
使用 docker-compose up --build 进行构建
[root@cn-mbp-c02v221ahv2f java]# docker-compose up --build
[root@cn-mbp-c02v221ahv2f java]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f697833af140 xiaomingapp "java -jar /app.jar …" 4 hours ago Up 4 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp java_xiaomingapp_1
b1f576accdd1 redis:alpine "docker-entrypoint.s…" 4 hours ago Up 4 hours 6379/tcp java_redis_1
测试 成功
[root@cn-mbp-c02v221ahv2f java]# curl localhost:8080/hello/xiaoming
xiaoming