建立自己的Docker基礎映象

2021-09-27 13:43:00 字數 2951 閱讀 7689

本文講解如何在本地構建乙個基礎的docker python環境映象,並擴充套件這個基礎映象構建python執行環境,之後再構建自己的python應用。

docker 提供了兩種方法來建立基礎映象,一種是通過引入tar包的形式,另外一種是通過乙個空白的映象來一步一步構建,本文使用的是第二種方法,既from scratchscratch是docker保留映象,映象倉庫中的任何映象都不能使用這個名字,使用from scratch表明我們要構建映象中的第乙個檔案層。

如果我們有乙個linux下可執行的二進位制檔案,可以構建乙個簡單的映象,僅執行這個二進位制。下面是dockerfile。

from scratch

add hello /

cmd ["/hello"]

注意因為docker是基於linux的虛擬機器,所以二進位制應該是在linux可執行的,作者在mac下編譯了乙個簡單的c程式,在執行的時候會遇到下面的錯誤。

standard_init_linux.go:190: exec user process caused "exec format error"

檢視這個檔案的資訊是hello: mach-o 64-bit executable x86_64

構建的過程很簡單,執行如下命令。

$ docker build -t chello:0.1 .
通過 docker images 命令可以本地的映象。

$ docker images

repository tag image id created size

chello 0.1 0ffaacaa21e5 36 minutes ago 8.43kb

這樣就是乙個基礎的映象,但是如果需要基礎映象發揮更多的作用,我們還需要其他的工作。docker中的容器執行在作業系統中,共享了作業系統的核心。對於在mac、windows平台下,則是基於linux虛擬機器的核心。而linux核心僅提供了程序管理、記憶體管理、檔案系統管理等一些基礎的管理模組。除此之外,我們還需要一些linux下的管理工具,包括ls、cp、mv、tar以及應用程式執行依賴的一些包。因此我們就需要首先構建乙個minimal的作業系統映象,在此基礎上構建python環境,再構建應用映象。這樣就實現了映象檔案分層,今後如果我們需要更新python版本,那麼只需要對這一層進行更新就可以。

docker 的映象實際上由一層一層的檔案系統組成,這種層級的檔案系統就是上文說到的unionfs。在docker映象的最底層是bootfs。這一層與我們典型的linux/unix系統是一樣的,包含boot載入器和核心。當boot載入完成之後整個核心就都在記憶體中了,此時記憶體的使用權已由bootfs轉交給核心,此時系統也會解除安裝bootfs。docker在bootfs之上的一層是rootfs(根檔案系統)。rootfs就是各種不同的作業系統發行版,比如ubuntu,centos等等。docker 核心技術與實現原理 這篇文章,作者閱讀了 rootfs 的規範,指出構建rootfs一些必須的資料夾。

構建映象

bogon:alpine rousseau$ docker build -t alpine:3.8 .

sending build context to docker daemon 4.148mb

step 1/3 : from scratch

--->

step 2/3 : add alpine-minirootfs-3.8.0_rc8-x86_64.tar.gz /

---> dc4ab7451b42

step 3/3 : cmd ["/bin/sh"]

---> running in 6a878a1394a4

removing intermediate container 6a878a1394a4

---> 4e0b9a3dffba

successfully built 4e0b9a3dffba

successfully tagged alpine:3.8

執行

bogon:alpine rousseau$ docker run -i -t alpine:3.8 /bin/sh

/ # ls

bin dev etc home lib media mnt proc root run sbin srv sys tmp usr var

/ # uname -a

linux 9e6234b63505 4.9.87-linuxkit-aufs #1 smp wed mar 14 15:12:16 utc 2018 x86_64 linux

# 檢視容器的日誌

$ docker logs b4ce4d2d7cb6

standard_init_linux.go:190: exec user process caused "exec format error"

docker 建立自己的映象(五)

首先,在上註冊自己的帳號,例如帳號是 test a 留著後台上傳自己的映象至hub時用。vim dockerfile寫乙個很簡單的內容 from centos add jdk 8u191 linux x64.tar.gz usr local 複製centos映象,將與dockerfile檔案相同目錄...

Docker 建立自己的阿里映象庫

前提 你需要有阿里的賬號 訪問阿里映象庫 阿里雲docker倉庫 設定映象庫register密碼 登入位址在我們剛開通的阿里賬號選單裡面,如下圖 sudo docker login username 2421499075 qq.com registry.cn shanghai.aliyuncs.co...

linux 建立docker基礎映象

通過dockerfile建立映象時,一般都是基於 docker hub 提供的官方映象。以下分別介紹在ubuntu16和centos7 兩個系統上建立個人私有基礎映象的方法。一 ubuntu16建立docker基礎映象 1 安裝bootstrap工具debootstrap sudo apt get ...