我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

此文章需要有一定的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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

使用DockerCompose可以轻松、高效的管理容器,下面这篇文章主要给大家介绍了关于手把手教你docker部署(使用docker-compose)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-01-28

手把手教你在GitLab中部署LDAP

GitLab是一款高效的代码管理工具,它能够帮助团队更加高效地管理代码,并实现更好的协作。在一个团队中,有时需要对不同人员授予不同的权限,这时就需要使用LDAP来对GitLab进行认证工作。接下来,我们就来了解一下如何在GitLab中部署L
2023-10-22

教你使用Docker Compose一键部署前后端分离项目

Compose是一个定义和管理多容器的工具,使用Python语言编写,下面这篇文章主要给大家介绍了关于如何使用Docker Compose一键部署前后端分离项目的相关资料,需要的朋友可以参考下
2023-01-09

手把手教你把nodejs部署到linux上跑出hello world

从事前端一年多了对于 linux 服务部署一直是一无所知, 知道前段时间萌发了个想法, 我怎么能像运维的同学一样把自己的代码放到一个 linux 的服务器上. 于是便开始了踩坑之旅, 这里顺便记录下. ps: 本文中需要下载的文件包括:VM
2022-06-04

手把手教你在Python里使用ChatGPT

最近几天我一直在玩ChatGPT,我对使用这个工具的无限可能性着迷,下面这篇文章主要给大家介绍了关于在Python里使用ChatGPT的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
2022-12-19

手把手教你在vue中使用three.js

最近在vue3项目中通过three.js实现了实际的三维效果demo,下面这篇文章主要给大家介绍了关于在vue中使用three.js的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-03-01

揭秘ASP Web部署秘籍:手把手教你快速搞定

ASP Web部署是将ASP程序发布到Web服务器的过程,以便让用户可以通过网络访问使用。本文将介绍ASP Web部署的步骤和技巧,帮助您快速搞定部署工作。
揭秘ASP Web部署秘籍:手把手教你快速搞定
2024-02-21

使用Docker Compose快速部署PHP应用程序

引言:Docker是一种开源的容器化平台,可以将应用程序及其依赖项打包成一个独立的容器,隔离运行。而Docker Compose则是一个用于定义和运行多容器Docker应用程序的工具。本文将介绍如何使用Docker Compose快速部署P
2023-10-21

手把手教你如何使用 GitHub 平台

作为全球最大的开源代码托管平台,GitHub 提供了无数的项目与资源,也方便了开发者们相互之间的交流与学习。本文将为您介绍如何使用 GitHub 平台。1. 注册 GitHub 账户在使用 GitHub 之前,您首先需要注册一个 GitHu
2023-10-22

一文看懂:手把手教你使用ChatGPT

自去年年底推出以来,这款新的人工智慧语言处理工具一直处于潮流的顶端,那么你该如何使用它呢?人工智慧聊天机器人ChatGPT 的大
2023-02-09

编程热搜

目录