部署环境准备

安装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. 古猫先生 SATA系列博文转载

    SATA专题文章列表 SATA系列专题之一:浅析Physical Layer物理层OOB信号 SATA系列专题之二:2.0 Link layer链路层概述 SATA系列专题之二: 2.1 Link l ...

  2. Context与Reducer

    Context与Reducer Context是React提供的一种跨组件的通信方案,useContext与useReducer是在React 16.8之后提供的Hooks API,我们可以通过use ...

  3. win32- GetMessage的使用

    BOOL bRet; while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) { if (bRet == -1) { // handle th ...

  4. 学习go语言编程之函数

    函数定义 函数的基本组成:关键字func,函数名,参数列表,返回值,函数体,返回语句. 示例如下: func Add(a int, b int) (ret int, err error) { if a ...

  5. 【Azure 云服务】指标哪去了?在执行 Swap (交换生产部署和Staging部署) 操作后看不见云服务的旧指标

    问题描述 打开云服务(Cloud Service)的Metrics页面,发现过去了指标不见了? 以虚点构成无数据的图表. 问题解答 查看云服务的活动日志(Activity Logs),发现最近执行的操 ...

  6. Binlog分析利器-binlog_summary.py

    ​Binlog中,除了具体的SQL,其实,还包含了很多有价值的信息,如, 事务的开始时间. 事务的结束时间. 事务的开始位置点. 事务的结束位置点. 操作的开始时间(一个事务通常会包含多个操作). 表 ...

  7. Java 数组嵌套

    1 public static void main(String[] args) 2 { 3 int[] arr = new int[] {8,6,3,1,9,5,4,7}; 4 int[] inde ...

  8. 详解Python魔法函数,__init__,__str__,__del__

    1.简介 Python作为一门灵活而强大的编程语言,提供了许多特殊的方法,被称为魔法函数(Magic methods).这些魔法函数以双下划线开头和结尾,能够让我们自定义类的行为,使得Python更加 ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (210)-- 算法导论16.1 1题

    一.根据递归式(16.2)为活动选择问题设计一个动态规划算法.算法应该按前文定义计算最大兼容活动集的大小 c[i,j]并生成最大集本身.假定输入的活动已按公式(16.1)排好序.比较你的算法和GREE ...

  10. [VueJsDev] 目录列表

    [VueJsDev] 目录列表 云服务器域名就一年,gitee上有不给发布,没办法 https://www.vuejsdev.com/ 还是迁移到博客园吧. 文章大部分是2022年9月份左右写的. 已 ...