您好,登錄后才能下訂單哦!
這篇文章主要介紹了Docker在線制作和離線制作鏡像的方法是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Docker在線制作和離線制作鏡像的方法是什么文章都會有所收獲,下面我們一起來看看吧。
系統有個功能需要依賴chrome和chromedriver,利用無頭瀏覽器實現截圖功能,在虛擬機上能夠正常運行,但切換到容器化的環境,因為基礎鏡像我們依賴的是openjdk,缺少相關驅動,同時翻了一下dockerhub,并沒有找到現有的官方鏡像能夠支撐功能的實現,所以需要自己去制作Docker鏡像。
制作鏡像首先需要明確鏡像所需要依賴的環境和作用范圍。在這個場景中,需要安裝chrome和chromedriver,同時還得有jdk的環境以支撐模塊的運行,安裝過程中需要解壓縮包,所以還需要unzip、tar工具,同時還需要下載依賴,所以得有yum環境。
一般我們制作鏡像都是依賴于某個鏡像做為基礎鏡像在其上面來完成的,基礎鏡像這里我選擇的是centos7.9.2009,大小204M,因為本身該鏡像已經包含了tar和yum等基礎運行環境,對于我們來說操作起來會比較方便。鏡像制作分兩中模式,這里我分為在線制作和離線制作,推薦采用離線制作的方式。
在線制作就是依賴于某個基礎鏡像,在其運行的基礎上安裝號環境再重新打包成一個鏡像。所以首先是拉取centos7.9.2009基礎鏡像到本地。
docker pull centos:centos7.9.2009
運行基礎鏡像,數據卷掛載本地目錄/home/centos/到容器內部目錄/home/env/,方便我們上傳一些文件到容器內部
docker run -itd --name centos -v /home/centos/:/home/env/ centos:centos7.9.2009
chrome、chromedriver和jdk采用離線安裝的方式,上傳相關文件到宿主機/home/centos/,進入容器可以看到掛載的目錄下也有上傳的文件。
centos7.9.2009基礎鏡像沒有unzip工具,使用 yum install -y unzip zip 安裝工具,unzip chrome_rpm.zip 解壓chrome_rpm,使用 rpm -Uvh *.rpm --nodeps --force 進行安裝。
安裝后會報找不到 xdg-icon-resource,這個不影響,安裝完后繼續處理 chromedriver,將 chromedriver 加壓到指定目錄,同時授予可執行權限。
unzip chromedriver_linux64.zip mv chromedriver /usr/bin/ # 設置權限 chmod +x /usr/bin/chromedriver
使用 yum 安裝 libxcb
yum install libxcb
libxcb 安裝完后使用 /usr/bin/chromedriver 可以看到谷歌驅動安裝成功了
使用chrome的過程中發現截圖后很多中文顯示不了,是因為服務器缺少了中文包。檢查容器內部是否有中文包,命令不存在說明沒有。
yum安裝中文包和字體配置
yum install fontconfig yum groupinstall "fonts"
安裝之后重新驗證,如果出現以下內容則說明安裝成功
jdk的安裝比較簡單,將 jdk 解壓同時拷貝到 /usr/local/ 下就可以了
tar -zxvf jdk-8u251-linux-x64.tar.gz mv jdk1.8.0_251 /usr/local/
上面只是移動了jdk文件的目錄,但是還沒有配置環境變量,試過直接在容器內部配置jdk的環境變量,但是打包后的鏡像每次拉取都需要手動執行 source /etc/profile 環境變量才會生效。網上有的說可以把環境變量放到 ~/.bashrc 中,但是試了并不生效。想了下,可以依賴docker傳遞環境變量參數,所以先把安裝了環境的構建成一個基礎鏡像,通過dockerfile攜帶環境變量,最終構建成一個完整的基礎鏡像。
把安裝了環境的docker容器制作成鏡像,同時推送到遠程harbor倉庫
# docker容器構建成鏡像 docker commit -a "icc" -m "base images centos7.9.2009, include java、chrome and chromedriver" 671d33884ee6 127.0.0.1:10000/icc/openjdk:8-jdk-env # 推送到遠程倉庫 docker push 127.0.0.1:10000/icc/openjdk:8-jdk-env
通過 dockerfile 的方式構建基礎鏡像,其中傳遞 JDK 的環境變量
FROM 127.0.0.1:10000/icc/openjdk:8-jdk-env ENV JAVA_HOME=/usr/local/jdk1.8.0_251 ENV PATH=$PATH:$JAVA_HOME/bin ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar WORKDIR /home/icc/
構建鏡像并推送到遠程harbor倉庫
docker build --tag 127.0.0.1:10000/icc/openjdk:8-jdk-icc ./ docker push 127.0.0.1:10000/icc/openjdk:8-jdk-icc
離線制作,就是把依賴的環境都下載,依賴Dockerfile幫我們完成環境的安裝的鏡像的制作。
編寫Dockerfile文件
FROM centos:7 # 安裝chrome ADD google-chrome-stable.rpm /usr/local RUN yum -y localinstall /usr/local/google-chrome-stable.rpm # 安裝chromedriver ADD chromedriver.tar.gz /usr/bin # 安裝中文字體 RUN yum -y groupinstall "fonts" # 安裝JDK ADD jdk-8u251-linux-x64.tar.gz /usr/local/ ENV JAVA_HOME=/usr/local/jdk1.8.0_251 ENV PATH=$PATH:$JAVA_HOME/bin ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar WORKDIR /home/icc/
對于模塊的編排文件來說,只需要把基礎鏡像換一下便可以了
在k8s集群上可以看到也已經有相應的環境
關于“Docker在線制作和離線制作鏡像的方法是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Docker在線制作和離線制作鏡像的方法是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。