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 # 检查配置,有问题才有输出

 

posted @ 2023-05-20 09:42  yangxiaohui227  阅读(174)  评论(0编辑  收藏  举报