0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

docker compose一鍵打包部署項(xiàng)目的實(shí)踐

馬哥Linux運(yùn)維 ? 來(lái)源:稀土掘金技術(shù)社區(qū) ? 作者: 前端中后臺(tái) ? 2022-08-30 11:03 ? 次閱讀
【導(dǎo)讀】本文介紹了 docker compose 一鍵打包部署項(xiàng)目的實(shí)踐。

一、前言

我們常常見(jiàn)到很多比較棒的開(kāi)源項(xiàng)目,但在本地安裝運(yùn)行的話就會(huì)很復(fù)雜,要配置不同的環(huán)境,安裝不同的依賴(lài),好一點(diǎn)的會(huì)用docker直接拉取,或者打包好。

這些無(wú)疑都會(huì)增加初學(xué)者上手的成本,所以這篇文章總結(jié)了下目前比較常用的解決方法之一:

使用docker-compose同時(shí)管理多個(gè)服務(wù),只需要一行命令docker compose up -d,就可以啟動(dòng)一個(gè)包含后端項(xiàng)目、前端項(xiàng)目、數(shù)據(jù)庫(kù)的完整服務(wù)。

docker-compose作為docker容器的編排工具,可以幫助我們實(shí)現(xiàn)管理多個(gè)docker容器。

其實(shí)整體的過(guò)程并不難,但要配置完成,也要很多步驟,這篇文章主要是從實(shí)戰(zhàn)的角度,將整個(gè)過(guò)程串起來(lái)。涉及的知識(shí)點(diǎn)包括:nginx、docker、docker-compose、node、mysql也需要了解下。
適合讀下去的朋友:
  • 對(duì)Docker有基本的了解
  • 同時(shí)需要部署多個(gè)項(xiàng)目
  • 需要開(kāi)源項(xiàng)目或者自建項(xiàng)目的整體部署
  • 需要打包部署一整個(gè)網(wǎng)站
需要提前準(zhǔn)備的:
  • Docker安裝并啟動(dòng)(演示版本如下)
98106d6a-27a0-11ed-ba43-dac502259ad0.jpg
  • docker-compose(安裝Docker同時(shí)會(huì)自動(dòng)安裝,如果沒(méi)有可以自行安裝,也很簡(jiǎn)單)
  • 一個(gè)前端項(xiàng)目(這里演示使用React SPA)
  • 一個(gè)后端項(xiàng)目(這里使用Express)
983271a8-27a0-11ed-ba43-dac502259ad0.jpg

如圖所示,通過(guò)docker-componse.yml文件一次啟動(dòng)不同的容器,然后他們都可以對(duì)外提供服務(wù)。

二、前端項(xiàng)目構(gòu)建

1、前端項(xiàng)目處理

首先我們通過(guò)CRA下載一個(gè)項(xiàng)目模版,為了可以模擬實(shí)際的項(xiàng)目需要,對(duì)下載的模版做一些處理,讓這個(gè)項(xiàng)目可以

1、區(qū)分當(dāng)前項(xiàng)目是預(yù)發(fā)環(huán)境還是生產(chǎn)環(huán)境

2、引入Axios可以請(qǐng)求接口

接著我們打包yarn build:prod,打包后的文件夾build就是我們要部署的靜態(tài)資源。 在前面工程化實(shí)踐過(guò)程中提過(guò)相關(guān)內(nèi)容,如果有問(wèn)題可以參考下
  • 前端工程化實(shí)踐 - React項(xiàng)目配置預(yù)發(fā)環(huán)境和生產(chǎn)環(huán)境(三)[1]

2、拉取Nginx鏡像部署

我們通過(guò)Docker部署前面打包的靜態(tài)資源

當(dāng)前項(xiàng)目的路徑是/Users/user/Desktop/mine/fronted-demo2/build

直接運(yùn)行下面命令行,啟動(dòng)前端服務(wù)

	
		
dockerrun-d-p80:80-v/Users/user/Desktop/mine/fronted-demo2/build:/usr/share/nginx/html--namefrontend-testnginx

	

985299d8-27a0-11ed-ba43-dac502259ad0.jpg

通過(guò)本機(jī)80端口訪問(wèn),發(fā)現(xiàn)當(dāng)前服務(wù)是生產(chǎn)環(huán)境,并且由于后端服務(wù)沒(méi)有部署,此時(shí)數(shù)據(jù)庫(kù)拿到的數(shù)據(jù)為空。 9868807c-27a0-11ed-ba43-dac502259ad0.png ?測(cè)試,我們切換路由,發(fā)現(xiàn)頁(yè)面404了,是因?yàn)閱雾?yè)面應(yīng)用路由在前端,需要nginx轉(zhuǎn)發(fā)下,接著我們用項(xiàng)目中的Nginx配置覆蓋容器中的配置

3、提取Nginx配置到項(xiàng)目中

首先,我們進(jìn)入上一步的Docker容器,可以看到Nginx的路徑。


	
docker exec -it frontend-test /bin/bash
9891cc7a-27a0-11ed-ba43-dac502259ad0.jpg ?在項(xiàng)目根目錄下新建nginx/default.conf

	
server {    listen  80;    server_name  localhost;    underscores_in_headers  on;    root /home/frontend;    location / {      try_files $uri $uri/ @router;      index index.html;    }    location @router {      rewrite ^.*$ /index.html last;    }}
然后通過(guò)掛載的方式,啟動(dòng)容器,發(fā)現(xiàn)訪問(wèn)正常。

4、編寫(xiě)Dockerfile文件


	
FROM nginx
WORKDIR /home/frontend
COPY build .
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
在項(xiàng)目根目錄下,新建Dockerfile文件,其中包括基礎(chǔ)鏡像、工作目錄、將項(xiàng)目copy到鏡像,將Nginx配置文件復(fù)制到鏡像中。

5、構(gòu)建前端服務(wù)鏡像并啟動(dòng)


	
docker build -t frontend .
docker images
docker run -d -p 80:80 --name frontend-v1 frontend
可以發(fā)現(xiàn)前端服務(wù)的鏡像已經(jīng)打包完成并啟動(dòng),打開(kāi)本地80端口訪問(wèn),測(cè)試完畢可以刪除,然后留鏡像frontend備用。也可以將鏡像推送鏡像倉(cāng)庫(kù),后面直接通過(guò)遠(yuǎn)程來(lái)拉取也可以。
主意:如果之前的Docker容器啟動(dòng),需要先關(guān)掉,否則會(huì)報(bào)端口被占用,如果不刪除,就需要修改重新啟動(dòng)容器的名字。

三、數(shù)據(jù)庫(kù)啟動(dòng)

1、拉取并啟動(dòng)數(shù)據(jù)庫(kù)、連接數(shù)據(jù)庫(kù)


	
		
dockerrun-p3306:3306--restart=always--privileged=true--namemysql-v/Users/user/Desktop/mysql/data:/var/lib/mysql-v/Users/user/Desktop/mysql/my.cnf:/etc/mysql/my.cnf-eMYSQL_ROOT_PASSWORD="123456"-dmariadb

一行命令啟動(dòng)Mariadb,這里選擇Mariadb是由于我m1的電腦,不支持mysql鏡像,所以改成了Mariadb,使用是一樣。上面的命令除了啟動(dòng)數(shù)據(jù)庫(kù)服務(wù),還設(shè)置了數(shù)據(jù)的一些配置,密碼,將數(shù)據(jù)庫(kù)的數(shù)據(jù)放在了本地。


	
[mysqld]skip-name-resolveuser=rootcharacter-set-server=utf8default_authentication_plugin=mysql_native_passwordsql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONlower_case_table_names=1 #忽略表名大小寫(xiě)
[client]default-character-set=utf8[mysql]default-character-set=utf8

2、新建庫(kù)和表

這里可以進(jìn)入容器中操作數(shù)據(jù)庫(kù),還可以使用客戶端連接數(shù)據(jù)庫(kù) 989fd70c-27a0-11ed-ba43-dac502259ad0.jpg ?

四、后端項(xiàng)目啟動(dòng)

1、下載Express項(xiàng)目模版并連接數(shù)據(jù)庫(kù)

這里配置數(shù)據(jù)庫(kù),寫(xiě)好項(xiàng)目接口,保本地啟動(dòng)服務(wù)正常。

2、拉起鏡像,部署鏡像

部署服務(wù),我們選擇使用pm2,為了區(qū)分生產(chǎn)環(huán)境和預(yù)發(fā)環(huán)境,我們?cè)诟夸浵滦陆╬m2.config.js,然后通過(guò)傳入不同的參數(shù),啟動(dòng)對(duì)應(yīng)的環(huán)境


	
module.exports = {  apps : [      {        name: "myapp",        script: "./bin/www",        watch: true,        env: {            "NODE_ENV": "development"        },        env_production: {            "NODE_ENV": "production",        }      }  ]}
啟動(dòng)預(yù)發(fā)環(huán)境pm2 start pm2.config.js --env development 啟動(dòng)生產(chǎn)環(huán)境pm2 start pm2.config.js --env production 再項(xiàng)目中通過(guò)process.env.NODE_ENV讀取

3、編寫(xiě)Dockerfile并構(gòu)建新的鏡像


	
FROM keymetrics/pm2
RUN mkdir -p /home/backend
WORKDIR/home/backend

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    3492

    瀏覽量

    43055
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    503

    瀏覽量

    22234
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    158

    瀏覽量

    12346
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    498

    瀏覽量

    12289

原文標(biāo)題:Docker-compose打包項(xiàng)目一鍵部署

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用Helm 在容器服務(wù)k8s集群一鍵部署wordpress

    :可以根據(jù)用戶自身的需要,修改wordpress安裝charts的些默認(rèn)配置,當(dāng)然使用默認(rèn)配置安裝也是沒(méi)問(wèn)題的,輸入本次安裝release的名字,點(diǎn)擊部署后就完成了一鍵部署。我們使用
    發(fā)表于 03-29 13:38

    云計(jì)算核心技術(shù)Docker教程:Docker Compose的pull和push命令詳解

    Docker-Compose pull命令可以拉取docker-compose.yml或者docker-stack.yml文件中定義的服務(wù)關(guān)聯(lián)的鏡像,Docker-Compose pu
    的頭像 發(fā)表于 11-17 18:22 ?9409次閱讀

    Docker-compose常用的解決方法

    我們常常見(jiàn)到很多比較棒的開(kāi)源項(xiàng)目,但在本地安裝運(yùn)行的話就會(huì)很復(fù)雜,要配置不同的環(huán)境,安裝不同的依賴(lài),好點(diǎn)的會(huì)用docker直接拉取,或者打包好。
    的頭像 發(fā)表于 09-05 15:22 ?1712次閱讀

    Jenkins+docker+springboot一鍵自動(dòng)部署項(xiàng)目

    本文章實(shí)現(xiàn)最簡(jiǎn)單全面的Jenkins+docker+springboot 一鍵自動(dòng)部署項(xiàng)目,步驟齊全,少走坑路。
    的頭像 發(fā)表于 09-14 09:30 ?1672次閱讀

    Jenkins+Docker一鍵自動(dòng)化部署SpringBoot最簡(jiǎn)流程

    簡(jiǎn)述實(shí)現(xiàn)步驟:在docker安裝jenkins,配置jenkins基本信息,利用Dockerfile和shell腳本實(shí)現(xiàn)項(xiàng)目自動(dòng)拉取打包并運(yùn)行。
    的頭像 發(fā)表于 11-23 10:16 ?1479次閱讀

    Jenkins+Docker一鍵自動(dòng)化部署SpringBoot項(xiàng)目

    本文章實(shí)現(xiàn)最簡(jiǎn)單全面的Jenkins+docker+springboot 一鍵自動(dòng)部署項(xiàng)目,步驟齊全,少走坑路。
    的頭像 發(fā)表于 12-14 10:04 ?1034次閱讀

    Jenkins+Docker實(shí)現(xiàn)一鍵自動(dòng)化部署項(xiàng)目!

    本文章實(shí)現(xiàn)最簡(jiǎn)單全面的Jenkins+docker+springboot 一鍵自動(dòng)部署項(xiàng)目,步驟齊全,少走坑路。
    的頭像 發(fā)表于 01-06 15:36 ?1335次閱讀

    關(guān)于Jenkins+docker+springboot一鍵自動(dòng)部署項(xiàng)目

    本文章實(shí)現(xiàn)最簡(jiǎn)單全面的Jenkins+docker+springboot 一鍵自動(dòng)部署項(xiàng)目,步驟齊全,少走坑路。
    的頭像 發(fā)表于 05-16 08:59 ?927次閱讀
    關(guān)于Jenkins+<b class='flag-5'>docker</b>+springboot<b class='flag-5'>一鍵</b>自動(dòng)<b class='flag-5'>部署</b><b class='flag-5'>項(xiàng)目</b>

    Jenkins+Docker一鍵自動(dòng)化部署SpringBoot應(yīng)用最精簡(jiǎn)流程

    簡(jiǎn)述實(shí)現(xiàn)步驟:在docker安裝jenkins,配置jenkins基本信息,利用Dockerfile和shell腳本實(shí)現(xiàn)項(xiàng)目自動(dòng)拉取打包并運(yùn)行。
    的頭像 發(fā)表于 11-06 16:27 ?2442次閱讀
    Jenkins+<b class='flag-5'>Docker</b><b class='flag-5'>一鍵</b>自動(dòng)化<b class='flag-5'>部署</b>SpringBoot應(yīng)用最精簡(jiǎn)流程

    docker部署mysql的壞處

    Docker種虛擬化技術(shù),它允許開(kāi)發(fā)人員在容器內(nèi)打包應(yīng)用程序及其所有依賴(lài)項(xiàng),從而實(shí)現(xiàn)在不同環(huán)境中運(yùn)行相同的應(yīng)用程序的能力。然而,在使用 Docker
    的頭像 發(fā)表于 11-23 09:29 ?1573次閱讀

    docker核心組件有哪些

    Docker種開(kāi)源的容器化平臺(tái),它能夠?qū)崿F(xiàn)將應(yīng)用程序及其依賴(lài)項(xiàng)打包個(gè)可移植的容器中,從而實(shí)現(xiàn)快速、可重復(fù)、可擴(kuò)展的部署和管理。
    的頭像 發(fā)表于 11-23 09:47 ?2154次閱讀

    如何利用樹(shù)莓派安裝DockerDocker-compose呢?

    本文主要演示了樹(shù)莓派如何安裝DockerDocker-compose的過(guò)程。
    的頭像 發(fā)表于 12-14 16:19 ?3259次閱讀
    如何利用樹(shù)莓派安裝<b class='flag-5'>Docker</b>和<b class='flag-5'>Docker-compose</b>呢?

    寶塔面板一鍵免費(fèi)部署LobeChat聊天機(jī)器人開(kāi)發(fā)自己私有的ChatGPT

    寶塔面板部署一鍵免費(fèi)部署LobeChat自己的私有聊天機(jī)器人 支持市場(chǎng)主流AId api調(diào)用; ?寶塔面板Docker 部署LobeChat
    的頭像 發(fā)表于 06-26 17:03 ?1856次閱讀
    寶塔面板<b class='flag-5'>一鍵</b>免費(fèi)<b class='flag-5'>部署</b>LobeChat聊天機(jī)器人開(kāi)發(fā)自己私有的ChatGPT

    寶塔面板Docker一鍵安裝:部署GPTAcademic,開(kāi)發(fā)私有GPT學(xué)術(shù)優(yōu)化工具

    人工智能的浪潮中,GPT模型因其強(qiáng)大的自然語(yǔ)言處理能力備受矚目。然而,為了更好地應(yīng)用于學(xué)術(shù)領(lǐng)域,許多人希望能部署自己私有的GPT學(xué)術(shù)優(yōu)化工具。本文將詳細(xì)介紹如何通過(guò)寶塔面板和Docker一鍵安裝
    的頭像 發(fā)表于 07-02 11:58 ?3216次閱讀
    寶塔面板<b class='flag-5'>Docker</b><b class='flag-5'>一鍵</b>安裝:<b class='flag-5'>部署</b>GPTAcademic,開(kāi)發(fā)私有GPT學(xué)術(shù)優(yōu)化工具

    docker-compose配置文件內(nèi)容詳解以及常用命令介紹

    、Docker Compose 簡(jiǎn)介 Docker Compose種用于定義和運(yùn)行多容器
    的頭像 發(fā)表于 12-02 09:29 ?2912次閱讀
    <b class='flag-5'>docker-compose</b>配置文件內(nèi)容詳解以及常用命令介紹

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品