docker-compose
Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)
一 安装:用于一次性部署多个容器,通过一个yml文件来启动
1.curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2. chmod +x /usr/local/bin/docker-compose
3. docker-compose --version
卸载:sudo rm -f /usr/local/bin/docker-compose
二.核心概念
1. service: 一个容器就是一个service
2. project: 一组相关联的容器组成一个project
三.使用的三个步骤
1.使用Dockerfile编写各个微服务应用的镜像
如:我的项目使用mysql和redis,那么,yml中mysql和redis的ip不用写死
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://mysql_test:3306/shop?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false username: root password: root redis: database: 1 host: redis_test password: 666666 mybatis: configuration: local-cache-scope: statement server: port: 8083
编写Dockerfile
FROM centos MAINTAINER yangxiaohui #创建java 环境 RUN mkdir /usr/java RUN mkdir /usr/logs #拷贝jdk文件 Add是就解压的 ADD jdk-8u251-linux-x64.tar.gz /usr/java/ #设置jdk的环境变量 ENV JAVA_HOME /usr/java/jdk1.8.0_251 ENV CLASSPATH $JAVA_HOME/lib/ ENV PATH $JAVA_HOME/bin:$PATH # 设置登录后的落脚点 WORKDIR /temp #拷贝 jar包 COPY demo_mybatis-0.0.1-SNAPSHOT.jar /temp/mybatis.jar #设置docker的时区为东八区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone #暴露端口 EXPOSE 8081 # 启动java项目 CMD nohup java -jar mybatis.jar -Xms100m -Xmx300m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/logs/heap.hprof
将项目jar包和Dockerfile上传到linux服务器,并生成镜像 docker build -t shop:1.0 .
2.使用docker-compose.yml编排好各个容器服务,注意不要使用tab键,而要使用空格键,不然很容易报错
编写docker-compose.yml或者Dockerfile文件,使用idea,装插件
之后你在项目中编写这2个文件就会有提示了,docker-compose.yml的编写本质就是将docker run命令写在docker-compose.yml中
version: "3" services: shop: image: shop:2.0 ports: - "8083:8081" container_name: shop depends_on: - mysql_test - redis_test networks: - my_network mysql_test: image: mysql:5.7 ports: - "3306:3306" container_name: mysql_test privileged: true volumes: - "/mydata/mysql/log:/var/log/mysql" - "/mydata/mysql/data:/var/lib/mysql" - "/mydata/mysql/conf:/etc/mysql/conf.d" environment: MYSQL_ROOT_PASSWORD: root command: --default-authentication-plugin=mysql_native_password networks: - my_network redis_test: image: redis:6.2 ports: - "6379:6379" container_name: redis_test privileged: true volumes: - "/redis/redis.conf:/etc/redis/redis.conf" - "/redis/data:/data" command: redis-server /etc/redis/redis.conf --requirepass 666666 networks: - my_network networks: my_network:
上面如果是用docker run命令:
1. docker run -d --name shop shop:2.0
2. docker run -p 3306:3306 --name mysql_test --network my_network --privileged=true -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
3. docker run -p 6379:6379 --name redis_test --network my_network --privileged=true -v /redis/redis.conf:/etc/redis/redis.conf -v /redis/data:/data -d redis:6.2 redis-server /etc/redis/redis.conf --requirepass 666666
3. docker-compose up来编排启动部署整个project,如果是后台启动,则 docker-compose up -d
其他命令:
1. 停止: docker-compose stop
2. 重启:docker-compose restart
3. 启动: docker-compose start
4. 停止并删除所有镜像 docker-compose down
5. 查询编排过的容器: docker-compose ps
6. 查询进程 docker-compose top
7. 进入容器 sudo docker-compose exec yml文件中的服务名 /bin/bash
8. docker-compose logs +服务名,查询日志
9. dokcer-compose config # 检查配置
10. dokcer-compose config -q # 检查配置,有问题才有输出