博客專欄

        EEPW首頁 > 博客 > 實用干貨分享(4)- 分布式金融PaaS容器化部署實戰

        實用干貨分享(4)- 分布式金融PaaS容器化部署實戰

        發布人:中電金信人 時間:2022-06-05 來源:工程師 發布文章

         編輯

         


        一、學習鏈接


        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. 容器不斷重啟

        如果容器不斷重啟,或者無法直接啟動。而控制臺的日志并沒有給出一個明確的打印。會給異常排錯帶來很大的困難。解決方案就是將容器中的應用日志掛載到宿主機的指定路徑下,當容器發生啟動異常或者不斷重啟的問題時,可以在宿主機中進行日志查看。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 干貨

        技術專區

        關閉
        主站蜘蛛池模板: 大埔县| 广西| 波密县| 古丈县| 视频| 边坝县| 石泉县| 陇川县| 平阳县| 三门峡市| 昌黎县| 临沭县| 康马县| 卢湾区| 佛山市| 青阳县| 瑞安市| 专栏| 同德县| 临沧市| 武城县| 桦甸市| 尼勒克县| 克拉玛依市| 淮阳县| 安达市| 东乡| 临漳县| 东方市| 延庆县| 梅州市| 佛教| 桐城市| 鹿泉市| 东源县| 雅安市| 道真| 保德县| 松江区| 磐石市| 沁阳市|