dokcer-compose
compose容器编排
docker-compose是docker官方的开源项目,负责实现对docker容器集群的快速编排
Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml,写多个容器之间的调用关系。然后,一个命令,就能同时启动/关闭这些容器
docker建议一个容器中运行一个服务,因为docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来
Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。
可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-compose解决了容器与容器之间如何管理编排的问题。
下载
官网:https://docs.docker.com/compose/compose-file/compose-file-v3/
官网下载:https://docs.docker.com/compose/install/
安装步骤
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose //网络上下载compose
chmod +x /usr/local/bin/docker-compose //加权
docker-compose --version //查看版本
卸载步骤
如果使用curl安装,使用以下语句卸载compose
rm /usr/local/lib/docker/cli-plugins/docker-compose
概念
一文件
docker-compose.yml文件
两要素
服务service
一个个应用容器实例
工程project
由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义
工程=多个服务(容器应用实例)
使用步骤
编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
最后,执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线
docker-compose up等价于一次性运行了多个docker run…
常用命令
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 #停止服务
编排微服务
改造升级微服务docker_boot
以前的基础版
sql语句建库建表
一键生成说明
改pom
写yml
主启动
业务类
mvn package命令将微服务形成新的jar包并上传到linux服务器/mydocker目录下
/mydocker目录下编写Dockerfile
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER zzyy
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar docker.jar
# 运行jar包
RUN bash -c 'touch /docker.jar'
ENTRYPOINT ["java","-jar","/docker.jar"]
# 暴露端口作为微服务
EXPOSE 6001
构建镜像
docker build -t ximu_docker:1.0 .
不用compose
单独的mysql实例
新建mysql容器
进入mysql容器,创建数据库,以及数据表
单独的redis实例
新建redis容器
微服务工程
将刚刚创建的微服务镜像启动
docker run -d -p 6001:6001 镜像名称/镜像id
容器实例依次一个一个启动成功
测试
http://ip:微服务端口/xxx.html/
问题
先后顺序固定,先启动mysql+redis才能访问微服务成功
多条run命令
容器间启动、停止或者宕机,有可能导致ip地址对应容器实例发生变化,导致映射出错,
使用compose
编写docker-compose.yml文件
version: "3" #compose版本
services: #服务容器实例
ximu: #自定义名字,不冲突即可
image: docker:1.0 #编排镜像的名称:版本
container_name: ms01 #容器启动的名称
ports:
- "6001:6001" #映射的端口
volumes:
- /app/ximu:/data #容器数据卷
networks:
- net01 #网络模式
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8 #redis镜像版本
ports:
- "6379:6379" #redis映射版本
volumes:
- /app/reids/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- net01
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '0'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db1'
MYSQL_USER: 'ximu'
MYSQL_PASSWORD: '0'
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
network:
- net01
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
net01:
修改微服务工程
写yml:通过服务名访问,与ip无关
mvn package命令将微服务形成新的jar包并上传到linux服务器/mydocker目录下
/mydocker目录下编写Dockerfile
构建镜像
docker build -t ximu_docker:1.0 .
启动
docker-compose up 启动
docker-compose up -d 启动并后台运行
关停
docker-compose stop