赞
踩
Docker-compose时Docker官方的一个开源的项目,负责对Docker容器集群的快速编排。Docker-compose可以管理多个Docker容器组成一个应用,你需要定义一个YAML格式的配置文件,docker-compose.yml,写好多个容器之间的调用关系,然后,只需要一个命令,就能同时启动/关闭这些容器。
docker建议我们每个容器中只运行一个服务,因为docker容器本身占用的资源比较少,所以是将每个服务单独的分割开来,但是这样我们又面临一个问题?
如果我们需要同时部署多个服务,难道我们要给每个服务单独写Dockerfile然后构建镜像,构建容器,这样是很麻烦的,所以docker官方为我们提供了docker-compos多服务部署的工具。例如现在我们需要实现一个web微服务项目,除了web服务容器本身,往往还需要加上后端的mysql服务器,redis服务器,注册中心,甚至还包括nginx负载均衡容器等。Compose运行用户通过docker-compose.yml来定义一组相关联的应用容器为一个项目,这样就可以很容器地用一个配置文件定义一个多容器应用,然后使用一条指令安装这个应用的所有依赖,完成构建。docker-compose解决了容器和容器之间如何编排的问题。
官网下载的位置为:https://docs.docker.com/compose/install/
安装Docker Compose最简单也是最推荐的方法是安装Docker Desktop。Docker Desktop包括Docker Compose、Docker Engine和Docker CLI,它们是Docker Compose的先决条件。这里我Mac电脑上面是直接安装了docker desktop,自带按照了docker compose,所以如何安装我就不演示了,网上也有很多教程。
我们可以查看docker compose的版本:
docker-compose --version
docker-compose的核心概念就是一个文件,两个要素
。其中一个文件是docker-compose.yml。两个要素分别是服务和工程。服务指的是一个个应用容器的实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器。工程就是由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
使用docker-compose的步骤如下:
docker-compose的常见命令如下:
命令 | 解释 |
---|---|
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 | 停止服务 |
改造前面使用过的docker_boot
案例:
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=1114 DEFAULT CHARSET=utf8 COMMENT='用户表';
链接:https://pan.baidu.com/s/1f2aMCKGToDp6DwPLKMJUXw
提取码:cbwn
#基础镜像使用java FROM java:8 #作者 MAINTAINER jackiechai #VOLUE指定临时文件夹为/tmp。在主机指定目录下创建一个临时文件并链接到容器的/tmp VOLUME /tmp #将jar包添加到容器并更名 ADD docker_boot-0.0.1-SNAPSHOT.jar jackiechai_docker.jar #运行jar包 RUN bash -c 'touch /jackiechai_docker.jar' ENTRYPOINT ["java","-jar","/jackiechai_docker.jar"] #暴露端口6001作为微服务 EXPOSE 6001
docker build -t jackiechai_docker.jar:1.6 .
我们首先不使用docker-compose来运行这个项目:
docker run -p 3308:3306 --name mysql57 --privileged=true -v /Users/jackchai/Desktop/复习/Docker/boot_mysql/conf:/etc/mysql/conf.d -v /Users/jackchai/Desktop/复习/Docker/boot_mysql/logs:/logs -v /Users/jackchai/Desktop/复习/Docker/boot_mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d e00adb645cb5
修改mysql然后让navicat连接到mysql服务(操作流程看这篇博客:https://blog.csdn.net/a1023266384/article/details/119455841)同时创建数据库和表:
不进行这步操作可能报错:1130 - Host ‘172.17.0.1’ is not allowed to connect to this MySQL server
docker run -p 6379:6379 --name redis608 --privileged=true -v /Users/jackchai/Desktop/复习/Docker/boot_redis/redis.conf:/etc/redis/redis.conf -v /Users/jackchai/Desktop/复习/Docker/boot_redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
docker run -d -p 6001:6001 [镜像id]
数据插入成功
数据查找成功
上面我没使用docker-compose玩成了服务的部署。但是会存在下面这些问题:
使用docker-compose来运行这个项目:
version: "3" services: microService: image: jackiechai_docker.jar:1.6 container_name: ms01 ports: - "6001:6001" volumes: - /Users/jackchai/Desktop/复习/Docker/boot/microService:/data networks: - jack_net depends_on: - redis - mysql redis: image: redis:6.0.8 ports: - "6379:6379" volumes: - /Users/jackchai/Desktop/复习/Docker/boot_redis/redis.conf:/etc/redis/redis.conf - /Users/jackchai/Desktop/复习/Docker/boot_redis/data:/data networks: - jack_net command: redis-server /etc/redis/redis.conf mysql: image: mysql/mysql-server:5.7 environment: MYSQL_ROOT_PASSWORD: '123456' MYSQL_ALLOW_EMPTY_PASSWORD: 'no' MYSQL_DATABASE: 'db2024' MYSQL_USER: 'jackiechai' MYSQL_PASSWORD: '123456' ports: - "3307:3306" volumes: - /Users/jackchai/Desktop/复习/Docker/boot_mysql/db:/var/lib/mysql - /Users/jackchai/Desktop/复习/Docker/boot_mysql/conf/my.cnf:/etc/my.cnf - /Users/jackchai/Desktop/复习/Docker/boot_mysql/init:/docker-entrypoint-initdb.d networks: - jack_net command: --default-authentication-plugon=mysql_native_password networks: jack_net
server.port=6001 # ========================alibaba.druid????===================== spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://mysql:3307/db2024?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=123456 spring.datasource.druid.test-while-idle=false # ========================redis????===================== spring.redis.database=0 spring.redis.host=redis spring.redis.port=6379 spring.redis.password= spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-wait=-1ms spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.min-idle=0 # ========================mybatis????=================== mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.wang.docker.entities # ========================swagger===================== spring.swagger2.enabled=true
然后重新打包
首先我们需要坚持docker-compose是否出现语法错误:
docker-compose config -q
如果docker-compose.yml没有任何错误,它不会出现任何提示
然后我们可以运行docker-compose了
docker-compose up -d
然后我们进入mysql建库建表:
docker exec -it c265227ba92a bash
同样可以执行成功,这里就不演示了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。