docker決戰到底(五) 製作自己的Jenkins映象
一、前言概要
本篇實踐記錄主要圍繞製作一個自己的jenkins映象而展開,前提是需要你瞭解怎麼製作一個映象,如果你還不瞭解,那麼建議你先閱讀docker官方文件 。 在 中,我們從jenkins中構建的 也使用到了自己製作的Dockerfile,只是它是基於springboot開發的web應用來製作的,你也可以參考一下,在以後你自己開發類似應用服務時應該能用上。
在 中,我們使用的是官方的jenkins/jenkins:alpine映象,啟動映象後還需要經過一系列操作,如我們對maven的安裝以及配置,這樣的操作可能你在另一臺計算機上部署相同的jenkins時也需要做出同樣的操作,這時候我們就有必要製作一個自己的jenkins映象,把相同操作過程固定到映象中。當然,不只是針對jenkins,當有類似情況時,你應該學會舉一反三。
那麼接下來,我們就開始編寫一個Dockerfile來製作jenkins映象,這個映象將會滿足如下功能:
沿用官方jenkins/jenkins:alpine映象的所有功能
能夠作為docker客戶端直接使用docker命令(共用宿主機docker.sock),就是所謂的DooD (Docker outside of Docker)
整合maven並使用自定義的maven配置
二、編寫Dockerfile
宿主機執行命令,在家目錄下建立一個dockerfiles/jenkins資料夾用來存放我們的配置檔案以及Dockerfile檔案
$ cd ~ $ mkdir -p dockerfiles/jenkins
在jenkins目錄下建立兩個檔案,分別是settings.xml與Dockerfile
$ cd dockerfiles/jenkins $ touch settings.xml Dockerfile
編輯settings.xml,主要是對maven的repository與mirror進行配置,內容如下
<?xml version="1.0" encoding="UTF-8"?><settings xmlns="" xmlns:xsi="" xsi:schemaLocation=" "> <localRepository>/usr/share/maven/ref/repository</localRepository> <mirrors> <mirror> <id>aliyun-nexus</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url> </mirror> <mirror> <id>CN</id> <name>OSChina Central</name> <url> <mirrorOf>central</mirrorOf> </mirror> </mirrors></settings>
編輯Dockerfile,來源於 jenkins/jenkins:alpine,alpine系統中採用apk安裝軟體,我們把軟體安裝源換為國內映象源,安裝docker以及maven,並把jenkins使用者加入docker所在的999使用者組,內容如下
# =====================================================================# Jenkins with DooD (Docker outside of Docker) and integration maven# =====================================================================FROM jenkins/jenkins:alpine USER root ARG MAVEN_VERSION=3.6.0ARG MAVEN_SHA=fae9c12b570c3ba18116a4e26ea524b29f7279c17cbaadc3326ca72927368924d9131d11b9e851b8dc9162228b6fdea955446be41207a5cfc61283dd8a561d2f ARG MAVEN_BASE_URL={MAVEN_VERSION}/binaries RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone && echo "" > /etc/apk/repositories && echo "" >> /etc/apk/repositories && apk add --no-cache tar procps shadow docker && mkdir -p /usr/share/maven /usr/share/maven/ref/repository && curl -fsSL -o /tmp/apache-maven.tar.gz ${MAVEN_BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz && echo "${MAVEN_SHA} /tmp/apache-maven.tar.gz" | sha512sum -c - && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 && rm -f /tmp/apache-maven.tar.gz && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn && usermod -aG 999 jenkins && chown 1000:1000 /usr/share/maven/ref/repository ENV MAVEN_HOME /usr/share/maven VOLUME /usr/share/maven/ref/repository COPY settings.xml /usr/share/maven/conf/settings.xml USER jenkins
三、構建映象
在Dockerfile檔案所在目錄執行如下命令進行映象的構建,就是docker build命令
$ docker build -t jenkins-dood .
首次構建時需要等待時間可能稍微較長一點,但也不會很慢,因為我們使用的國內映象源,最終還是要視你的網路而定
直到出現 Successfully tagged jenkins-dood:latest 說明構建完成,接下來我們來檢查一下剛才構建的映象
$ docker image ls
四、部署自定義jenkins
在rancher中部署我們新制作的jenkins-dood:latest映象,埠對映到主機30010
在宿主機中重新建立兩個資料卷掛載目錄,執行如下命令
$ cd /docker_volume $ mkdir maven-repo jenkins-dood-home
資料卷中選擇新增路徑對映卷,需要新增兩個,分別命名為maven-repo與jenkins-dood-home,把我們剛才建立的兩個目錄分別對映到容器內部
再對映一個主機目錄到容器中,主要實現我們的dood,共用/var/run/docker.sock
確認一下安全/主機設定中,拉取映象為從不,因為我們映象在宿主機中
最後點選啟動即可, 可以看到我們的工作負載中又多了一個我們剛才部署的jenkins-dood服務
接下來我們訪問 http://192.168.225.129:30010/ , 然後就需要和 中的第二節 初始化Jenkins 做一樣的操作,這裡就不重複進行記錄了。 初始化完成後進入到如下介面
思考: 初始jenkins步驟也是重複的,是否可以製作到Dockerfile中
五、使用自定義jenkins
我們建立一個新任務restful-api-demo,如下圖所示,選擇自由風格的軟體專案,然後確認
在原始碼管理中選擇git,輸入git資源地址 https://github.com/wendell-dev/restful-api-demo.git
因為我們需要測試一下是否可以使用docker以及maven,所以直接選擇在構建裡執行shell指令碼來使用命令進行測試, shell命令中輸入的內容如下
mvn clean packagedocker build -t wendell/restful-api-demo:dood .
儲存配置並進行構建後,我們檢視一下構建日誌
可以看出我們的maven命令能夠直接執行,而且還是從阿里雲映象倉庫下載的包,我們的docker build命令也執行成功,接下來我們進行最後的驗證,在宿主機執行如下命令檢查下載的包是否掛載到我們指定的目錄了以及映象是否存在
$ ls /docker_volume/maven-repo $ docker images
六、使用小結
到此為止,我們成功製作了自己的jenkins映象,不需要再像前面那篇 中那樣對jenkins進行繁瑣的配置,你也可以看見,我們除了初始化時安裝的預設外掛外並沒有安裝任何其他外掛就完成了springboot應用的編譯打包構建,我們把配置過程對映到了Dockerfile中,從而讓我們使用更輕鬆,以及可以更快速的遷移到其他容器機器上。
好了,本篇docker決戰到底實踐記錄就到這裡,如果你有什麼疑問或者文中有什麼錯誤的地方,歡迎在留言區留言。 如果你願意,可以告訴我接下來你更希望看到哪方面的內容,我們可以一起加油!
作者:wendell_dev
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2821212/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- docker製作自己的映象並上傳dockerhubDocker
- 自己動手製作elasticsearch-head的Docker映象ElasticsearchDocker
- 製作Docker映象Docker
- Docker 必知必會3----使用自己製作的映象Docker
- YashanDB Docker映象製作Docker
- oracle製作docker映象OracleDocker
- Docker製作jdk映象DockerJDK
- Docker 映象製作方法Docker
- 自己動手製作elasticsearch的ik分詞器的Docker映象Elasticsearch分詞Docker
- Docker定製自己的環境映象Docker
- docker初體驗:docker 自己定製映象Docker
- Docker二所映象製作Docker
- 自己製作redis 和mongo 映象RedisGo
- Docker如何製作映象-Dockerfile的使用Docker
- Docker筆記(五):整一個自己的映象Docker筆記
- docker 製作與使用 arcgisserver 映象DockerServer
- 製作 Python Docker 映象的最佳實踐PythonDocker
- docker映象複製到自己的儲存庫使用Docker
- 伺服器:如何製作docker映象伺服器Docker
- 自編譯製作docker版本的onlyoffice映象編譯Docker
- docker 構建自己的映象Docker
- Docker映象製作實戰:設定時區和系統編碼Docker
- 無需依賴Docker環境製作映象Docker
- Docker 入門系列四:Dockerfile-映象製作Docker
- centos製作具備telnet和ping功能的docker映象CentOSDocker
- Docker(五)Docker映象講解Docker
- Dockerfile映象的製作Docker
- 製作一個龍芯舊世界的 dotnet sdk docker 映象Docker
- Docker映象構建(五)Docker
- Jenkins把GitHub專案做成Docker映象JenkinsGithubDocker
- 製作KubeVirt映象
- proxmox映象製作
- 實戰:docker-jenkinsDockerJenkins
- docker 學習筆記之實戰 lnmp 環境搭建系列 (3) ------ dockerfile 定製屬於自己的映象Docker筆記LNMP
- 【實踐】Docker for Windows 製作tomcat 映象並上傳至 docker 倉庫DockerWindowsTomcat
- Docker 映象製作教程:針對不同語言的精簡策略Docker
- Jenkins打Docker映象推送到私有倉庫JenkinsDocker
- Docker、Jenkins企業實戰DockerJenkins