Compose 是 Docker 公司推出的一个开源工具软件,可以管理多个Docker 容器组成一个应用。你需要定义一个YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。
Compose 允许用户通过一个单独的 docker- compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
官网
https://docs.docker.com/compose/compose-file/compose-file-v3/
官网下载
https://docs.docker.com/compose/install/
安装(新版docker已经安装了docker-compose,直接docker compose version查看版本)
curl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)"-o /usr/local/bin/docker-compose
若github下载太慢,可以换源
curl-L https://get.daocloud.io/docker/compose/releases/download/1.28./docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改权限、查看版本
chmod+x /usr/local/bin/docker-compose
docker-compose --version
新版docker使用: docker compose version
卸载
sudorm /usr/local/bin/docker-compose
docker-compose.yml
一个个应用容器实例,比如订单微服务、库存微服务、mysql 容器、nginx容器或者 redis 容器
由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml文件中定义。
1.编写 Dockerfile 定义各个微服务应用并构建出对应的镜像文件
2.使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务
3.最后执行 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 logs yml 里面的服务 id # 查看容器输出日志
docker compose config # 检查配置
docker compose config -q# 检查配置,有问题才有输出
docker compose restart# 重启服务
docker compose start# 启动服务
docker compose stop# 停止服务
version: "3"services:microService:image: zzyy_docker:1.6container_name: ms01ports:-"6001:6001"volumes:- /app/microService:/datanetworks: - atguigu_net depends_on: - redis- mysqlredis:image: redis:6.0.8ports:-"6379:6379"volumes:- /app/redis/redis.conf:/etc/redis/redis.conf- /app/redis/data:/datanetworks: - atguigu_netcommand: redis-server /etc/redis/redis.confmysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: '123456'MYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'db2021'MYSQL_USER: 'zzyy'MYSQL_PASSWORD: 'zzyy123'ports:-"3306:3306"volumes:- /app/mysql/db:/var/lib/mysql- /app/mysql/conf/my.cnf:/etc/my.cnf- /app/mysql/init:/docker-entrypoint-initdb.dnetworks:- atguigu_netcommand: --default-authentication-plugin=mysql_native_password #解决外部无法访问networks: atguigu_net:
# 基础镜像使用 java
FROM java:8
# 作者MAINTAINER zzyy
# VOLUME 指定临时文件目录为/tmp,在主
机/var/lib/docker 目录下创建了一个临时文件
并链接到容器的/tmp
VOLUME /tmp# 将 jar 包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar
zzyy_docker.jar# 运行 jar 包RUN bash-c'touch /zzyy_docker.jar' ENTRYPOINT ["java","-
jar","/zzyy_docker.jar"]
#暴露 6001 端口作为微服务EXPOSE 6001
docker build -t zzyy_docker:1.6 .
docker exec -it 容器实例id /bin/bash
mysql -uroot-p
create database db2021;
use db2021;CREATE TABLE `t_user` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户名',`password` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '密码',`sex` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '性别 0=女 1=男 ',`deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
docker compose stop # 停止服务