公司書架上有本docker的書籍,正好最近事不多就寫個demo來玩一玩。
DevOps未死,ContainerOps已到
- ContainerOps VS DevOps
避免了復雜的環境,應用之間的相互影響
擼前准備 docker
引入一些概念
- 鏡像只讀的一個應用 (類似 node_modules 下面的包)
- 容器可讀寫的鏡像
開擼
檢驗docker是否安裝成功
docker --version
如果成功會有相應的版本號顯示
然后就可以去下載自己想下載的鏡像了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 一般都要裝)
番外篇 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來編寫應用。