docker + jenkins 自動化部署


公司書架上有本docker的書籍,正好最近事不多就寫個demo來玩一玩。

DevOps未死,ContainerOps已到

  • ContainerOps VS DevOps
    圖2

避免了復雜的環境,應用之間的相互影響

擼前准備 docker

引入一些概念

  • 鏡像只讀的一個應用 (類似 node_modules 下面的包)
  • 容器可讀寫的鏡像

開擼

檢驗docker是否安裝成功

docker  --version

如果成功會有相應的版本號顯示
圖1
然后就可以去下載自己想下載的鏡像了docker registry(鏡像倉庫) 類似 npm 倉庫
可以通過

docker search

來搜索鏡像是否存在。接下來就是拉去鏡像,默認的話docker 都會拉最新的鏡像包,如果要拉取特定的版本在后面在,下載Jenkins。

docker pull jenkins/jenkins:lts

!切記,直接docker pull jenkins 會拉去 jenkins:latest 版本是2.60.3,這個版本兼容問題賊大。有興趣的同學可以去試一試。
下完的鏡像都在docker image 下面,通過 命令 docker images 或者 docker image ls 可以查看安裝過的鏡像。每個鏡像可以看作一個個獨立的盒子,也可以看成單獨的app可以獨自運行。

如何運行一個image?

docker container 是docker的 image運行的容器。通過命令
docker run (image name)常用一般

docker container run -d -p port:port --name=name -v mount:mount imageName

docker run -d -p 8000:8080 --name=jenkins -v ~/jenkins_node/:/var/jenkins_home jenkins/jenkins:lts
  • -d 后台運行
  • -p 運行端口修改
  • --name 重命名
  • -v 掛在地址

詳細用法

查看,啟動,刪除一個容器

docker container ls -a || docker ps
docker container stop (container id )
docker container start (container id )
docker container rm (container id )
docker image rm (image id )

查看日志

docker logs (container id )

進入容器終端

docker exec -it (container id ) /bin/bash

參數/bin/bash 表示啟動一個bash交互終端。
參數-t讓Docker分配一個偽終端並綁定在容器的標准輸入上,-i讓容器的標准輸入保持打開。

構建自己的鏡像

dockerfile

  • FROM指定基礎鏡像,必須為第一個命令
  • MAINTAINER指定鏡像的作者信息
  • RUN構建鏡像時執行的命令
  • ADD將本地文件添加到容器中,tar類型文件會自動解壓(網絡壓縮資源不會被解壓),可以訪問網絡資源,類似wget
  • COPY功能類似ADD,但是是不會自動解壓文件,也不能訪問網絡資源
  • CMD構建容器后調用,也就是在容器啟動時才進行調用。
  • EXPOSE指定於外界交互的端口
  • VOLUME用於指定持久化目錄
  • WORKDIR工作目錄,類似於cd命令
docker build -t tagname .

讀取當前目錄下面的dockerfile文件,並運行命令。

Jenkins 部分

  • 插件安裝的時候萌新就選推薦的插件安裝就行。
  • 初始化密碼如果不是掛在本地,需要執行docker exec -it (container id) /bin/bash 去里面找默認密碼
    jenkin 這個按着提示的來就行,沒啥特別大的難度,如果插件安裝失敗的 系統配置-> 插件管理 繼續安裝,和選擇自己想要的插件來安裝。(基本的node 和 git 一般都要裝)

tu4

番外篇 pm2

node進程管理工具,可以利用它來簡化很多node應用管理的繁瑣任務,如性能監控、自動重啟、負載均衡等,上手容易。

安裝及使用

npm install pm2 -g

pm2 start app.js (可選參數)

  • --watch:監聽應用目錄的變化,一旦發生變化,自動重啟。如果要精確監聽、不見聽的目錄,最好通過配置文件。
  • -i --instances:啟用多少個實例,可用於負載均衡。如果-i 0或者-i max,則根據當前機器核數確定實例數目
  • --ignore-watch:排除監聽的目錄/文件,可以是特定的文件名,也可以是正則。比如--ignore-watch="test node_modules "some scripts""
  • -n --name:應用的名稱。查看應用信息的時候可以用到。
  • -o --output <path>:標准輸出日志文件的路徑。
  • -e --error <path>:錯誤輸出日志文件的路徑。
  • --interpreter <interpreter>:the interpreter pm2 should use for executing app (bash, python...)。比如你用的coffee script來編寫應用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM