当前位置 : 主页 > 操作系统 > centos >

手把手教你docker部署(使用docker-compose)教程

来源:互联网 收集:自由互联 发布时间:2023-03-17
目录 一、docker一些基础命令 二、docker部署(使用docker-compose) 2.1 安装docker(服务器:CentOS 7或更高版本) 2.2 安装docker-compose 2.3 构建镜像供docker-compose使用 2.4执行一次docker-compose up 2
目录
  • 一、docker一些基础命令
  • 二、docker部署(使用docker-compose)
    • 2.1 安装docker(服务器:CentOS 7或更高版本)
    • 2.2 安装docker-compose
    • 2.3 构建镜像供docker-compose使用
    • 2.4执行一次docker-compose up
    •  2.5docker容器内通信
    • 2.6 错误解决
      • 2.6.1 网卡网段重复问题
      • 2.6.2 docker启动成功,但是无法远程连接
      • 2.6.3 Failed opening the RDB file dump.rdb (in server root dir /redis/data)
    • 2.7大功告成
    • 总结

      此文章需要有一定的docker知识基础上,进行docker线上部署。

      一、docker一些基础命令

      docker build -t ubuntu:15.10 .    -t表示 tag  .表示当前文件dockerfile
      docker build -t ruoyi/ruoyi-server:4.1.0 . 
      docker images 查看镜像 
      docker ps 或者 docker container ls 显示正在运行的容器
      docker run ubuntu /bin/echo "Hello world"    注意: /bin/echo "Hello world"   表示执行的命令
      docker run -i -t ubuntu:15.10 /bin/bash   -t: 在新容器内指定一个伪终端或终端。 -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
      docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"    启动容器(后台模式)
      docker logs 2b1b7a428627   在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
      docker stop 2b1b7a428627
      docker start 2b1b7a428627   使用 docker start 启动一个已停止的容器
      docker ps -a   查看所有的容器命令
      docker run -itd --name ubuntu-test ubuntu /bin/bash    docker的服务是在后台运行的,我们可以过 -d 指定容器的运行模式
      docker attach    想要进入容器,可以通过以下指令进入,注意: 如果从这个容器退出,会导致容器的停止
      docker exec -it 243c32535da7 /bin/bash   如果从这个容器退出,容器不会停止
      docker rm -f 1e560fca3906  删除容器
      docker pull training/webapp  # 载入镜像
      docker run -d -P training/webapp python app.py   -d:让容器在后台运行。  -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
      docker inspect test1    可以查看挂载点
      docker stop $(docker ps -a -q)  1.停止所有的container,这样才能够删除其中的images:
      docker rm $(docker ps -a -q)  如果想要删除所有container的话再加一个指令:
      docker rmi $(docker images -q)  删除所有镜像

      二、docker部署(使用docker-compose)

      docker-compose.yml 文件内容

      version: '3'
       
      services:
        mysql:
          image: mysql:8.0.27
          container_name: mysql
          environment:
            # 时区上海
            TZ: Asia/Shanghai
            # root 密码
            MYSQL_ROOT_PASSWORD: root
            # 初始化数据库(后续的初始化sql会在这个库执行)
            MYSQL_DATABASE: ry-vue
          ports:
            - "3306:3306"
          volumes:
            # 数据挂载
            - /docker/mysql/data/:/var/lib/mysql/
            # 配置挂载
            - /docker/mysql/conf/:/etc/mysql/conf.d/
          command:
            # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
            --default-authentication-plugin=mysql_native_password
            --character-set-server=utf8mb4
            --collation-server=utf8mb4_general_ci
            --explicit_defaults_for_timestamp=true
            --lower_case_table_names=1
          privileged: true
          restart: always
          networks:
            ruoyi_net:
              ipv4_address: 172.30.0.36
       
        nginx-web:
          image: nginx:1.21.3
          container_name: nginx-web
          environment:
            # 时区上海
            TZ: Asia/Shanghai
          ports:
            - "80:80"
            - "443:443"
          volumes:
            # 证书映射
            - /docker/nginx/cert:/etc/nginx/cert
            # 配置文件映射
            - /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
            # 页面目录
            - /docker/nginx/html:/usr/share/nginx/html
            # 日志目录
            - /docker/nginx/log:/var/log/nginx
          privileged: true
          restart: always
          networks:
            - ruoyi_net
       
        redis:
          image: redis:6.2.6
          container_name: redis
          ports:
            - "6379:6379"
          environment:
            # 时区上海
            TZ: Asia/Shanghai
          volumes:
            # 配置文件
            - /docker/redis/conf:/redis/config:rw
            # 数据文件
            - /docker/redis/data/:/redis/data/:rw
          command: "redis-server /redis/config/redis.conf"
          privileged: true
          restart: always
          networks:
            ruoyi_net:
              ipv4_address: 172.30.0.48
       
        minio:
          image: minio/minio:RELEASE.2021-10-27T16-29-42Z
          container_name: minio
          ports:
            # api 端口
            - "9000:9000"
            # 控制台端口
            - "9001:9001"
          environment:
            # 时区上海
            TZ: Asia/Shanghai
            # 管理后台用户名
            MINIO_ACCESS_KEY: ruoyi
            # 管理后台密码,最小8个字符
            MINIO_SECRET_KEY: ruoyi123
            # https需要指定域名
            MINIO_SERVER_URL: ""
            # 开启压缩 on 开启 off 关闭
            MINIO_COMPRESS: "off"
            # 扩展名 .pdf,.doc 为空 所有类型均压缩
            MINIO_COMPRESS_EXTENSIONS: ""
            # mime 类型 application/pdf 为空 所有类型均压缩
            MINIO_COMPRESS_MIME_TYPES: ""
          volumes:
            # 映射当前目录下的data目录至容器内/data目录
            - /docker/minio/data:/data
            # 映射配置目录
            - /docker/minio/config:/root/.minio/
          command: server --address ':9000' --console-address ':9001' /data  # 指定容器中的目录 /data
          privileged: true
          restart: always
          networks:
            ruoyi_net:
              ipv4_address: 172.30.0.54
       
        ruoyi-server1:
          image: ruoyi/ruoyi-server:4.1.0
          container_name: ruoyi-server1
          environment:
            # 时区上海
            TZ: Asia/Shanghai
          volumes:
            # 配置文件
            - /docker/server1/logs/:/ruoyi/server/logs/
          privileged: true
          restart: always
          networks:
            ruoyi_net:
              ipv4_address: 172.30.0.60
       
        ruoyi-server2:
          image: "ruoyi/ruoyi-server:4.1.0"
          container_name: ruoyi-server2
          environment:
            # 时区上海
            TZ: Asia/Shanghai
          volumes:
            # 配置文件
            - /docker/server2/logs/:/ruoyi/server/logs/
          privileged: true
          restart: always
          networks:
            ruoyi_net:
              ipv4_address: 172.30.0.61
       
        ruoyi-monitor-admin:
          image: ruoyi/ruoyi-monitor-admin:4.1.0
          container_name: ruoyi-monitor-admin
          environment:
            # 时区上海
            TZ: Asia/Shanghai
          volumes:
            # 配置文件
            - /docker/monitor/logs/:/ruoyi/monitor/logs
          privileged: true
          restart: always
          networks:
            ruoyi_net:
              ipv4_address: 172.30.0.90
       
        ruoyi-xxl-job-admin:
          image: ruoyi/ruoyi-xxl-job-admin:4.1.0
          container_name: ruoyi-xxl-job-admin
          environment:
            # 时区上海
            TZ: Asia/Shanghai
          volumes:
            # 配置文件
            - /docker/xxljob/logs/:/ruoyi/xxljob/logs
          privileged: true
          restart: always
          networks:
            ruoyi_net:
              ipv4_address: 172.30.0.92
       
      networks:
        ruoyi_net:
          driver: bridge
          ipam:
            config:
              - subnet: 172.30.0.0/16

      2.1 安装docker(服务器:CentOS 7或更高版本)

      curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

       安装成功后,运行 docker ps 出现如下报错

      Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running

       表示未启动docker,运行下列语句即可

      service docker start

      2.2 安装docker-compose

      curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

      安装完成后,运行

      docker-compose -v 

      赋予权限即可

      chmod +x /usr/local/bin/docker-compose

      2.3 构建镜像供docker-compose使用

      在服务器上单独新建文件夹名为ruoyi-admin

      dockerfile文件如下

      # 基础镜像
      FROM  java:8
      # author
      MAINTAINER kaixin
       
      EXPOSE 8080
       
      # 挂载目录
      VOLUME /home/ruoyi
      # 创建目录
      RUN mkdir -p /home/ruoyi
      # 指定路径
      WORKDIR /home/ruoyi
      # 复制jar文件到路径
      COPY ruoyi-admin.jar /home/ruoyi/ruoyi-admin.jar
      # 启动认证服务
      ENTRYPOINT ["java","-jar","ruoyi-admin.jar"]

       执行如下命令

      cd /root/dockerbuild/ruoyi-admin/
      docker build -t ruoyi/ruoyi-server:4.1.0 .

      这就构建出本地的镜像了。

      依次再构建出ruoyi/ruoyi-xxl-job-admin和ruoyi/ruoyi-monitor-admin

      2.4执行一次docker-compose up

      cd到docker-compose.yml工作目录下,执行一次docker-compose up,此时必定会报错。报错如下

      意思是不存在,nginx的配置文件。

      为什么要执行一次呢,因为这个时候,docker-compose.yml下挂在的文件,会自动帮你生成,省的你手动去创建了。

      根据提示,将提前准备好的nginx.conf还有redis.conf 放到宿主机对应的挂载文件夹底下即可。

      这里提示下:如果开启了redis的aof模式,需要在redis的挂在文件下,手动创建appendonly.aof和dump.rdb

      并且需要赋予权限  

      chmod 777 /docker/redis/data/appendonly.aof
      chmod 777 /docker/redis/data/dump.rdb

      否则会报错:

       2.5docker容器内通信

      修改项目中application-dev.yml的配置,将访问的mysql、redis修改成,docker-compose.yml中配置的ip地址,然后重新打包,重新使用docker build构建镜像。

      注意:由于上面执行过一次的docker-compose up 这个时候对应的镜像状态处于stop,并未消失,如果重新构建镜像,再执行docker-compose up,仍然使用的是上次构建成功的镜像,所以需要删除此次镜像的进程。

      #关闭所有模块
      docker-compose stop
      #删除所有模块
      docker-compose rm
      #删除Tag为空的镜像
      docker images|grep none|awk '{print $3}'|xargs docker rmi -f

      2.6 错误解决

      2.6.1 网卡网段重复问题

      ERROR: Pool overlaps with other one on this address space

      networks参数下手动指定了subnet地址,此地址发生了冲突

      docker network ls # 查看docker网卡
      docker network inspect <网卡id> # 查看具体信息,找到与subnet冲突的是哪个
      docker network rm <网卡id> # 删除冲突的网卡

      再执行docker-compose up

      2.6.2 docker启动成功,但是无法远程连接

      需要开启ipv4转发功能

      vi /etc/sysctl.conf
      net.ipv4.ip_forward=1  #添加这段代码
      systemctl restart network && systemctl restart docker  #重启network服务
      sysctl net.ipv4.ip_forward   #查看是否修改成功 (备注:返回1,就是成功)

      2.6.3 Failed opening the RDB file dump.rdb (in server root dir /redis/data)

      给文件夹赋予权限即可。

      chmod 777 /docker/redis/data/

      2.7大功告成

      总结

      到此这篇关于docker部署(使用docker-compose)教程的文章就介绍到这了,更多相关docker部署使用docker-compose内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

      上一篇:Docker部署Nginx并修改配置文件的两种方式
      下一篇:没有了
      网友评论