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


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

    一、docker一些基础命令

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

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

    docker-compose.yml 文件内容

    1. version: '3'
    2. services:
    3. mysql:
    4. image: mysql:8.0.27
    5. container_name: mysql
    6. environment:
    7. # 时区上海
    8. TZ: Asia/Shanghai
    9. # root 密码
    10. MYSQL_ROOT_PASSWORD: root
    11. # 初始化数据库(后续的初始化sql会在这个库执行)
    12. MYSQL_DATABASE: ry-vue
    13. ports:
    14. - "3306:3306"
    15. volumes:
    16. # 数据挂载
    17. - /docker/mysql/data/:/var/lib/mysql/
    18. # 配置挂载
    19. - /docker/mysql/conf/:/etc/mysql/conf.d/
    20. command:
    21. # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
    22. --default-authentication-plugin=mysql_native_password
    23. --character-set-server=utf8mb4
    24. --collation-server=utf8mb4_general_ci
    25. --explicit_defaults_for_timestamp=true
    26. --lower_case_table_names=1
    27. privileged: true
    28. restart: always
    29. networks:
    30. ruoyi_net:
    31. ipv4_address: 172.30.0.36
    32. nginx-web:
    33. image: nginx:1.21.3
    34. container_name: nginx-web
    35. environment:
    36. # 时区上海
    37. TZ: Asia/Shanghai
    38. ports:
    39. - "80:80"
    40. - "443:443"
    41. volumes:
    42. # 证书映射
    43. - /docker/nginx/cert:/etc/nginx/cert
    44. # 配置文件映射
    45. - /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    46. # 页面目录
    47. - /docker/nginx/html:/usr/share/nginx/html
    48. # 日志目录
    49. - /docker/nginx/log:/var/log/nginx
    50. privileged: true
    51. restart: always
    52. networks:
    53. - ruoyi_net
    54. redis:
    55. image: redis:6.2.6
    56. container_name: redis
    57. ports:
    58. - "6379:6379"
    59. environment:
    60. # 时区上海
    61. TZ: Asia/Shanghai
    62. volumes:
    63. # 配置文件
    64. - /docker/redis/conf:/redis/config:rw
    65. # 数据文件
    66. - /docker/redis/data/:/redis/data/:rw
    67. command: "redis-server /redis/config/redis.conf"
    68. privileged: true
    69. restart: always
    70. networks:
    71. ruoyi_net:
    72. ipv4_address: 172.30.0.48
    73. minio:
    74. image: minio/minio:RELEASE.2021-10-27T16-29-42Z
    75. container_name: minio
    76. ports:
    77. # api 端口
    78. - "9000:9000"
    79. # 控制台端口
    80. - "9001:9001"
    81. environment:
    82. # 时区上海
    83. TZ: Asia/Shanghai
    84. # 管理后台用户名
    85. MINIO_ACCESS_KEY: ruoyi
    86. # 管理后台密码,最小8个字符
    87. MINIO_SECRET_KEY: ruoyi123
    88. # https需要指定域名
    89. MINIO_SERVER_URL: ""
    90. # 开启压缩 on 开启 off 关闭
    91. MINIO_COMPRESS: "off"
    92. # 扩展名 .pdf,.doc 为空 所有类型均压缩
    93. MINIO_COMPRESS_EXTENSIONS: ""
    94. # mime 类型 application/pdf 为空 所有类型均压缩
    95. MINIO_COMPRESS_MIME_TYPES: ""
    96. volumes:
    97. # 映射当前目录下的data目录至容器内/data目录
    98. - /docker/minio/data:/data
    99. # 映射配置目录
    100. - /docker/minio/config:/root/.minio/
    101. command: server --address ':9000' --console-address ':9001' /data # 指定容器中的目录 /data
    102. privileged: true
    103. restart: always
    104. networks:
    105. ruoyi_net:
    106. ipv4_address: 172.30.0.54
    107. ruoyi-server1:
    108. image: ruoyi/ruoyi-server:4.1.0
    109. container_name: ruoyi-server1
    110. environment:
    111. # 时区上海
    112. TZ: Asia/Shanghai
    113. volumes:
    114. # 配置文件
    115. - /docker/server1/logs/:/ruoyi/server/logs/
    116. privileged: true
    117. restart: always
    118. networks:
    119. ruoyi_net:
    120. ipv4_address: 172.30.0.60
    121. ruoyi-server2:
    122. image: "ruoyi/ruoyi-server:4.1.0"
    123. container_name: ruoyi-server2
    124. environment:
    125. # 时区上海
    126. TZ: Asia/Shanghai
    127. volumes:
    128. # 配置文件
    129. - /docker/server2/logs/:/ruoyi/server/logs/
    130. privileged: true
    131. restart: always
    132. networks:
    133. ruoyi_net:
    134. ipv4_address: 172.30.0.61
    135. ruoyi-monitor-admin:
    136. image: ruoyi/ruoyi-monitor-admin:4.1.0
    137. container_name: ruoyi-monitor-admin
    138. environment:
    139. # 时区上海
    140. TZ: Asia/Shanghai
    141. volumes:
    142. # 配置文件
    143. - /docker/monitor/logs/:/ruoyi/monitor/logs
    144. privileged: true
    145. restart: always
    146. networks:
    147. ruoyi_net:
    148. ipv4_address: 172.30.0.90
    149. ruoyi-xxl-job-admin:
    150. image: ruoyi/ruoyi-xxl-job-admin:4.1.0
    151. container_name: ruoyi-xxl-job-admin
    152. environment:
    153. # 时区上海
    154. TZ: Asia/Shanghai
    155. volumes:
    156. # 配置文件
    157. - /docker/xxljob/logs/:/ruoyi/xxljob/logs
    158. privileged: true
    159. restart: always
    160. networks:
    161. ruoyi_net:
    162. ipv4_address: 172.30.0.92
    163. networks:
    164. ruoyi_net:
    165. driver: bridge
    166. ipam:
    167. config:
    168. - subnet: 172.30.0.0/16

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

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

    2.2 安装docker

    curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    2.3 构建镜像供docker-compose使用

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

    dockerfile文件如下

    1. # 基础镜像
    2. FROM java:8
    3. # author
    4. MAINTAINER kaixin
    5. EXPOSE 8080
    6. # 挂载目录
    7. VOLUME /home/ruoyi
    8. # 创建目录
    9. RUN mkdir -p /home/ruoyi
    10. # 指定路径
    11. WORKDIR /home/ruoyi
    12. # 复制jar文件到路径
    13. COPY ruoyi-admin.jar /home/ruoyi/ruoyi-admin.jar
    14. # 启动认证服务
    15. ENTRYPOINT ["java","-jar","ruoyi-admin.jar"]

     执行如下命令

    1. cd /root/dockerbuild/ruoyi-admin/
    2. 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

    否则会报错:

     2.5docker容器内通信

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

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

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

    2.6 错误解决

    ERROR: Pool overlaps with other one on this address space

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

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

    再执行docker-compose up

    2.7大功告成

    大家还有碰到什么问题,也可以留言。


     博主新推出的gitee免费开源项目(商城+APP+小程序+H5),有兴趣的小伙伴可以了解一下。

    生鲜商城kxmall-小程序 + App + 公众号H5: kxmall-生鲜商城+APP+小程序+H5。同时支持微信小程序、H5、安卓App、苹果App。支持集群部署,单机部署。可用于B2C商城,O2O外卖,社区超市,生鲜【带配套骑手端配送系统】。kxmall使用uniapp编码。使用Java开发,SpringBoot 2.1.x框架,MyBatis-plus持久层框架、Redis作为缓存、MySql作为数据库。前端vuejs作为开发语言。https://gitee.com/zhengkaixing/kxmall

  • 相关阅读:
    剑指offer——JZ84 二叉树中和为某一值的路径(三) 解题思路与具体代码【C++】
    js中call、apply和bind:
    C++头文件定义变量
    shell编程规范与变量
    基于python+mysql的宠物领养网站系统
    EssilorLuxottica借助Boomi的智能集成平台实现订单处理的现代化
    Vue条件渲染
    数据结构7---图
    驱动开发:内核强制结束进程运行
    Leetcode hot100之“结合递归+二分“题目详解
  • 原文地址:https://blog.csdn.net/qq_38377190/article/details/125504426