部署环境准备

安装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. Slot 的含义

    Slot 解释 1)slot就是槽的意思,是一个资源单位,只有给task分配了一个slot之后,这个task才可以运行.slot分两种,map slot沪蓉reduce slot.另外,slot是一个 ...

  2. 对称加密算法汇总:AES DES 3DES SM4 java 实现入门

    密码的世界 如果你是黑帮老大,平时和手下沟通,如何保证自己的信息安全呢? 在神探夏洛克的第一季中,就讲述了一个如何侦破黑帮的加密交流的故事. 这种密码利用的是密码字典. 密码本身可以是一本书,比如常见 ...

  3. 开源神器:自动生成随机 mock 数据测试对象

    测试的痛点 大家好,我是老马. 每一位开发者大部分工作都是写代码.测试代码.修BUG. 我们有很多测试代码,总是花费大量的实践去构建一个对象. 于是就在想,能不能自动填充一个对象呢? 于是去 gith ...

  4. U盘安装win7提示缺少所需的CD/DVD驱动器设备驱动程序

    问题: 最近使用U盘启动盘安装win7,系统弹出提示框: 解决方法: U盘别插在usb3.0的口(蓝色),换成一个usb2.0的口就可以了

  5. win32-WH_KEYBOARD的使用

    我们使用WH_KEYBOARD来禁用记事本的ALT的按键 .cpp #include <Windows.h> #include <stdio.h> #include <t ...

  6. XILINX SDK烧录FLASH报错不支持旧版hw_server

    最近频繁遇到SDK报错,说是不支持hw_server旧版本,此时打开vivado识别的时候也是一样报错,可能原因是我电脑安装了多个版本的VIVADO导致的,那么怎么解决呢? 打开任务管理器,kill ...

  7. AFNetworking整体框架简单整理

    一.AFNetworking整体框架是怎样的 1.UIKit集成模块 UIKit 2.请求序列化 Serialization 3.响应序列化 Serialization 4.会话 NSURLSessi ...

  8. Gitlab的部署

    # Gitlab sudo docker run --detach \   --hostname gitlab.example.com \   --publish 443:443 --publish ...

  9. 【Azure 应用服务】Azure Function 不能被触发

    问题描述 Azure Function 不能被Postman 触发,错误信息如下: Error: write EPROTO 4020778632:error:100000f7:SSL routines ...

  10. STM32SPIFLASH读写

    STM32SPIFLASH读写 1.1 SPI注意事项 SPI是同步通信,即通信双方每次信息交互必会带有一问一答,这代表在正常的单核MCU(例如STM32)中很难实现软件模拟的双向SPI通信(TFT屏 ...