使用Docker部署SpringBoot+Vue博客系統

2021-03-02 白玉盤
在今年年初的時候,完成了自己的個Fame博客系統的實現,當時也做了一篇博文Spring-boot+Vue = Fame 寫blog的一次小結作為記錄和介紹。從完成實現到現在,也斷斷續續的根據實際的使用情況進行更新。
只不過每次上線部署的時候都覺得有些麻煩,因為我的伺服器內存太小,每次即使只更新了前臺部分(fame-front)的代碼,在執行npm build的時候都還必須把我的後端服務(fame-server)的進程關掉,不然會造成伺服器卡死(慘啊)。而且這個項目是前後端分離的,博客前臺頁面還為了SEO用了Nuxt框架,假如是第一次部署或者要伺服器遷移的話,麻煩的要死啊,部署一次的話要以下步驟安裝mysql,修改相關配置文件,設置編碼時區等,然後重啟打包vue項目,npm install,npm run build等啟動nuxt項目,npm install,npm run start等如果能夠順利的完成這七個步驟算是幸運兒了,假如中間哪個步驟報錯出了問題,可能還要回頭查找哪個步驟出了問題,然後又重新部署。


在這些需求面前,Docker就是解決這些問題的大殺器。無論是其虛擬化技術隔離各個容器使其資源互不影響,還是一致的運行環境,以及docker-compose的一鍵部署,都完美的解決了上述問題。

項目地址:https://github.com/zzzzbw/Fame

Docker和Docker-compose安裝

Docker和Docker-compose的功能和使用可以看線上的一個中文文檔Docker — 從入門到實踐

下面是Centos7安裝和配置Docker以及Docker-compose的shell腳本,其他作業系統可以參考修改來安裝。其中Docker版本為docker-ce,Docker-compose版本為1.22.0

#!/bin/sh

### 更新 ###
yum -y update

### 安裝docker ###
# 安裝一些必要的系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加軟體源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新 yum 緩存
sudo yum makecache fast
# 安裝 Docker-ce
sudo yum -y install docker-ce
# 啟動docker並設置為開機啟動(centos7)
systemctl  start docker.service
systemctl  enable docker.service
# 替換docker為國內源
echo '{"registry-mirrors": ["https://registry.docker-cn.com"],"live-restore": true}' > /etc/docker/daemon.json
systemctl restart docker
# 安裝dokcer-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 安裝命令補全工具
yum -y install bash-completion
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
### 安裝docker結束 ###

Docker化改造改造後目錄結構

先看一下改造後的項目的結構

├─Fame
│  │  .env                            // docker-compose環境參數配置文件
│  │  docker-compose.yml              // docker-compose文件
│  ├─fame-docker
│  │  │  fame-front-Dockerfile        // fame-front的Dockerfile文件
│  │  │  fame-server-Dockerfile       // fame-server的Dockerfile文件
│  │  │  
│  │  ├─fame-admin
│  │  │      fame-admin-Dockerfile    // fame-admin的Dockerfile文件
│  │  │      nginx.conf               // fame-admin的nginx伺服器配置文件
│  │  │      
│  │  ├─fame-mysql
│  │  │      fame-mysql-Dockerfile    // mysql的Dockerfile文件
│  │  │      mysqld.cnf               // mysql的配置文件mysqld.cnf
│  │  │      
│  │  └─fame-nginx
│  │          nginx-Dockerfile        // 整個項目的nginx伺服器的Dockerfile文件
│  │          nginx.conf              // 整個項目的nginx的配置文件
│  │          
│  ├─fame-admin   // 博客管理後臺,基於Vue+elementui
│  ├─fame-front   // 博客前端,基於Nuxt
│  └─fame-server  // 博客服務端,基於spring-boot

為了不破壞原有項目的結構,無論前端還是後端的docker的相關配置文件全部提取出來,單獨放在了fame-docker文件夾中。搜索Java知音公眾號,回復「後端面試「,送你一份Java面試體驗寶典.pdf

docker-compose.yml放在項目根目錄下,直接在根目錄運行命令:docker-compose up -d

[root@localhost Fame]# docker-compose up -d
Starting fame-front ... 
Starting fame-admin ... 
Starting fame-front ... done
Starting fame-admin ... done
Starting fame-nginx ... done

就啟動項目了,再也不用重複繁瑣的步驟!

改造後的docker項目結構fame-structure改造後的docker-compose.yaml文件
version: '3'
services: 
  fame-nginx:
    container_name: fame-nginx
    build:
     context: ./
     dockerfile: ./fame-docker/fame-nginx/nginx-Dockerfile
    ports:
      - "80:80"
    volumes:
     - ./logs/nginx:/var/log/nginx
    depends_on:
      - fame-server
      - fame-admin
      - fame-front
  
  fame-mysql:
   container_name: fame-mysql
   build: 
     context: ./
     dockerfile: ./fame-docker/fame-mysql/fame-mysql-Dockerfile
   environment:
     MYSQL_DATABASE: fame
     MYSQL_ROOT_PASSWORD: root
     MYSQL_ROOT_HOST: '%'
     TZ: Asia/Shanghai
   expose:
      - "3306"
   volumes:
     - ./mysql/mysql_data:/var/lib/mysql
   restart: always

  fame-server:
    container_name: fame-server
    restart: always
    build: 
     context: ./
     dockerfile: ./fame-docker/fame-server-Dockerfile
    working_dir: /app
    volumes:
      - ./fame-server:/app
      - ~/.m2:/root/.m2
      - ./logs/fame:/app/log
    expose:
      - "9090"
    command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker -Dmaven.test.skip=true
    depends_on:
      - fame-mysql

  fame-admin:
   container_name: fame-admin
   build: 
    context: ./
    dockerfile: ./fame-docker/fame-admin/fame-admin-Dockerfile
    args:
      BASE_URL: ${BASE_URL}
   expose:
      - "3001"

  fame-front:
   container_name: fame-front
   build: 
    context: ./
    dockerfile: ./fame-docker/fame-front-Dockerfile
   environment:
      BASE_URL: ${BASE_URL}
      PROXY_HOST: ${PROXY_HOST}
      PROXY_PORT: ${PROXY_PORT}
   expose:
      - "3000"

docker-compose.yml的結構和剛才目錄結構大體類似,也是分以下幾個部分

這個docker-compose.yml中有幾個要點

fame-mysql和fame-server的restart要設置為always,因為目前Docker-compose是沒有一個方案可以解決容器啟動的先後的問題的。即使設置了depends_on,那也只是控制容器開始啟動的時間,不能控制容器啟動完成的時間,所以讓fame-mysql和fame-server這兩個容器設置restart,防止spring-boot在mysql啟動完成之前啟動而報錯啟動失敗

fame-server,fame-mysql,fame-nginx這三個容器都設置了volumes,把容器裡的logs日誌文件掛載到宿主機的項目目錄裡,方便隨時看日誌文件

fame-mysql容器的mysql存儲文件也設置了volumes掛載在項目目錄裡(./mysql/mysql_data:/var/lib/mysql),這個建議大家可以根據實際的情況設置到宿主機的其他目錄裡,不然不小心刪除項目的話那麼容器裡的資料庫數據也都沒了

幾個鏡像的Dockerfile大部分都比較簡單,這部分就不全部詳細介紹了,可以直接去我項目中了解。

Docker化過程的困難和解決方法spring-boot雙配置切換

為了能夠讓spring-boot能夠在開發環境和Docker環境下快速切換,需要將spring-boot的配置文件進行修改

└─fame-server
        ...                   
        │  └─resources
        │      │  application-dev.properties
        │      │  application-docker.properties
        │      │  application.properties

在原有的application.properties基礎上增加application-dev.properties和application-docker.properties配置文件,把application.properties裡的資料庫日誌等信息分別放到application-dev.properties和application-docker.properties這兩個文件中,實現開發環境和Docker環境的快速切換。

# application.properties文件
#埠號
server.port=9090
#mybatis
mybatis.type-aliases-package=com.zbw.fame.Model
#mapper
mapper.mappers=com.zbw.fame.util.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL

#mail
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

#默認properties
spring.profiles.active=dev

~

# application-docker.properties文件
#datasource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://fame-mysql:3306/fame?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

#log
logging.level.root=INFO
logging.level.org.springframework.web=INFO
logging.file=log/fame.log

application-dev.properties的內容和application-docker.properties文件類似,只是根據自己開發環境的情況修改mysql和log配置。

動態配置axios的baseUrl地址

在fame-admin和fame-front中用了axios插件,用於發起和獲取fame-server伺服器的請求。在axios要配置伺服器url地址baseUrl,那麼通常開發環境和Docker環境以及生產環境的url可能都不一樣,每次都去修改有點麻煩。(雖然只需要配置兩處,但是代碼潔癖不允許我硬編碼這個配置)。

1.先修改fame-admin(Vue)使其兼容手動部署模式和Docker模式

fame-admin是基於Vue CLI 3搭建的,相對於cli 2.0官方把webpack的一些配置文件都封裝起來了,所以沒有config和build文件夾。不過對應的官網也給了一些設置更加方便的配置參數。

在官方文檔中提到:

只有以 VUE_APP_ 開頭的變量會被 webpack.DefinePlugin 靜態嵌入到客戶端側的包中。你可以在應用的代碼中這樣訪問它們:

console.log(process.env.VUE_APP_SECRET)

在構建過程中,process.env.VUE_APP_SECRET 將會被相應的值所取代。在 VUE_APP_SECRET=secret 的情況下,它會被替換為 "sercet"。

利用這個特性來設置環境變量來動態的設置Docker模式和手動部署模式的baseUrl的值

在fame-admin目錄下創建文件server-config.js,編寫以下內容

const isProd = process.env.NODE_ENV === 'production'
const localhost = 'http://127.0.0.1:9090/'
const baseUrl = process.env.VUE_APP_API_URL || localhost
const api = isProd ? baseUrl : localhost
export default {
  isProd,
  api
}

那麼只要在環境變量中有VUE_APP_API_URL的值,且NODE_ENV === 'production',baseUrl就等於VUE_APP_API_URL的值,否則就是localhost的值。

接著在axios配置文件中引用該文件設置

// fame-admin/src/plugins/http.js
...
import serverConfig from '../../server-config'

const Axios = axios.create({
  baseURL: serverConfig.api + 'api/',
 ...
})
    
...

現在只要將docker的環境變量設置一個VUE_APP_API_URL的值就行了,只要在對應的Dockerfile中增加一個步驟就可以了。

ENV VUE_APP_API_URL http://xx.xxx.xxx.xxx

2.再修改fame-front(Nuxt)使其兼容手動部署模式和Docker模式

同樣的,對於用Nuxt搭建fame-front博客前臺修改也是類似的思路。

在Nuxt的官方文檔中寫到:

Nuxt.js 讓你可以配置在客戶端和服務端共享的環境變量。

例如 (nuxt.config.js):

module.exports = {
  env: {
    baseUrl: process.env.BASE_URL || 'http://localhost:3000'
  }
}

以上配置我們創建了一個 baseUrl 環境變量,如果應用設定了 BASE_URL 環境變量,那麼 baseUrl 的值等於 BASE_URL 的值,否則其值為 http://localhost:3000。

所以我們只要和官方文檔說的一樣,在nuxt.config.js文件中增加代碼就可以了

module.exports = {
 env: {
   baseUrl: process.env.BASE_URL || 'http://localhost:3000'
 }
}

接著在server-config.js文件和axios的配置文件fame-front/plugins/http.js以及對應的Dockerfile文件中編寫和上面fame-admin部分一樣的代碼就可以了

現在已經把baseUrl的設置從代碼的硬編碼中解放出來了,但事實上我們只是把這個參數的編碼從代碼從轉移到Dockerfile文件裡了,要是想要修改的話也要去這兩個文件裡查找然後修改,這樣也不方便。後面會解決這個問題把所有環境配置統一起來。

Nuxt在Docker中無法訪問到宿主機ip問題

先要說明一點,為什麼博客前端要單獨去使用的Nuxt而不是和博客後臺一樣用Vue呢,因為博客前端有SEO的需求的,像Vue這樣的對搜尋引擎很不友好。

所以Nuxt的頁面是伺服器端渲染(SSR)的

這樣就產生了問題

fame-front的頁面在渲染之前必須獲取到fame-server伺服器中的數據,但是每個docker容器都是互相獨立的,其內部想要互相訪問只能通過容器名訪問。例如容器fame-front想要訪問容器fame-server,就設置baseURL = fame-server(fame-server是伺服器的容器的container_name)。

這樣設置之後打開瀏覽器輸入網址:http://xx.xxx.xxx.xx可以成功...,但是隨便點擊一個連結,就會看到瀏覽器提示錯誤無法訪問到地址http://fame-server/...

vendor.e2feb665ef91f298be86.js:2 GET http://fame-server/api/article/1 net::ERR_CONNECTION_REFUSED

這是必然的結果,在容器裡http://fame-server/就是伺服器...,但是你本地的瀏覽器當然是不知道http://fame-server/是個什麼鬼...,所以就瀏覽器就報出無法訪問的錯誤。

什麼?可是剛才不是說Nuxt是伺服器渲染的頁面嗎,怎麼又讓本地瀏覽器報這個錯誤了。

原來是因為當通過瀏覽器連結直接訪問的時候,Nuxt的確是從後端渲染了頁面再傳過來,但是在頁面中點擊連結的時候是通過Vue-Router跳轉的,這時候不在Nuxt的控制範圍,而是和Vue一樣在瀏覽器渲染的,這時候就要從瀏覽器裡向服務端獲取數據來渲染,瀏覽器就會報錯。

如何解決呢

這個問題開始的時候一直想要嘗試配置Docker容器的網絡模式來解決,可是都沒有解決。直到後面我看axios文檔的時候才注意到axios的代理功能,其本質是解決跨域的問題的,因為只要在axios設置了代理,在服務端渲染的時候就會使用代理的地址,同時在瀏覽器訪問的時候會用baseUrl 的地址,這個特點完美解決我的問題啊。

在server-config.js文件裡增加以下代碼(在nuxt.config.js裡獲取環境變量裡的proxyHost和proxyPort)

...
const localProxy = {
  host: '127.0.0.1',
  port: 9090
}
const baseProxy = {
  host: process.env.proxyHost || localProxy.host,
  port: process.env.proxyPort || localProxy.port
}
exports.baseProxy = isProd ? baseProxy : localProxy
...

然後在axios配置文件裡增加代碼

// fame-front/plugins/http.js
const Axios = axios.create({
  proxy: serverConfig.baseProxy
 ...
})
    
...

就可以完美的解決問題了。

Dockerfile的環境參數統一設置

在上文解決動態配置axios地址的部分把baseUrl的設置放在了Dockerfile中,現在就再把Dockerfile中的硬編碼提取出來,放到統一的配置文件中。

首先在docker-compose.yml文件目錄下(即項目跟目錄)創建環境文件.env並編寫一下內容

BASE_URL=http://xx.xxx.xxx.xxx

PROXY_HOST=fame-nginx
PROXY_PORT=80

這個是docker-compose的env_file參數,從文件中獲取環境變量,可以為單獨的文件路徑或列表,如果同目錄下有.env文件則會默認讀取,也可以自己在docker-compose裡設置路徑。

已經在.env設置了環境變量BASE_URL的值,就能在docker-compose.yml裡直接使用了。修改docker-compose.yml的fame-front部分:

fame-front:
 ...
 environment:
  BASE_URL: ${BASE_URL}
  PROXY_HOST: ${PROXY_HOST}
  PROXY_PORT: ${PROXY_PORT}
  ...

這樣在fame-front的容器裡就有對應的BASE_URL,PROXY_HOST,PROXY_PORT環境變量,Nuxt也能夠成功獲取並設置。

不過對於fame-admin容器來說就要稍微複雜一點點了。先來看一下fame-admin容器的Dockerfile文件fame-admin-Dockerfile

# build stage
FROM node:10.10.0-alpine as build-stage

#中間一些操作省略...

RUN npm run build

# production stage
FROM nginx:1.15.3-alpine as production-stage

COPY ./fame-docker/fame-admin/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

這裡用了多階段構建容器,如果直接通過docker-compose設置環境變量只會在後面一個階段生效,但是npm run build是在第一個階段執行的,所以環境變量不能應用到Vue當中。為了讓環境變量在第一階段就應用,必須要在構建的時候就把變量從docker-compose傳到fame-admin-Dockerfile中,然後在Dockerfile中的第一階段把這個環境變量應用到容器裡。下面修改docker-compose.yml的fame-admin部分:

 fame-admin:
   ...
   build: 
    context: ./
    dockerfile: ./fame-docker/fame-admin/fame-admin-Dockerfile
    args:
      BASE_URL: ${BASE_URL} # 這裡把環境變量當做ARG傳給Dockerfile
   ...

然後在fame-admin-Dockerfile的第一階段增加步驟

# build stage
FROM node:10.10.0-alpine as build-stage

ARG BASE_URL # 必須申明這個ARG才能從docker-compose裡獲取

ENV VUE_APP_API_URL $BASE_URL

# 以下省略...

這樣就可以在構建階段一鏡像的時候就把環境變量傳入到階段一的鏡像裡,讓Vue裡的變量生效了。

總結

現在網上很多複雜一點的項目即使用了docker-compose部署,也多少依賴shell腳本來操作,比如複製文件設置環境等,我覺得這樣會降低docker-compose的意義。如果都使用了shell腳本,那不如直接不用docker-compose而全用shell來構建和啟動鏡像。

所以在Docker化的過程中雖然遇到一些坎坷,但堅持實現了只用docker-compose部署,以後上線和下線就及其方便了。也希望我的Docker化思路可以給其他項目做一些參考。

對比以前恐怖的步驟,現在Fame博客的上線和下線只需要兩行命令,真的十分的便捷。

docker-compose up
docker-compose down

源碼地址 https://github.com/zzzzbw/Fame

相關焦點

  • 手把手教你Docker+nginx部署Springboot+vue前後端分離項目
    有些同學們提出個問題,不知道如何打包部署Vue前後端分離項目。那麼今天,我們就來學習一下,如何部署簡單快捷部署我們的vueblog項目!線上演示:http://www.markerhub.com:8084/blogs配套部署視頻工具上線前準備這裡我們同步演示怎麼部署到win環境和linux(centos7)系統中,前端伺服器採用nginx部署,並使用docker統一管理前後端伺服器。
  • 不要手動部署SpringBoot項目了,使用Docker真香!
    Ubuntu安裝docker 由於本人的系統是CentOS,所以這裡就只展示一下CentOS的安裝方式,Ubuntu以及其他系統請自行百度。CentOS安裝docker docker要求CentOS在7.0以後的版本,如果你的系統版本還在7.0以前,請先升級一下版本在進行安裝,同時不支持32位的系統,內核版本至少3.10。
  • Springboot項目使用docker部署
    yum remove docker docker-common docker-selinux docker-engine安裝需要的軟體包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的yum install -y yum-utils
  • 元旦用SpringBoot擼了個博客網站送給大家
    技術棧客戶端:vue服務端:springboot+maven+jpa+docker+shell我的博客地址:http://myblog.lixifan.cn/或者直接點擊原文跳轉目前已經部署到騰訊雲上,用docker管理,可以直接訪問了效果圖看看這好看的首頁pc端首頁文章頁面極簡主義不錯
  • 還在手動啟動SpringBoot項目?Docker部署不香嗎?
    容器是完全使用沙箱機制,相互之間不會有任何接口。docker的核心思想是通過對應用的封裝、分發、部署、運行生命周期進行管理,達到應用組件級別的「一次性封裝,到處運行」。這裡的應用組件,可以是一個web應用,也可以是一個環境,更可以是一個資料庫等等。
  • 使用 Docker 部署 Spring Boot 項目
    Docker 技術發展為微服務落地提供了更加便利的環境,使用 Docker 部署 Spring Boot 其實非常簡單,這篇文章我們就來簡單學習下。首先構建一個簡單的 Spring Boot 項目,然後給項目添加 Docker 支持,最後對項目進行部署。
  • 一分鐘玩轉Docker容器化部署
    Docker是一個開源的應用容器引擎,也是目前最流程的應用部署方式,通過它可以把應用及其依賴打包到一個可移植的鏡像中,然後利用Docker提供的部署機制將其發布至任意安裝了Docker容器的系統環境中。
  • Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
    @RestControllerpublic class DockerController { @RequestMapping("/") public String index() { return "Hello Docker!"
  • SpringBoot第二十四篇: springboot整合docker
    這篇文篇介紹,怎麼為 springboot程序構建一個docker鏡像。docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。準備工作環境:linux環境或mac,不要用windowsjdk 8maven 3.0docker對docker一無所知的看docker教程。
  • Win11 Docker 部署 Vue 項目
    省略win11安裝docker將打包好的vue項目放在一個目錄下
  • 使用Gradle構建SpringBoot項目Docker鏡像
    本文使用到的素材:Gradle構建的SpringBoot項目,Docker環境,docker-compose(非必需)。本文項目源碼地址GitHub:https://github.com/lovemianhuatang/l-gradle-springboot-dockerSpringBoot項目基礎項目
  • 使用Docker Compose部署SpringBoot應用
    docker容器應用的工具。使用Compose你可以用YAML文件來配置你的應用服務,然後使用一個命令,你就可以部署你配置的所有服務了。--version使用Docker Compose的步驟使用Dockerfile定義應用程式環境,一般需要修改初始鏡像行為時才需要使用;使用docker-compose.yml定義需要部署的應用程式服務,以便執行腳本一次性部署;使用docker-compose up命令將所有應用服務一次性部署起來。dock
  • 還在手動部署springboot項目?不妨試試它,讓你部署項目飛起來!
    容器是完全使用沙箱機制,相互之間不會有任何接口。docker的核心思想是通過對應用的封裝、分發、部署、運行生命周期進行管理,達到應用組件級別的「一次性封裝,到處運行」。這裡的應用組件,可以是一個web應用,也可以是一個環境,更可以是一個資料庫等等。安裝docker既然docker這麼神奇,那我們如何安裝docker呢?我們一起來走一下吧。
  • Jenkins-GitHub自動化部署vue項目
    6.4.1//為啥是這2個版本?我的開發環境就這個,為了出錯的機率降低,儘可能使用相同版本在Jenkins任務中測試npm命令在Jenkins任務中,在構建模塊,增加shell腳本。/bin/bash -ilexecho "npm start>"npm -vnpm installnpm run build保存文件名字test.sh,放在我們項目根目錄,然後隨著代碼提交,push到GitHub中Build vue project點擊立即構建,查看日誌,是否構建成功。
  • 初級-手動部署springboot工程到Docker
    #配置yum為阿里雲鏡像yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安裝docker-cednf install https://mirrors.aliyun.com/docker-ce/linux
  • Springboot+Minio的使用
    使用 docker 搭建 Minio 作為對象存儲伺服器,通過 Springboot
  • Docker實戰:docker部署nginx項目詳解
    這裡我直接使用命令:docker pull nginx,可以從Docker Hub下載最新版本的nginx。這裡我們運行一個展示vue項目的nginx服務並指定訪問ip為8001,其指令為:docker run --name nginx-vue -p 8001:80 -d nginx。-p表示埠映射將本地的 8001 埠映射到容器內部的 80 埠,-d則是指定該容器一直在後臺運行。
  • Docker安裝Jenkins+Shell腳本自動化部署項目
    「Jenkins是一款開源的CI&CD軟體, 提供超過1000個插件來支持構建、部署、自動化, 滿足任何項目的需要。:/var/run/docker.sock      - /usr/bin/docker:/usr/bin/docker    privileged: true    user: root官網中文文檔與英文文檔不一致,不要使用中文文檔中推薦的jenkinsci/blueocean鏡像,使用它構建node程序會出現問題
  • Django-Vue搭建個人博客:項目部署
    我們的博客雖然還有不完善的地方,但是沒關係,越早把它部署到網際網路上,才能越早發現線上特有的問題,讓產品在迭代中成長。部署考驗的是你對 Linux 的操作能力,以及對網絡通信的理解。加油喲。其他 Linux 版本也是可以的,根據你的使用習慣確定。系統盤先選個 20G,夠你用一陣了。數據盤暫時用不上,不用勾選。點擊下一步,來到網絡和安全組頁面:
  • 手摸手教你docker+jenkins+gitlab部署你的Vue項目
    拉取gitlab倉庫代碼,並執行shell腳本4.shell腳本執行docker命令,打包項目5.安裝nginx,並把打包好的dist目錄映射到nginx代理目錄下6.部署成功,訪問伺服器ip+埠號訪問你的項目你所需要準備的:docker最基本的知識,並安裝docker和docker-compose1.使用docker