欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker前后端項(xiàng)目部署完整步驟記錄

 更新時間:2024年04月19日 09:27:06   作者:菠蘿追雪  
最近的開發(fā)中也確實(shí)體會到了這一好處,因?yàn)槲覀冺?xiàng)目涉及給客戶私有化部署及演示等,使用 Docker 部署,在鏡像導(dǎo)出遷移方面很方便,這篇文章主要給大家介紹了關(guān)于Docker前后端項(xiàng)目部署的相關(guān)資料,需要的朋友可以參考下

前言

本文詳細(xì)講解了如何使用 Docker 構(gòu)建鏡像并部署前后端項(xiàng)目,包括如何編寫 Dockerfile 和啟動容器的方式。在實(shí)踐過程中,作者發(fā)現(xiàn)了一些常見問題,并提供了解決方案,例如如何解決無法連接數(shù)據(jù)庫的問題、如何配置 nginx 代理等。本文將對想要深入了解 Docker 鏡像部署前后端項(xiàng)目的讀者提供幫助。

安裝docker

此時你有一臺服務(wù)器,首先安排上docker

# 檢查是否安裝
yum list installed | grep docker

# 在線安裝docker必備依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加阿里云有關(guān) Docker 的軟件源(即Docker的存儲庫)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安裝docker
yum install -y docker-ce docker-ce-cli containerd.io

# docker默認(rèn)配置文件中設(shè)置阿里云的鏡像地址,更多配置參考 https://www.cnblogs.com/yakniu/p/16329611.html
vi /etc/docker/daemon.json
{"registry-mirrors": ["https://gg3gwnry.mirror.aliyuncs.com"]}

開始前

為本項(xiàng)目創(chuàng)建一個虛擬網(wǎng)絡(luò)network,用于多個容器間通信如連接數(shù)據(jù)庫等
docker network create --driver=bridge --gateway=192.168.0.0 --subnet=192.168.0.0/16  mynet-1

創(chuàng)建工作目錄

mkdir /mydata

cd /mydata

部署mysql8

生成掛載目錄和配置

mkdir  mysql mysql/conf mysql/data mysql/mysql-files

vi mysql/conf/cus-docker.cnf

[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
# 數(shù)據(jù)庫忽略大小寫
lower_case_table_names = 1
#免密登錄,如果忘記密碼啟用這個配置
#skip-grant-tables 
# mysql8 換了密碼加密方式,要讓數(shù)據(jù)庫使用舊的密碼加密方式 , 身份插件mysql_native_password 本地密碼
authentication_policy=mysql_native_password
#密碼失效時間-永不過期
default_password_lifetime=0
# 127.0.0.1只能本地訪問,0.0.0.0接收任何來源ip的連接訪問
bind-address = 0.0.0.0
# 最大連接數(shù)
max_connections = 2000
# 設(shè)置數(shù)據(jù)庫時區(qū)為正8區(qū)
default-time_zone = '+8:00'

啟動容器

docker pull mysql:8.0.31

掛載的卷

  • /etc/mysql/conf.d 

mysql的配置文件my.cnf位于/etc/my.cnf,my.cnf會優(yōu)先導(dǎo)入/etc/mysql/conf.d目錄下的所有擴(kuò)展名為cnf的配置文件

  • /var/lib/mysql/ 

mysql的日志、數(shù)據(jù)存放目錄,如導(dǎo)入一個數(shù)據(jù)庫surveyking.sql就會增加一個surveyking的目錄

docker run --name cus-mysql --network mynet-1 --ip 192.168.0.2 --restart=always --privileged=true -v /mydata/mysql/conf:/etc/mysql/conf.d -v /mydata/mysql/data:/var/lib/mysql/ -v /mydata/mysql/mysql-files:/var/lib/mysql-files/ -p 3306:3306  -e  MYSQL_ROOT_PASSWORD=123456 -e LANG=zh_CN.utf8 -e LANGUAGE=zh_CN.utf8  -d mysql:8.0.31

mysql容器初始化

宿主機(jī)拷貝后端項(xiàng)目數(shù)據(jù)庫到mysql容器中

新增后端項(xiàng)目數(shù)據(jù)庫所需的用戶和密碼,并賦予該數(shù)據(jù)庫所有的權(quán)限

docker cp /mydata/db/surveyking.sql cus-mysql:/tmp;
docker exec -it cus-mysql mysql -u root -p
create database surveyking;
use surveyking;
source /tmp/surveyking.sql;
flush privileges;
alter user 'hao'@'%' identified by 'lihao@123456' password expire never;
alter user'hao'@'%' identified with mysql_native_password by 'lihao@123456';
grant all privileges on surveyking.* to 'hao'@'%';
flush privileges;

 一些問題

    mysql8容器啟動后如果一直登錄不上(密碼錯誤),Access denied for user 'root'@'localhost' (use Password Yes) 可以開啟免密登錄,初始化完成再關(guān)閉免密登錄

因?yàn)閙ysql8更改了登錄方式使用密碼加密(明文和密文打八輩子也不等好吧)

    如果容器內(nèi)可以正常進(jìn)入mysql,其它容器或者我們的navicat遠(yuǎn)程工具無法連上mysql,需要檢查登錄的用戶是否是允許的主機(jī)地址,select user,host from mysql.user;

如果host是%即允許任何主機(jī)地址,那么不可遠(yuǎn)程連接很有可能是配置文件bind-address設(shè)置了localhost或者127.0.0.1(我遇到的問題),改為0.0.0.0即可

    將主機(jī)目錄下的文件夾掛載到容器的文件夾后,進(jìn)入到docker容器內(nèi)對應(yīng)的掛載目錄中,運(yùn)行命令ls后提示
ls: cannot open directory .: Permission denied

原因是CentOS7中的安全模塊selinux把權(quán)限禁掉了,解決方法容器啟動時--privileged=true

部署后端項(xiàng)目

拷貝后端jar包到工作目錄 /mydata

構(gòu)建鏡像

/mydata/surveyking-dockerfile文件如下

FROM openjdk:8  
RUN mkdir -p /home/app
# 設(shè)置工作目錄
WORKDIR /mydata
# apt-get update && apt-get install -y iputils-ping; 
COPY surveyking-v1.5.1.jar /home/app/surveyking-v1.5.1.jar
EXPOSE 8080
# 設(shè)置容器啟動時運(yùn)行的命令 
CMD ["java", "-jar","/home/app/surveyking-v1.5.1.jar"]

docker build -f surveyking-dockerfile -t surveyking-image:1.5.1 .

啟動容器

docker run -p 8080:8080 --name surveyking-server --network mynet-1 --ip 192.168.0.3 -d surveyking-image:1.5.1

一些問題

docker ps -a 發(fā)現(xiàn)如果啟動容器后自動退出,即項(xiàng)目運(yùn)行出現(xiàn)異常

docker logs surveyking-server 檢查啟動日志

按網(wǎng)上的資料說同一個自定義network下的多個容器間可以 ping 容器名,但是一直測試報錯ping的容器名是未知的地址,原因未遂,最后還是決定使用固定ip即--ip的參數(shù)在容器run的時候指定

后端項(xiàng)目容器連接數(shù)據(jù)庫的容器的url:

jdbc:mysql://192.168.0.2:3306/surveyking?characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&useUnicode=true

項(xiàng)目啟動沒有問題,但是一旦訪問到數(shù)據(jù)庫響應(yīng)異常docker logs surveyking-server查看后端項(xiàng)目日志,訪問數(shù)據(jù)庫報錯如下

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

網(wǎng)上各種答案都說是url沒有useSSL=false,各種答案都試過都沒得,困擾我灰常的久。嘗試將這個jar包運(yùn)行在主機(jī)電腦連接遠(yuǎn)程服務(wù)器容器的數(shù)據(jù)庫,居然數(shù)據(jù)庫訪問就正常了。

解決嘗試:navicat試連,用戶要有權(quán)限,最重要url上的mysql地址在jar包運(yùn)行的容器中能ping通 (使用自定義的network,能ping通后訪問就解決了)

??注意,mysql在初始化完后一定要關(guān)閉免密登錄,否則也會導(dǎo)致上面的問題

Nginx部署前端項(xiàng)目

創(chuàng)建掛載卷目錄(/mydata工作目錄)

1. mkdir nginx nginx/conf /nginx/html /nginx/logs

2. 拷貝前端打包項(xiàng)目到/nginx/html下

3. vi nginx/conf/nginx.conf

#定義Nginx運(yùn)行的用戶和用戶組
#user  nobody;

#開啟的線程數(shù)(默認(rèn)為1),一般跟邏輯CPU核數(shù)一致
worker_processes  1;

#制定日志路徑,級別。這個設(shè)置可以放入全局塊,http塊,server塊,級別以此為:debug | info | notice | warn | error | crit | alert | emerg
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定nginx進(jìn)程運(yùn)行文件存放地址
#pid        logs/nginx.pid;

events {
    accept_mutex on;   #設(shè)置網(wǎng)路連接序列化,防止驚群現(xiàn)象發(fā)生,默認(rèn)為on

    multi_accept on;  #設(shè)置一個進(jìn)程是否同時接受多個網(wǎng)絡(luò)連接,默認(rèn)為off

    use epoll;      #事件驅(qū)動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport

    #單個進(jìn)程最大連接數(shù)(最大連接數(shù)=連接數(shù)*進(jìn)程數(shù))
    #根據(jù)硬件調(diào)整,和前面工作進(jìn)程配合起來用,盡量大,但是別把cpu跑到100%就行。每個進(jìn)程允許的最多連接數(shù),理論上每臺nginx服務(wù)器的最大連接數(shù)為。
    worker_connections  1024;
}


http {
    #文件擴(kuò)展名與文件類型映射表
    include       mime.types;
	#默認(rèn)文件類型
    default_type  application/octet-stream;
   
    #access_log off; #取消服務(wù)日志
    #引用日志main
    #access_log  logs/access.log  main;
	
    #下面代碼為日志格式的設(shè)定,main為日志格式的名稱,可自行設(shè)置,后面引用
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
    #開啟高效文件傳輸模式,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來輸出文件,對于普通應(yīng)用設(shè)為 on,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負(fù)載。注意:如果圖片顯示不正常把這個改成off。
    #sendfile指令指定 nginx 是否調(diào)用sendfile 函數(shù)(zero copy 方式)來輸出文件,對于普通應(yīng)用,必須設(shè)為on。如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)IO處理速度,降低系統(tǒng)uptime。
    sendfile        on;
    # 當(dāng)使用sendfile 函數(shù),tcp_nopush 才起作用,是tcp協(xié)議棧中的知識點(diǎn)
    # 當(dāng)tcp_nopush = on 時,會調(diào)用tcp_cork 方法,是默認(rèn)的,就是收到的數(shù)據(jù)報不會立即發(fā)送出去,而是等到數(shù)據(jù)報最大時,一次性傳輸出去,有利于解決網(wǎng)絡(luò)堵塞。 
    #tcp_nopush     on;

    # 客戶端連接超時時間
    # = 0 : 表示禁用長連接。
    # = x :表示長連接timeout
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #HttpGZip模塊配置
    #開啟gzip壓縮
    #gzip  on;
    #設(shè)置允許壓縮的頁面最小字節(jié)數(shù)
    #gzip_min_length 1k;
    #申請4個單位為16K的內(nèi)存作為壓縮結(jié)果流緩存
    #gzip_buffers 4 16k;
    #設(shè)置識別http協(xié)議的版本,默認(rèn)為1.1
    #gzip_http_version 1.1;
    #指定gzip壓縮比,1-9數(shù)字越小,壓縮比越小,速度越快
    #gzip_comp_level 2;
    #指定壓縮的類型
    #gzip_types text/plain application/x-javascript text/css application/xml;
    #讓前端的緩存服務(wù)器進(jìn)過gzip壓縮的頁面
    #gzip_vary on; 
	
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
	        # 設(shè)置虛擬主機(jī)的網(wǎng)站根目錄
            root   html/website-surveyking;
	        # history 模式下需要加上這一行,防止刷新頁面時404
	        try_files $uri $uri/ /index.html; 			
            #設(shè)置虛擬主機(jī)默認(rèn)訪問的網(wǎng)頁
            index  index.html index.htm;
        }
        #對 / 啟用反向代理
        #location /sk-api {
            #proxy_pass  http://127.0.0.1:8080;

            #以下是一些反向代理的配置可刪除
            #proxy_redirect off;
	    #rewrite "^/sk-api/(.*)$" /$1 break ; # 最終url中去掉/api前綴

            #后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)IP
            #proxy_set_header Host $host;
            #proxy_set_header X-Real-IP $remote_addr;
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            #client_max_body_size       10m;   #允許客戶端請求的最大單文件字節(jié)數(shù)
            #client_body_buffer_size    128k;  #緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù)
            #proxy_connect_timeout      300;   #nginx跟后端服務(wù)器連接超時時間(代理連接超時)
            #proxy_send_timeout         300;   #后端服務(wù)器數(shù)據(jù)回傳時間(代理發(fā)送超時)
            #proxy_read_timeout         300;   #連接成功后,后端服務(wù)器響應(yīng)時間(代理接收超時)
            #proxy_buffer_size          4k;    #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
            #proxy_buffers              4 32k; #proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的話,這樣設(shè)置
            #proxy_busy_buffers_size    64k;   #高負(fù)荷下緩沖大?。╬roxy_buffers*2)
            #proxy_temp_file_write_size 64k;   #設(shè)定緩存文件夾大小,大于這個值,將從upstream服務(wù)器傳
        #}
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

構(gòu)建nginx鏡像

/mydata/nginx-dockerfile文件如下

FROM centos:7
#給基礎(chǔ)鏡像centos安裝必備的環(huán)境
# 加上“rpm --rebuilddb &&”是為了防止數(shù)據(jù)庫損壞而影響yum安裝。
# 注意,比較保險的做法是有多少個yum命令,就加多少個“rpm --rebuilddb &&”在yum前面。
# 另外yum install一定要安裝的是pcre,zlib,net-tools,make,gcc,wget,tar及其相關(guān)內(nèi)容
RUN rpm --rebuilddb && yum install -y autoconf automake make wget proc-devel net-tools zlib zlib-devel make gcc  g++ openssl-devel pcre pcre-devel tar
# 在線獲取nginx壓縮包(也可以在本地系統(tǒng)(centos)里先下載壓縮包,再ADD命令將包加入到基礎(chǔ)鏡像/usr/src目錄中)
RUN wget http://nginx.org/download/nginx-1.17.1.tar.gz
# 解壓到當(dāng)前目錄
RUN tar -zxvf nginx-1.17.1.tar.gz
# 設(shè)置環(huán)境
WORKDIR nginx-1.17.1
# 配置nginx
RUN ./configure --prefix=/usr/local/nginx && make && make install
# RUN rm -rf /usr/src/nginx
ENV TimeZone=Asia/Shanghai
# 拷貝前端打包資源到nginx容器中
# COPY /mydata/website-surveyking /usr/local/nginx/html  
#開啟 80 和 443 端口
EXPOSE 80      
#https
EXPOSE 443  
#不能直接nginx,可能環(huán)境變量沒有配置
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

docker build -f nginx-dockerfile -t cus-nginx-image:1.7 .

啟動容器

因?yàn)樯厦骁R像的dockerfile文件中指定了編譯安裝nginx的路徑為/usr/local/nginx

掛載的卷

  • /usr/local/nginx/conf/nginx.conf:掛載nginx配置文件到宿主機(jī)中
  • /usr/local/nginx/html:nginx的網(wǎng)站根目錄
  • /usr/local/nginx/logs:nginx的運(yùn)行、錯誤等日志

docker run -p 81:80 --name cus-nginx --network mynet-1 --ip 192.168.0.4 --restart=always --privileged=true -v /mydata/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf -v /mydata/nginx/logs:/usr/local/nginx/logs -v /mydata/nginx/html:/usr/local/nginx/html -d cus-nginx-image:1.7

到此項(xiàng)目部署完畢

部署多個網(wǎng)站(擴(kuò)展)

nginx的配置基礎(chǔ)

root和alias都是用于指定請求的靜態(tài)文件的根目錄
root:當(dāng)Nginx接收到請求時,會將location后面的路徑與root拼接起來作為文件的實(shí)際路徑。這意味著,實(shí)際文件路徑為root路徑/location后面的路徑。

例如 location /surveyking { root: html/p1; }

請求: /surveyking/index.html    實(shí)際:/surveyking/p1/surveyking/index.html 
alias:alias在構(gòu)建文件路徑時會直接使用location后面的路徑匹配請求之后請求的剩余路徑。這意味著,實(shí)際文件路徑為alias路徑/請求路徑 - location后面的路徑。

例如 location /surveyking { alias: html/p1; }

請求: /surveyking/project/index.html    實(shí)際:/surveyking/p1/project/index.html

反向代理

nginx反向代理可以實(shí)現(xiàn)每個api前綴的代理映射到不同的服務(wù)器端口進(jìn)行處理

反向代理主要是解決后端服務(wù)器負(fù)載均衡和保證安全性,而請求轉(zhuǎn)發(fā)則是實(shí)現(xiàn)服務(wù)器請求處理的調(diào)度和功能靈活性
location /sk-api {  proxy_pass  http://192.168.0.3:8080; }

需求:比如我想一個nginx部署多個網(wǎng)站項(xiàng)目,而不是根路徑/直接映射到root指向的項(xiàng)目路徑,而導(dǎo)致其它網(wǎng)站的location地址沒有意義了

首先nginx.conf需要修改

location /surveyking {
     root   html/website-surveyking;
     try_files $uri $uri/ /surveyking/index.html;             
     index  index.html index.htm;
}

修改后就可以了嗎,會報錯

已攔截加載自“http://xx.xx.xx.x:81/assets/index.6e0363b3.js”的模塊,它使用了不允許的 MIME 類型(“text/html”)。
來源為“http://xx.xx.xx.x:81/assets/index.6e0363b3.js”的模塊加載失敗。

因?yàn)関ue工程打包后目錄結(jié)構(gòu)為

- assets  
    -xxx.js
- index.html

index.html對所有資源assets內(nèi)的訪問路徑為http://xxx.xxx.xx.x/assets/xxx.js

需要給所有資源的訪問路徑拼接surveyking前綴,讓nginx能夠匹配location

vue項(xiàng)目中使用vite打包的話,增加配置即可

vite.conf.js

export default defineConfig(({ command, mode }) => {
   const env = loadEnv(mode, process.cwd(), '')
   let base;
   if (command.indexOf('build')!==1) {
      base = '/surveyking'
   } else {
      base = '/'
   }
   return{
    base,
   	{option..} 
   }
}

到這問題還沒結(jié)束,index.html頁面可以正常加載css、js等靜態(tài)資源渲染顯示了

但是如果vue中點(diǎn)擊就了路由跳轉(zhuǎn),使用了history的地址欄是不是surveyking前綴又沒了,如果此時刷新,nginx將該刷新請求解析為/路由地址而不是使try_files $uri $uri/ /surveyking/index.html生效的/surveyking/路由地址

最后,將路由前綴也添加上即可解決,vue3 + vue-router解決方案

const router = createRouter({
    history: createWebHistory("/surveyking"),
    routes: constantRoutes
});

善后工作

如果是1核1G三個容器跑起來,慢慢地越來越卡,一直到程序崩潰,查看服務(wù)器的儀表盤,發(fā)現(xiàn)磁盤讀流量異常的高,總是突然飆升,而cpu使用率則并沒有太大的動靜。

這里應(yīng)該考慮服務(wù)器為容器調(diào)整合適的配置參數(shù),如mysql中的InnoDB緩沖池大小、InnoDB日志文件大小、查詢緩存大小等參,后端項(xiàng)目運(yùn)行日志存儲策略等

通過不斷的摸索改造,可算得出以下的較為合適的配置??

mysql自定義配置中

vi /mydata/mysql/conf/cus-docker.cnf,新增

# mysql8 換了密碼加密方式,要讓數(shù)據(jù)庫使用舊的密碼加密方式 
authentication_policy = mysql_native_password
#密碼失效時間-永不過期
default_password_lifetime=0
# 設(shè)置數(shù)據(jù)庫時區(qū)為正8區(qū)
default-time_zone = '+8:00'
# 設(shè)置MySQL使用的字符集
character-set-server = utf8mb4
# 設(shè)置MySQL使用的存儲引擎
default-storage-engine = InnoDB
# 設(shè)置InnoDB的緩沖池大小,總內(nèi)存的一半或更小的值 
innodb_buffer_pool_size = 256M
# 設(shè)置InnoDB的日志文件大?。ǜ鶕?jù)服務(wù)器性能和數(shù)據(jù)量進(jìn)行調(diào)整),控制InnoDB事務(wù)日志的容量。將其設(shè)置為128M可能過高,尤其是在1核1G的服務(wù)器上??梢钥紤]將其降低一些,例如設(shè)置為64M或者更低,以減少磁盤I/O負(fù)載
innodb_redo_log_capacity = 32M
# 性能要求不高的環(huán)境,可以將其設(shè)置為0或2,以減少寫入日志的頻率,會增加數(shù)據(jù)丟失風(fēng)險
innodb_flush_log_at_trx_commit = 0
# 限制磁盤I/O的資源使用
innodb_io_capacity = 150
innodb_io_capacity_max = 300
# 寫入和讀取I/O線程的數(shù)量,降低能減少I/O線程對服務(wù)器資源的競爭
innodb_write_io_threads = 8
innodb_read_io_threads = 4
# 讓InnoDB自動調(diào)整并發(fā)線程的數(shù)量。這樣可以充分利用服務(wù)器的CPU和I/O資源
innodb_thread_concurrency = 0
# 由于資源受限(1G),限制連接數(shù)
max_connections = 50
# 設(shè)置查詢緩存大?。ㄈ绻鸐ySQL版本>=8.0,請注釋或刪除此行)
# query_cache_size = 0
# 設(shè)置臨時表的最大數(shù)量(根據(jù)服務(wù)器性能和應(yīng)用程序需求進(jìn)行調(diào)整)
tmp_table_size = 64M
# 設(shè)置排序緩存大?。ǜ鶕?jù)服務(wù)器性能和應(yīng)用程序需求進(jìn)行調(diào)整)
sort_buffer_size = 2M
# 設(shè)置線程棧大?。ǜ鶕?jù)應(yīng)用程序需求進(jìn)行調(diào)整)
thread_stack = 256K
# 禁用DNS反向解析(根據(jù)服務(wù)器網(wǎng)絡(luò)環(huán)境進(jìn)行調(diào)整)
skip-name-resolve
 
innodb_log_buffer_size = 8M
# 此參數(shù)確定些日志文件所用的內(nèi)存大小,以M為單位。緩沖區(qū)更大能提高性能,但意外的故障將會丟失數(shù)據(jù)。MySQL開發(fā)人員建議設(shè)置為1-8M之間
 
# 以下兩個參數(shù)控制InnoDB事務(wù)日志文件的大小和緩沖區(qū)大小。在1核1G的服務(wù)器上,可以嘗試將它們降低一些,
# 例如分別設(shè)置為256M和8M,以減少日志文件對磁盤空間的使用。(mysql>8,刪除或注釋,使用innodb_redo_log_capacity替換)
#innodb_log_file_size = 128M
# 此參數(shù)確定數(shù)據(jù)日志文件的大小,更大的設(shè)置可以提高性能,但也會增加恢復(fù)故障數(shù)據(jù)庫所需的時間,
#innodb_log_files_in_group = 3
# 為提高性能,MySQL可以以循環(huán)方式將日志文件寫到多個文件。推薦設(shè)置為3

jar容器啟動時 ,指定日志配置

  --log-driver k8s-file --log-opt max-size=10m --log-opt max-file=3

這里列舉一些分析和清理的一些命令

#運(yùn)行容器CPU、內(nèi)存、網(wǎng)絡(luò)等系統(tǒng)資源指標(biāo)
docker stats
#運(yùn)行的容器的總大小
docker ps -s
#分析磁盤空間占用
docker system df
## 以下注意備份
#清理無用的容器、鏡像和資源
docker system prune
#清理所有未被使用的鏡像
docker image prune -a
#清理所有停止的容器
docker container prune
#清理懸掛的匿名卷
docker volume prune
#清理未使用的網(wǎng)絡(luò)
docker network prune

Docker-Compose實(shí)現(xiàn)

上面的多個步驟,使用單體服務(wù)容器編排Docker-Compose技術(shù)通過一個docker-compose.yaml腳本實(shí)現(xiàn),大致如下

工作目錄 /mydata (在前面的基礎(chǔ)上)

  • mkdir /mysql/initdb
  • 將數(shù)據(jù)庫文件移動到initdb中
  • vi mysql/initdb/surveyking-extend.sql
flush privileges;
alter user 'hao'@'%' identified by 'lihao@123456' password expire never;
alter user'hao'@'%' identified with mysql_native_password by 'lihao@123456';
grant all privileges on surveyking.* to 'hao'@'%';
flush privileges;

mysql容器運(yùn)行后,默認(rèn)執(zhí)行docker.entrypoint.sh,該腳本會去/docker-entrypoint-initdb.d下尋找所有sh、sql等腳本執(zhí)行

docker-compose.yaml

version: '3'
services:
  nginx:
    container_name: cus-nginx
    image: surveyking
    build:
      context: /mydata
      dockerfile: nginx-dockerfile
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "80:80"
    volumes:
      - /mydata/nginx/html:/usr/local/nginx/html
      - /mydata/nginx/conf/usr/lcoal/nginx/conf/nginx.conf
      - /mydata/nginx/logs:/usr/local/nginx/logs
    networks:
      - mynet-1
  mysql:
    image: mysql:8,0.31
    container_name: cus-mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=surveyking
      - MYSQL_USER=hao
      - MYSQL_PASSWORD=lihao@123456
    ports:
      - "3306:3306"
    volumes:
      - /mydata/mysql/data:/var/lib/mysql
      - /mydata/mysql/conf:/etc/mysql/conf.d/
      - /mydata/mysql/initdb:/docker-entrypoint-initdb.d
    networks:
      - mynet-1
    restart: always

  surveyking:
    container_name: surveyking
    image: surveyking
    build:
      context: /mydata
      dockerfile: surveyking-dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - cus-mysql
    networks: 
      - mynet-1
    restart: always
networks:
  my-network:
    driver: bridge
    ipam:
      config:
        - subnet: "192.168.0.101/16"
          gateway: 192.168.0.100

容器編排啟動

docker-compose -f docker-compose.yml up -d

總結(jié)

到此這篇關(guān)于Docker前后端項(xiàng)目部署的文章就介紹到這了,更多相關(guān)Docker前后端項(xiàng)目部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 將Docker容器打包并在其他服務(wù)器上運(yùn)行的全過程

    將Docker容器打包并在其他服務(wù)器上運(yùn)行的全過程

    Docker容器使得應(yīng)用程序的部署和管理變得更加簡單和高效,有時,我們可能需要將一個運(yùn)行中的Docker容器打包,并在其他服務(wù)器上運(yùn)行,本文將詳細(xì)介紹如何實(shí)現(xiàn)這一過程,需要的朋友可以參考下
    2024-05-05
  • 使用Docker部署Tomcat的實(shí)現(xiàn)示例

    使用Docker部署Tomcat的實(shí)現(xiàn)示例

    在本地編寫好了Spring項(xiàng)目,為了實(shí)現(xiàn)能夠隨時地訪問,所以需要將項(xiàng)目部署到服務(wù)器,本文主要介紹了使用Docker部署Tomcat的實(shí)現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • docker自建rustdesk-server遠(yuǎn)程桌面的解決方案

    docker自建rustdesk-server遠(yuǎn)程桌面的解決方案

    RustDesk 是一款可以平替 TeamViewer 的開源軟件,旨在提供安全便捷的自建方案,這篇文章主要介紹了docker自建rustdesk-server遠(yuǎn)程桌面的解決方案,需要的朋友可以參考下
    2024-07-07
  • 利用Docker制作Nginx+PHP鏡像的步驟詳解

    利用Docker制作Nginx+PHP鏡像的步驟詳解

    Nginx是一個高性能的Web和反向代理服務(wù)器,它具有很多非常優(yōu)越的特性,那么這篇文章小編就分步驟向大家介紹如何利用Docker制作Nginx+PHP的鏡像,文章介紹的很詳細(xì),對大家具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • Docker安裝Nacos詳細(xì)圖文教程

    Docker安裝Nacos詳細(xì)圖文教程

    這篇文章主要為大家詳細(xì)介紹了Docker安裝Nacos詳細(xì)圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • docker remote api一鍵TLS加密的實(shí)現(xiàn)

    docker remote api一鍵TLS加密的實(shí)現(xiàn)

    本文主要介紹了docker remote api一鍵TLS加密的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Docker版FFmpeg安裝部署的詳細(xì)步驟

    Docker版FFmpeg安裝部署的詳細(xì)步驟

    項(xiàng)目組開發(fā)過程用因?yàn)橐褂靡纛l格式轉(zhuǎn)換功能,FFmpeg是常見的音視頻處理工具,本文就來介紹一下Docker版FFmpeg安裝部署的詳細(xì)步驟,感興趣的可以了解一下
    2023-10-10
  • 教你一分鐘搞定docker+redis哨兵模式

    教你一分鐘搞定docker+redis哨兵模式

    這篇文章主要介紹了教你一分鐘搞定docker+redis哨兵模式,本文主要講解一主二從三哨兵,特將其部署到一臺機(jī)器上,并通過端口區(qū)分,需要的朋友可以參考下
    2023-03-03
  • 詳解Docker Compose配置文件參數(shù)

    詳解Docker Compose配置文件參數(shù)

    Compose是一個用于定義和運(yùn)行多容器Docker的工具,本文主要介紹了Docker Compose配置文件參數(shù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • docker部署Macvlan實(shí)現(xiàn)跨主機(jī)網(wǎng)絡(luò)通信的實(shí)現(xiàn)

    docker部署Macvlan實(shí)現(xiàn)跨主機(jī)網(wǎng)絡(luò)通信的實(shí)現(xiàn)

    這篇文章主要介紹了docker部署Macvlan實(shí)現(xiàn)跨主機(jī)網(wǎng)絡(luò)通信的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論