部署环境准备

安装yum
# 安装yum工具 yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken 安装dcoker
# 设置docker镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's/download.docker.com/mirrors.aliyun.com/docker-ce/g' /etc/yum.repos.d/docker-ce.repo yum makecache fast #安装docker社区版 yum install -y docker-ce 启动docker
Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙! # 关闭 systemctl stop firewalld # 禁止开机启动防火墙 systemctl disable firewalld # 启动docker服务 systemctl start docker # 停止docker服务 systemctl stop docker # 重启docker服务 systemctl restart docker #开机自启 systemctl enable docker # 查看docker docker -v 安装docker-compose
# 安装docker-compose curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # 修改文件权限 chmod +x /usr/local/bin/docker-compose # 查看docker-compose docker-compose -v 安装小皮面板
# 安装小皮面板 yum install -y wget && wget -O install.sh https://notdocker.xp.cn/install.sh && sh install.sh

Dockerfile文件(可复制下来改改直接用)

#  编写Dockerfile

# 基础镜像,当前新镜像是基于哪个镜像

FROM openjdk:8-oracle

# RUN:容器构建时需要运行的命令

ENV TZ = "Asia/Shanghai"

# ADD:将宿主机目录下的文件拷贝到镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包

WORKDIR /

ADD ./donger-mom-mes-3.0-executor.jar mes.jar

# 利用 chmod 可以藉以控制文件如何被他人所调用。

RUN chmod +x mes.jar

# EXPOSE:当前容器对外暴露的端口

EXPOSE 9000

# CMD:指定一个容器启动时要运行的命令。Dockerfile 中可以有多个 CMD 命令,

# 但只有最后一个生效,CMD 会被 docker run 之后的参数替换

CMD ["java", "—Xmx1024m", "—Xms1024m",  "-jar", "mes.jar", "--spring.config.location=/etc/mes/config/application.yml"]

docker-compose.yml文件(可复制下来改改用)

version: '3'
services:
mes:
image: mes
build:
context: ./mes-api
dockerfile: Dockerfile
ports:
- 9000:9000
volumes:
- ./mes-api/config:/etc/mes/config
restart: always
depends_on:
- mysql
- redis
- minio
container_name: mes
hostname: "mes"
wms:
image: wms
build:
context: ./wms-api
dockerfile: Dockerfile
ports:
- 9002:9002
volumes:
- ./wms-api/config:/etc/wms/config
restart: always
depends_on:
- mysql
- redis
- minio
container_name: wms
hostname: "wms"
pln:
image: pln
build:
context: ./pln-api
dockerfile: Dockerfile
ports:
- 9004:9004
volumes:
- ./pln-api/config:/etc/pln/config
restart: always
depends_on:
- mysql
- redis
- minio
container_name: pln
hostname: "pln"
mysql:
image: mysql:5.7 # 原镜像`mysql:5.7`
environment:
MYSQL_ROOT_PASSWORD: cloudmes
MYSQL_ROOT_HOST: '%'
TZ: Asia/Shanghai
restart: always
container_name: mysql
command:
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
--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
--innodb_buffer_pool_size=2048M
--sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO
--init-file /docker-entrypoint-initdb.d/init.sql
ports:
- "4306:3306"
volumes:
- ./db/init/init.sql:/docker-entrypoint-initdb.d/init.sql
- ./db/my.cnf:/etc/mysql/my.cnf
- ./db/mydata:/var/lib/mysql
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
hostname: mysql
# 缓存
redis:
image: redis
environment:
TZ: Asia/Shanghaii
ports:
- "7379:6379"
restart: always
container_name: redis
hostname: redis
command: ["redis-server", "--appendonly", "yes", "--requirepass","cloudmes"]
# minio
minio:
image: minio/minio:RELEASE.2022-06-30T20-58-09Z.fips
container_name: minio
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: cloudmes
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: cloudmes
command: server --console-address ':9011' /data
volumes:
- /opt/minio/data:/data
- /opt/minio/config:/root/.minio/
- /etc/localtime:/etc/localtime
ports:
- "9010:9010"
- "9011:9011"
restart: always
hostname: minio

运行容器


############### 运行容器

#  编写docker-compose.yml  

# 关闭docker容器

docker-compose down  

# 删除修改过的镜像服务,镜像对应上面标黄的部分,可以通过docker images查看一下镜像

docker rmi 镜像

#  运行容器

docker-compose up -d

#  查看容器

docker ps

#  查看日志

docker logs -f mes

包目录结构:

分析docker-compose.yml各个属性的意义,这是一些常用的三个中间件的信息,其余的自己百度一下。

在这里重点理解一下数据卷持久化的意义:

  1. 如果我有一个镜像,该镜像是一个MySQL5.7的镜像,将它启动为一个容器后,发现这个镜像里的MySQL使用的字符集是utf8,现在我想将数据库使用的字符集更改为utf8mb4,怎么办?
  1. 如果是在物理机安装的MySQL,遇到上述问题,我们通常的做法是在MySQL的主配置文件 my.cnf 文件中指定使用哪个字符集并重启MySQL服务使之生效即可,对于docker容器,当然也可以使用这种方法,进入容器-->找到配置文件-->修改文件并保存-->重启容器内的服务(很多容器并没有安装vi,vim这些文本编辑器,还需要自己手动安装~!~~!!!),可是如果一会又有了别的需求,比如,容器运行的MySQL服务缓慢,需要排查什么原因,这个时候怎么办呢?  还是重复上面的步骤  进入容器-->找到日志文件-->排查原因-->找到原因后修复问题?毫无疑问,这样是低效的方法。正是由于这些原因,docker提出了volume这个概念。
  1. 如果,能将容器内的所需要经常修改或者监控的文件放在宿主机并与容器内所在的原文件同步,那么这些痛点是不是就不是痛点了呢(也就是相互映射)?答案是肯定的,docker的volume就是互相映射宿主机和容器的文件的(比如将容器内的文件 A映射到了宿主机的家目录下,也就是家目录也有一个A文件,在容器内修改A文件,在宿主机家目录下的A文件也同时改变,同理,宿主机的A改变了,容器的A文件也改变 了,这样的情况,我们就称之为映射)。实现volume的前提是宿主机和容器可以互相的双向通信哦。(共享)
  1. 在制作docker-compose.yml文件时,遇到类似的问题可以按照这个方向对着百度找答案。

遇到的问题:

1. Mysql容器创建失败:

我遇到的原因是因为我进行数据卷持久化的文件mydata文件里面有内容,

导致创建的时候不成功,没有发现这个问题的原因

l 我没有使用ls命令查看到底有没有内容,而是一直看findshell的可视化页面,导致一直没有发现。这个地方应该记住使用命令,有些东西属于隐藏文件,而命令可以看到。

l 忘记查看mysql 的运行日志docker logs mysql ,对命令不够熟悉。

2. 运行sql文件时发生错误,并报错[ERR] 1153 - Got a packet bigger than 'max_allowed_packet' bytes:

① 我初步判断是因为字符序列不对应,或者是存在转义的问题(背景是我从阿里的

数据库转储的sql文件,然后放在腾讯云服务器上)显然不对。

② MySQL导入数据出现错误:Got a packet bigger than 'max_allowed_packet' bytes

原因是导入的数据大于系统的限制的最大包大小。

这里的话就看我的docker-compose是怎么写的

或者是进行数据卷持久化在my.cnf里面进行设置,

3. 部署前端报错,但是打包什么的配置都改好了,想不到什么地方有遗漏。

可以去看nginx.conf配置文件,不管是小皮还是镜像,都认真看,仿照着别的有些东西可能不知道什么意思,但是也要写上没因为可能没有什么作用,如果是不可缺少的部分,页面也会报奇奇怪怪的错误,比如 try_files $uri $uri/ /index.html; 不写会报错。

Docker部署之使用docker-compose部署(全新的干净的服务器,从0开始搭建)的更多相关文章

  1. Sentry 监控 - 私有 Docker Compose 部署与故障排除详解

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  2. 使用Docker Compose部署基于Sentinel的高可用Redis集群

    使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...

  3. Docker Compose 部署前后端分离应用

    部署前后端分离应用 容器化 Abp 应用 关于 Abp 应用的容器化,其实和普通的 ASP.NET Core 应用差不多,大家可以参考我此前的文章. 唯一需要注意的是:因为 Abp 解决方案中有多个项 ...

  4. Docker - 使用Swarm和compose部署服务(containers)

    前言 在之前使用Docker的过程中,一直是用 Docker run 命令单独启动container后再加入Overlay网络的方式实现部署工作的. 这种方式看似直接,但是随着服务所包含的contai ...

  5. 容器基础(七): 使用docker compose部署程序

    配置 在上一节的基础上,  增加如下的docker-compose.yml文件, 然后用docker-compose up命令启动容器进行部署: version: " services: s ...

  6. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  7. Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  8. 在Windows Server 2019通过Docker Compose部署Asp.Net Core

    一.安装Docker Enterprise 安装文档是: https://docs.docker.com/install/windows/docker-ee/ 安装完成后,如下图 二.首先,拉取一个W ...

  9. 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin,password

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  10. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

随机推荐

  1. Python def() 后的-> 符号的作用

    python – 定义函数 def 后面的 ->,:表示的含义-> 常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数返回的类型. : 表示参数的类型建议符示例: de ...

  2. 工作中常用HTML知识点整理

    1.table相关样式 border:设置表格边框大小cellspacing:设置单元格间距cellpadding:设置单元格边界与单元格内容间距border-collapse:设置表格的边框是否被合 ...

  3. websocket 监听端口问题

    有用户反馈使用我们的软件时会出现 ERR_CONNECTION_CLOSED 问题 我们根据反馈排查问题发现是软件的 websocket 监听端口被另一款软件占用了,暂时的解决方法是将占用的软件关闭 ...

  4. pikachu sql inject 时间盲注

    输入框输入任何消息返回内容都是一样的 那么可以考虑插入sleep函数来观察响应时长来判断是否有注入点 输入 kobe' and sleep(3) # 发现页面缓冲3秒才响应,说明确实是注入点 通过if ...

  5. 异步aioredis连接时报错TypeError: duplicate base class TimeoutError问题

    版本 python3.11版本,aioredis 2.0.1版本,redis 7.x版本 redis.conf配置文件 daemonize yes bind 0.0.0.0 port 6379 pro ...

  6. 前端面试题(四)—— 事件委托(Event Delegation)

    一.什么是事件委托 事件委托(Event Delegation)是一种常用的技术. 它利用事件冒泡的特性,在父元素上监听事件,而不是在子元素上直接添加事件监听器. 通过在父元素上捕获事件,然后根据事件 ...

  7. 【Azure 应用服务】App Service For Linux 环境中,如何从App Service中获取GitHub私有库(Private Repos)的Deploy Key(RSA key)呢?

    问题描述 为App Service For Linux配置CI/CD,源代码在GitHub私有库中,在发布时候报错 Cannot find SourceControlToken with name B ...

  8. nebula-br local-store 模式,快速搭建主备集群实践

    因为线上图数据库目前为单集群,数据量比较大,有以下缺点: 单点风险,一旦集群崩溃或者因为某些查询拖垮整个集群,就会导致所有图操作受影响 很多优化类但会影响读写的操作不好执行,比如:compact.ba ...

  9. spark-sql 与hive 常用函数

    窗口函数与分析函数应用场景:(1)用于分区排序(2)动态Group By(3)Top N(4)累计计算(5)层次查询 窗口函数FIRST_VALUE:取分组内排序后,截止到当前行,第一个值LAST_V ...

  10. Sliver C2通关渗透攻击红队内网域靶场2.0

    准备 2012 server 第一台机器开机后,要在C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain​手动运行下 s ...