docker compose
简介
Docker-Compose 是docker官方的开源项目,负责实现对Docker容器集群的快速编排。
功能
可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后只需要一个命令就能同事启动/关闭这些容器。
docker建议我们每个容器中只运行一个服务,因为docker本身占用资源较少,所以每个服务单独分割开来最好。
如果我们需要同时部署多个服务,单独使用Dockerfile构建起来非常麻烦。所以需要借助docker-compose来进行多服务部署。
compose允许用户通过一个单独的docekr-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。
可以很容器地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖。完成构建。所以docker-compose解决了容器与容器之间的编排问题。
安装
针对macos客户端,安装了docker desktop 就自带docker compose
核心概念
一个文件,两个要素。
-
docker-compose-yml文件
-
服务 service
一个个的应用容器实例,例如:订单微服务、用户微服务、redis容器、mysql容器等
-
工程 project
由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
使用步骤
- 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件。
- 使用docker-compose.yml定义一个完整业务单元,安排好整体应用中的各个容器服务。
- 执行docker-compose up 命令来启动并运行整个应用程序,完成一键部署上线。
常用命令
命令 | 解释 |
---|---|
docker-compose -h | 查看帮助 |
docker-compose up | 启动所有docker-compose服务 |
docker-compose up -d | 启动所有docker-compose服务并且后台运行 |
docker-compose down | 停止并删除容器、网络、卷、镜像 |
docker-compose exec yml服务ID | 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务ID /bin/bash |
docker-compose ps | 展示当前docker-compose编排过的运行的所有容器 |
docker-compose top | 展示当前docker-compose编排过的容器进程 |
docker-compose log yml服务ID | 查看容器输出日志 |
docker-compose config | 检查配置 |
docker-compose config -q | 检查配置,有问题才输出 |
docker-compose restart | 重启服务 |
docker-compose start | 启动服务 |
docker-compose stop | 停止服务 |
实战案例
编写docker-compose.yml
version: '3'
services:
microService:
image: mservice:1.5.0
container_name: ms01
ports:
- "8888:8888"
volumes:
- /Users/huzd/docker/microService:/data
networks:
- docker_net
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
- /Users/huzd/docker/redis/redis.conf:/etc/redis/redis.conf
- /Users/huzd/docker/redis/data:/data
networks:
- docker_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'cloud'
MYSQL_USER: 'huzd'
MYSQL_PASSWORD: '123456'
ports:
- "3306:3306"
volumes:
- /Users/huzd/docker/mysql/db:/var/lib/mysql
- /Users/huzd/docker/mysql/conf/my.cnf:/etc/my.cnf
- /Users/huzd/docker/mysql/init:/docker-entrypoint-initdb.d
networks:
- docker_net
command: --default-authentication-plugin=mysql_native_password
networks:
docker_net:
前置条件-建库
create table t_user
(
id int(10) auto_increment
primary key,
username varchar(50) not null comment '用户名',
password varchar(50) not null comment '密码',
sex tinyint default 0 not null comment '性别 0=女 1=男',
deleted tinyint default 0 not null comment '删除标注,默认0删除 1不删除',
update_time timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
create_time timestamp default CURRENT_TIMESTAMP null comment '创建时间'
)
charset = utf8;
前置条件-改造web应用
使用dockerfile制作镜像
➜ javaweb docker build -t mservice:1.5.0 .
[+] Building 49.8s (8/8) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 84B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/java:8 15.4s
=> [internal] load build context 21.0s
=> => transferring context: 49.64MB 21.0s
=> CACHED [1/3] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d 0.0s
=> [2/3] ADD docker-root-0.0.1-SNAPSHOT.jar a.jar 1.9s
=> [3/3] RUN bash -c 'touch /a.jar' 5.3s
=> exporting to image 4.9s
=> => exporting layers 4.9s
=> => writing image sha256:59da26ab13835656560e520078c51fc3fec5c1dd9cc2e8f95d8e1e67127ea915 0.0s
=> => naming to docker.io/library/mservice:1.5.0
运行
➜ docker-compose docker-compose up -d
Creating docker-compose_mysql_1 ... done
Creating docker-compose_redis_1 ... done
Creating ms01 ... done
➜ docker-compose docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3bada71b109 mservice:1.5.0 "java -jar /a.jar" 10 seconds ago Up 5 seconds 0.0.0.0:8888->8888/tcp ms01
a41466df6dc7 redis:6.0.8 "docker-entrypoint.s…" 16 seconds ago Up 10 seconds 0.0.0.0:6379->6379/tcp docker-compose_redis_1
50a26a89d928 mysql:5.7 "docker-entrypoint.s…" 16 seconds ago Up 10 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp docker-compose_mysql_1
本文由 huzd 创作,采用 知识共享署名4.0 国际许可协议进行许可本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名最后编辑时间
为:
2022/08/01 16:55