部署环境准备

安装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. win10 wsl 运行后没有反应

    wsl 运行一段时间后执行没有反应, 需要重启LxssManager 管理员模式打开 powshell 找到pid, 结束pid >tasklist /svc /fi "service ...

  2. QT - Day 3

    对话框 分类 模态对话框 QDialog dlg(this); dlg.resize(200,100); dlg.exec(); //窗口阻塞 非模态对话框 QDialog *dlg2 = new Q ...

  3. win32 - 从dll中导出api并使用

    从User32.dll中导出MessageBoxW 代码: #include <Windows.h> #include <iostream> #include <func ...

  4. 原来你是这样的JAVA--[07]聊聊Integer和BigDecimal

    今天来聊聊Java中跟数值处理相关的两个类型Integer和BigDecimal. 说起这两个类型,我们肯定都不陌生,但是其中有些容易踩到的坑需要注意避让. Integer 整型我们应该每天都会用到, ...

  5. 常用Linux命令备查

    查找在指定日期创建的文件 2种方式: find命令: # 这种方式查找到的文件会显示路径 find -name *.log -newermt '2022-06-21 08:00:00' ! -newe ...

  6. 公司官网建站笔记(二):在云服务器部署PHP服务(公网访问首页)

    前言   上一篇重新安装了CentOS8.2之后,接下来开始安装部署PHP服务器,让公网可以访问到我们部署的PHP服务器首页.   背景   为什么自行搭建,是因为红胖子专业做相关Qt软件以及终端设备 ...

  7. django学习第十五天-modelform的补充

    基于form组件和modelform组件改造图书管理系统 详情可以去图书管理系统分类中查看 基于form组件和modelform组件改造图书管理系统 modelform的补充 class BookMo ...

  8. VMware虚拟机Ubuntu系统连接网络过程

    网络和Internet设置--高级网络设置--更多网络适配器选项--WLAN. 右键选择属性--共享,勾选允许连接,选择VMnet8.(若勾选了其它,之后再想换回来,可以先取消勾选,点确定,再进入勾选 ...

  9. RocketMQ(5) 订阅关系的一致性规范

    多个消费者组订阅了多个Topic,并且每个消费者组里的多个消费者实例的订阅关系应该保持一致. 例如下消费关系, 不同的消费组,消费不同的队列,相同的消费组订阅相同的队列,tag 错误示例: 一个消费者 ...

  10. Java instanceof 全小写 关键字使用

    1 package com.bytezreo.duotai2; 2 3 import java.sql.Date; 4 5 /** 6 * 7 * @Description 面向对象的特征三 ---- ...