​编辑

一、学习链接

http://www.itmuch.com/docker/00-docker-lession-index/

二、安装步骤

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum-config-manager --enable docker-ce-edge # 启用edge仓库

sudo yum-config-manager --enable docker-ce-test # 启用test仓库

sudo yum makecache fast

sudo yum install docker-ce

sudo systemctl start docker

sudo docker run hello-world

三、常用操作指令

下载镜像

镜像下载地址:hub.docker.com

或者使用docker search filebeat (搜索镜像)

编辑

容器重启

docker restart nginx (容器的name)

打包及启动指令

docker build -t dap/mq_server:v1

docker run --name mq_server \

--restart=always \

-p 8899:8899 \

-v /root/mq/mq/application.properties:/opt/mq/application.properties \

-d dap/mq_server:v1 \

查看容器日志

docker logs -f nginx (容器的name)

显示所有的容器(包括未运行的)

docker ps -a

进入容器内部的bash窗口

docker exec -it nginx /bin/bash

查看容器元数据,可看到挂载信息

docker inspect mysql (容器的name)

生成和加载docker镜像tar包

docker save youimages > name

docker load < yourimages

镜像重命名

docker image tag [镜像id] 新名称

查询CentOS的bash路径

[root@deploy dap-skywalking]# docker run -it centos:7.7.1908 whereis bash

bash: /usr/bin/bash

编辑

挂载本地时间

/ect/localtime -- 挂载本地的时间到docker容器中解决日志打印的时间格式问题

四、常见问题

运行docker容器

iptables: No chain/target/match by that name

编辑

执行一下 :systemctl restart docker

编辑

https://blog.csdn.net/u013948858/article/details/83115388

安装docker客户端遇到的问题

编辑

https://www.cnblogs.com/maodot/p/7654918.html

redis 启动权限问题

更改redis 路径下的权限,也可以使用第5个问题的解决思路

chown 1000:1000

chmod 1777

https://blog.csdn.net/luozhonghua2014/article/details/80369469

文件创建权限问题

/opt/app/skywalking-apm-bin/logs/skywalking-oap-server.log

编辑

在启动指令中增加 :--privileged=true (不推荐)

推荐方法:直接在Dockerfile中添加 RUN chmod -R 777 /opt/app/ 命令来修改该文件夹下的所有权限

编辑

ADD与COPY的区别

对于需要在外部单独修改的配置文件,推荐使用COPY指令,而不是ADD指令。

ADD指令只针对于tar包文件,指令本身有解压的功能。

五、DockerFile

mysql服务搭建

docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.20

CREATE DATABASE IF NOT EXISTS config_server DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

CREATE DATABASE IF NOT EXISTS mq_console_new DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

使用docker命令登录容器内的mysql:

docker exec -it mysql /bin/bash

mysql -u root -p 123456

Dockerfile:自定义MySQL容器,添加自定义配置:

FROM mysql:5.7.20

RUN echo "[mysqld]" >> /etc/mysql/mysql.cnf \

&& echo "lower_case_table_names=1" >> /etc/mysql/mysql.cnf \

&& echo "character_set_server=utf8" >> /etc/mysql/mysql.cnf \

&& echo "init_connect='SET NAMES utf8'" >> /etc/mysql/mysql.cnf \

&& echo "sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" >> /etc/mysql/mysql.cnf \

&& echo "[client]" >> /etc/mysql/mysql.cnf \

&& echo "default-character-set=utf8" >> /etc/mysql/mysql.cnf

直接使用java命令启动

FROM centos:7.7.1908

MAINTAINER zhaikai

WORKDIR /usr/local

ADD jdk-8u251-linux-x64.tar.gz /usr/local

ENV JAVA_HOME=/usr/local/jdk1.8.0_251

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

ENV LANG C.UTF-8

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo 'Asia/Shanghai' >/etc/timezone

WORKDIR /opt/config

ADD dap-boot-starter-config-server-1.0-SNAPSHOT.jar /opt/config/app.jar

#VOLUME application-config.yml -- 写法有些问题,还需要一些其他工作

COPY application-config.yml /opt/config/application-config.yml

#EXPOSE 8087

ENTRYPOINT ["java","-jar","/opt/config/app.jar","--spring.config.location=/opt/config/application-config.yml"]

使用启动脚本启动

FROM centos:7.7.1908

MAINTAINER zhaikai

WORKDIR /usr/local

ADD jdk-8u201-linux-x64.tar.gz /usr/local

ENV JAVA_HOME=/usr/local/jdk1.8.0_201

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

ENV LANG C.UTF-8

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo 'Asia/Shanghai' >/etc/timezone

WORKDIR /opt/app

ADD batch-web.tar.gz /opt/app/

RUN chmod -R 777 /opt/app/

ENTRYPOINT ["/usr/bin/bash","-c","/opt/app/batch-web/bin/start.sh"]

下载中文语言包

日志模块需要额外下载中文语言包,用以解决配置文件中的中文无法在页面正常显示的问题。

FROM centos:7.7.1908

MAINTAINER zhaikai

WORKDIR /usr/local

ADD jdk-8u201-linux-x64.tar.gz /usr/local

ENV JAVA_HOME=/usr/local/jdk1.8.0_201

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo 'Asia/Shanghai' >/etc/timezone

RUN yum install kde-l10n-Chinese -y

RUN yum install glibc-common -y

RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

#RUN export.UTF-8

#RUN echo "export.UTF-8" >> /etc/locale.conf

#ENV LANG zh_CN.UTF-8 ENV LC_ALL zh_CN.UTF-8

#RUN yum -y install kde-l10n-Chinese --nogpgcheck

#RUN yum reinstall -y glibc-common --nogpgcheck

#RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

#RUN yum -y groupinstall chinese-support

ENV.UTF-8

WORKDIR /opt/app

ADD logger-deploy.tar.gz /opt/app/

RUN chmod -R 777 /opt/app/

ENTRYPOINT ["/usr/bin/bash","-c","/opt/app/logger-deploy/startup.sh"]

Nginx前端代理

FROM nginx:latest

MAINTAINER zhoulei

ENV LANG C.UTF-8

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo 'Asia/Shanghai' >/etc/timezone

ADD config-web.tar.gz /usr/share/nginx/html

打包以及启动指令:

docker build -t dap/console:v1 .

docker run -itd \

--privileged=true \

-p 8888:80 \

--restart=always \

--name nginx \

-v /home/docker/dap-web/nginx.conf:/etc/nginx/nginx.conf \

-v /var/log/nginx/logs:/var/log/nginx \

-d dap/console:v1 \

使用域名进行动态加载

DNS配置:

containers 同一级下进行配置:

hostAliases:

- hostnames: ['域名']

ip: IP地址

编辑

nginx配置文件

127.0.0.1 配置域名

编辑

六、Skywalking

SkyWalking服务

需要配置端口映射:8090(前端)、11800(RPC)、11800(HTTP)

注意一下一定要执行SkyWalking的初始化脚本(oapServiceInit.sh),里面包含了创建ES索引的各种操作。

三个Demo

有几个关键步骤:

1、将agent包放入demo路径下

2、修改启动脚本,将IP和端口设为负载均衡的IP端口

编辑

3、修改jar包中zk的地址

编辑

4、eCas-order启动后,需要将配置文件中的8107端口进行负载均衡的配置

5、eCas-order启动后,需要该应用将日志路径挂载到filebeat指定的节点机器中的指定路径中,以便日志系统进行采集

七、容器化总结

在进行容器化部署时,可能会出现如下问题:

1. 中文语言包

由于容器中没有安装中文包,所以日志模块部署上去后,原本是中文的某些显示项,会变成乱码。解决方法见【DockerFile】章节中的【下载中文语言包】

2. 尽量保证一个容器运行一个应用

容器是docker运行的一个最小单元,往往推荐只运行一个应用。如果运行多个应用,一旦遇到问题,很难通过容器平台对错误进行定位。因为日志是多个应用杂乱无章的显示;多个应用之间的启动、以及调用可能也会出现相应的问题;容器的重新打包也会相应的变得复杂起来。所以最好的部署方式是一个容器运行一个应用。

3. nohup尽量不要使用

因为docker logs获取的是标准控制台的日志打印。nohup会影响日志的查看,影响我们对容器的启动情况进行排查。

4. VOLUME尽量不要使用

DockerFile中如果需要添加配置文件,尽量不要使用VOLUME 进行挂载。使用COPY命令即可,如果没有搞清楚文件夹和文件之间的关系,抑或没有提前处理好权限问题的话,使用VOLUME会出现很多问题。

5. 容器不断重启

如果容器不断重启,或者无法直接启动。而控制台的日志并没有给出一个明确的打印。会给异常排错带来很大的困难。解决方案就是将容器中的应用日志挂载到宿主机的指定路径下,当容器发生启动异常或者不断重启的问题时,可以在宿主机中进行日志查看。

实用干货分享(4)- 分布式金融PaaS容器化部署实战的更多相关文章

  1. 逆向实用干货分享,Hook技术第一讲,之Hook Windows API

    逆向实用干货分享,Hook技术第一讲,之Hook Windows API 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) ...

  2. 逆向实用干货分享,Hook技术第二讲,之虚表HOOK

    逆向实用干货分享,Hook技术第二讲,之虚表HOOK 正好昨天讲到认识C++中虚表指针,以及虚表位置在反汇编中的表达方式,这里就说一下我们的新技术,虚表HOOK 昨天的博客链接: http://www ...

  3. 浅谈surging服务引擎中的rabbitmq组件和容器化部署

    1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...

  4. 谈谈surging引擎的tcp、http、ws协议和如何容器化部署

    1.前言 分布式已经成为了当前最热门的话题,分布式框架也百花齐放,群雄逐鹿.从中心化服务治理框架,到去中心化分布式服务框架,再到分布式微服务引擎,这都是通过技术不断积累改进而形成的结果.esb,网关, ...

  5. Jaeger容器化部署

    概述 Jaeger是由Uber开源的分布式追踪系统,一套完整的Jager追踪系统包括Jaeger-client.Jaeger-agent.Jaeger-collector.Database和Jaege ...

  6. elk 7.9.3 版本容器化部署

    ELK-V7.9.3 部署 为什么用到ELK? 平时我们需要进行日志分析的时候,可以直接在日志文件中 grep.awk 就可以过滤出自己想要的信息及关键字,但规模较大的场景中,此方法极大的减低了效率, ...

  7. .NET Core+MySql+Nginx 容器化部署

    .NET Core容器化@Docker .NET Core容器化之多容器应用部署@Docker-Compose .NET Core+MySql+Nginx 容器化部署 GitHub-Demo:Dock ...

  8. 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))

    容器化部署一套云服务系列 1. 容器化部署一套云服务之Jenkins 一.购买服务器 服务器

  9. angular应用容器化部署

    angular 应用容器化部署 Intro 我自己有做一个个人主页,虽然效果不怎么样(不懂设计的典型程序猿...),但是记录了我对于前端框架及工具的一些实践, 从开始只有一个 angularjs 制作 ...

  10. Flask容器化部署原理与实现

    本文将介绍Flask的部署方案:Flask + Nginx + uWSGI,并使用docker进行容器化部署,部署的实例来源 Flask开发初探,操作系统为ubuntu. Flask系列文章: Fla ...

随机推荐

  1. 服务器Linux的一些常用命令,收藏备用!

    在Linux服务器的管理和维护过程中,掌握一些常用的命令是非常必要的.这些命令不仅可以帮助你更好地了解和控制系统,还能提高工作效率,减少错误发生的概率.本文将详细介绍一些在Linux服务器上常用的命令 ...

  2. go 实现sse

    package chat import ( "encoding/json" "github.com/zeromicro/go-zero/core/logx" & ...

  3. GDOI绝望记——人生第一次省选普及

    时光匆匆,如白驹过隙. 转眼之间,我一在OI之路上走了2年半了.. 岁月不饶人,我却在不经意间饶了岁月. 自己到底是不是不如别人,这,是取决于自己的心态吧 Preface 人生中第一次去深圳(应该是吧 ...

  4. JOI Open 2017(口胡)

    T1 Amusement Park 题意:通信题.给定一张 \(n\) 个点 \(m\) 条边的无向连通图.Alice 会得到一个 \([0, 2^{60})\) 中的数 \(x\),并且她需要给这张 ...

  5. AvaloniaTCP-v1.0.0:学习使用Avalonia/C#进行TCP通讯的一个简单Demo

    TCP通讯简介 TCP(传输控制协议,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议.它确保数据包按顺序传输,并在必要时进行重传,以保 ...

  6. 云原生爱好者周刊:Cilium 放大招,发布服务网格 Beta 版

    云原生一周动态要闻: Cilium 推出服务网格测试计划 Knative 已申请成为 CNCF 的孵化项目 Kubernetes v1.23 即将发布 Lens 5.3 发布 开源项目推荐 文章推荐 ...

  7. 轻量级网络-CSPNet 论文解读

    摘要 1,介绍 2,相关工作 3,改进方法 3.1,Cross Stage Partial Network 3.2,Exact Fusion Model 4,实验 4.1,实验细节 4.2,消融实验 ...

  8. CMake 生成器表达式---条件表达式和逻辑运算符

    [写在前面] CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在目标属性和生成器表达式上下文中.这些表达式允许你根据不同的平台.配置或编译器来定制构建过程. 本文引用的 ...

  9. 重温c语言之,7天开整,就是随便的写写,第一天

    一:转义字符 \t是一个字符,在printf里面,只占一个位置: 其他什么的抽象字符,用一个'\'+抽象字符就可以出现: \ddd这个是8进制的,可以转成10进制的,之后参考ASCLL码表即可 二:枚 ...

  10. gal game 杂谈——《GINKA》

    gal game 杂谈--<GINKA> 剧情梳理 Ps:女主分为小学阶段和高中阶段,这里称小学阶段为小时候的女主,高中阶段为大女主,分离出来爱的为GINKA(长相是小时候的女主). 1. ...