Docker Compose快速入门

本文介绍 Docker Compose 的基本概念、安装方法及常用命令,并通过实战案例展示如何使用 Docker Compose 进行多容器应用的编排和部署。

Docker Compose

简介

在前面学习的docker我们操作的都是单个容器,Dockerfile build 手动操作。
在微服务情况下,100个微服务!如果使用一个 一个的手动操作也是非常麻烦的。
因此 Docker Compose 来轻松高效的管理容器,定义运行多个容器!

官网介绍

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。要了解有关 Compose 的所有功能的更多信息,请参阅功能列表。
Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流。您可以在Common Use Cases 中了解有关每个案例的更多信息。
使用 Compose 基本上是一个三步过程:

  1. 使用 定义您的应用程序的环境,Dockerfile以便它可以在任何地方复制。
  2. 定义组成您的应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
  3. 运行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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值