Docker-Compose是Docker官方的开源项目,负责实现docker集群容器的快速编排。
写好多个容器之间的调用关系,一键启动/关闭(一个命令)
网址:https://docs.docker.com/compose/install/other/
命令
curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
Compose使用三步骤:
案例是:微服务的jar包 + mysql + redis
解析:version表示使用compose版本,services表示要开启的服务,microService为服务名,images为镜像名,container_name为容器名,ports端口映射,volumes挂载容器数据卷,networks指定使用网桥,depends_on依赖于某些容器启动后再启动 …(解析第一个服务:docker run -d -p 6001:6001 --network linxi_net -v /app/microService:/data --name ms01 linxi_docker:1.6)
vim docker-compose.yml
粘贴以下内容
version: "3"
services:
microService:
image: linxi:1
container_name: ms01
ports:
- "6001:6001"
volumes:
- /app/microService:/data
networks:
- linxi_net
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
container_name: redisServer
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- linxi_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
container_name: mysqlServer
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db2021'
MYSQL_USER: 'linxi'
MYSQL_PASSWORD: '123456'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- linxi_net
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
linxi_net:
因为是通过服务名访问网络,与ip无关,更改如下:
将ip改为服务名,这个名称是docker-compose.yml文件中的服务名
这里有个小问题;maven打包时会进行数据库连接测试,而我们使用服务名代替ip在外部是不能访问的,导致无法打包。
在pom文件添加以下配置跳过测试
<properties>
<java.version>1.8java.version>
<skipTests>trueskipTests>
properties>
vim Dockerfile
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER linxi
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为linxi.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar linxi.jar
# 运行jar包
RUN bash -c 'touch /linxi.jar'
ENTRYPOINT ["java","-jar","/linxi.jar"]
#暴露6001端口作为微服务
EXPOSE 6001
注意:镜像名称:版本号 + 空格 + .
docker build -t linxi:1 .
docker-compose config -q :检测
执行 docker-compose up
或者
执行 docker-compose up -d
然后通过swagger测试
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 -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 # 查看容器输出日志
dokcer-compose config # 检查配置
dokcer-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务