Docker+Jenkins實現CI/CD

爲何要使用docker

在咱們前端部署項目的時候,須要把咱們項目的各類環境原封不動的搬到服務器上。而後若是有多個環境,好比開發環境-測試環境-預上線環境-線上環境等等,咱們就須要把這些環境等在多臺服務器上進行部署。而且要保證環境的版本要保持一致。可是docker就能夠解決這種問題。javascript

什麼是docker

docker是利用go語言開發的應用容器引擎,基於容器化,沙箱化的應用部署技術,可用於自動化測試,打包,持續集成和發佈的應用場景。能夠用於數據庫的搭建。nginx服務器的搭建,nodejs,php等編程語言環境的搭建。容器是徹底使用沙箱機制,相互之間不會有任何接口。簡言之,就是能夠在Linux上鏡像使用的這麼一個容器。 可能這兒仍是不懂docker是幹嗎,那麼就打個比喻:我來到一片空地,想建個房子,因而我搬石頭、砍木頭、畫圖紙,一頓操做,終於把這個房子蓋好了。結果,我住了一段時間,想搬到另外一片空地去。這時候,按以往的辦法,我只能再次搬石頭、砍木頭、畫圖紙、蓋房子。可是,跑來一個老巫婆,教會我一種魔法。這種魔法,能夠把我蓋好的房子複製一份,作成「鏡像」,放在個人揹包裏。等我到了另外一片空地,就用這個「鏡像」,複製一套房子,擺在那邊,拎包入住。這種魔法就是dockerphp

什麼是容器化

容器化是將應用程序或服務。以及其依賴的配置,一塊兒打包成容器映像的一種軟件開發方法前端

docker的安裝

方法一:vue

  1. 安裝yum-utils軟件包(提供yum-config-manager 實用程序)並設置穩定的存儲庫。
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo  (能夠換成阿里源)
複製代碼
  1. 安裝
sudo yum install docker-ce docker-ce-cli containerd.io
複製代碼

這樣會安裝最新版本,你也能夠指定版本安裝java

// 查看全部版本
yum list docker-ce --showduplicates | sort -r   
// 安裝指定版本,把<VERSION_STRING>替換成相應的版本就行
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
複製代碼
  1. 啓動docker,而且註冊爲開機服務
sudo systemctl start docker
sudo systemctl enable docker
複製代碼
  1. 查看docker的版本,以及是否安裝成功
docker -v 
docker run hello-world
複製代碼

方法二:利用腳本安裝(生產環境不推薦使用,本身學習的時候能夠用)node

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
// 加入用戶組
usermod -aG docker your-user
複製代碼

官網安裝教程:docs.docker.com/engine/inst…linux

docker的使用

docker的三大核心概念

  1. 倉庫 倉庫是存放docker鏡像的地方。倉庫和註冊服務器(Registry)仍是有區別的。註冊服務器是存放倉庫的地方,在其中存放了不少倉庫,每一個倉庫存放一類鏡像文件。倉庫分爲公有倉庫和私有倉庫,DockerHub是目前最大的公有倉庫。能夠經過docker push/pull命令從倉庫中上傳和下載鏡像,docker search命令來搜索鏡像。(有點相似於咱們前端的npm同樣,裏面存放着各類開源插件)
  2. docker鏡像

Docker鏡像(Image)相似與虛擬機的鏡像,能夠將他理解爲一個面向Docker引擎的只讀模板,包含了文件系統。 例如:一個鏡像能夠徹底包含了Ubuntu操做系統環境,能夠把它稱做一個Ubuntu鏡像。鏡像也能夠安裝了Apache應用程序(或其餘軟件),能夠把它稱爲一個Apache鏡像。 鏡像是建立Docker容器的基礎,經過版本管理和增量的文件系統,Docker提供了一套十分簡單的機制來建立和更新現有的鏡像。 用戶能夠從網上下載一個已經作好的應用鏡像,並經過命令直接使用。 總之,應用運行是須要環境的,而鏡像就是來提供這種環境。(有點相似於前端的no_modules裏面的文件)
3. Docker容器 Docker容器(Container)相似於一個輕量級的沙箱子(由於Docker是基於Linux內核的虛擬技術,因此消耗資源十分少),Docker利用容器來運行和隔離應用。 容器是從鏡像建立的應用運行實例,能夠將其啓動、開始、中止、刪除,而這些容器都是相互隔離、互不可見的。 能夠把每一個容器看做一個簡易版的Linux系統環境(包括了root用戶權限、進程空間、用戶空間和網絡空間),以及與運行在其中的應用程序打包而成的應用盒子。 鏡像自身是隻讀的。容器從鏡像啓動的時候,Docker會在鏡像的最上層建立一個可寫層,鏡像自己將保持不變。就像用ISO裝系統以後,ISO並無什麼變化同樣。nginx

docker常見的命令

1.docker pull hello-world   從倉庫拉取鏡像    
2.docker images   查看本地鏡像     
3.docker run hello-world   // 若果本地沒有鏡像,就會拉取,並運行,若是有鏡像,就會直接運行鏡像,生成一個容器
4.docker ps //查看正在運行的容器
5.docker ps -a // 查看全部容器
6.docker stop hello-world  // 中止正在運行的容器
7.docker start hello-world  // 啓動容器 
8.docker restart hello-world   // 重啓容器 
9.docker rm  hello-world   // 刪除容器
10.docker rmi  hello-world   // 刪除鏡像
複製代碼

可能你們仍是很陌生,那麼我這裏用兩個實例來演示一下這些命令git

  1. 使用nginx
docker pull nginx   // 拉取nginx的鏡像並運行
docker images   // 查看鏡像 
docker run -d -p 8000:80 --name my-nginx nginx 
參數說明:
-d 以守護模式運行鏡像,也就是後臺運行
-p 宿主機端口映射的鏡像端口,左邊是宿主機端口,右邊是鏡像端口,80是Nginx訪問端口
--name給容器起一個惟一的別名
這裏就啓動了nginx   在瀏覽器輸入; ip:8080就能夠看到nginx啓動成功
docker ps  // 查看容器 
複製代碼
  1. 安裝node.js
docker pull node:latest   // :latest 表示最新版本。能夠指定對應的版本
docker run -itd --name node-test node   // 運行node 
參數說明
-d :分離模式: 在後臺運行
-i :容器的標準輸入保持打開
-t :讓docker分配一個僞終端並綁定到容器的標準輸入上
docker exec -it node-test /bin/bash  // 經過 exec 命令對指定的容器執行 bash
node -v    
複製代碼

利用docker安裝jenkins

docker run -u root -itd --name jenkins -p 9000:8080 -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock  -v /volume1/docker/jenkins:/var/jenkins_home jenkins/jenkins
複製代碼

啓動命令含義 -u root: 權限等級爲root
-p 9000:8080 Jenkins默認網頁訪問端口爲8080,將端口映射到外部主機
-v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock使Jenkins內部可使用docker命令
-v /volume1/docker/jenkins:/var/jenkins_home 將Jenkins的配置映射到外部主機卷,容器刪除仍可保留配置github

等瀏覽器初始化jenkins成功後,會提示須要一個初始密碼,這個時候,咱們能夠到/volume1/docker/jenkins/secrets/initialAdminPassword 查看密碼

部署一個前端項目

  1. 進入jenkins,安裝一些第三方插件

2. 安裝node.js 3. 進入 4. 配置node 5. 安裝(這個是爲了在後面構建項目的時候,能夠自由的選擇分支) 6.這樣jenkins初始化就完成了。咱們開始初始化一個vue3項目到github上 7. 開始配置jenkins 8. 參數化構建(後面能夠選擇分支)
9. 綁定github 10. 添加node 11. 執行腳本(這裏利用docker去安裝nginx,並映射到9001端口) 12. 開始構建 13. 完成構建,能夠到對應的地址+端口號訪問你的前端項目。

相關文章
相關標籤/搜索