Dockerfile 基礎實戰:構建基礎的 ubuntu14.04 鏡像

咱們能夠從Docker Hub上下載官方倉庫中的鏡像,我本身就下載了ubuntu鏡像,只有188M左右,很小巧了。可是看了下,裏面的軟件源仍是官方的,並且沒有安裝vim,因此就打算本身寫一個Dockerfile,用它來構建適合本身的ubuntu基礎鏡像。git

languagedeb http://archive.ubuntu.com/ubuntu/ trusty main restricted
deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted
...................

構建上下文

build context,一個自定義的文件夾,裏面放置Dockerfile和一些須要的文件。好比個人:github

  • Dockerfile...這個是必須的
  • sources.list...本身在官方社區找的ubuntu14.04的源
  • vimrc...安裝好vim後用到的配置文件。我事先配置好的,都是些基礎的配置。
language.
├── baseimage
│   ├── Dockerfile
│   ├── README.md
│   ├── sources.list
│   └── vimrc

Dokerfile

製做image有兩種方法:docker

  • 從現有容器經過commit命令建立

    • dockerfile中不方便的操做能夠在容器中操做而後提交
    • 沒有批量啓動容器的須要
    • 本身學、習練習,不須要移植
  • 利用Dockerfile構建

    • 方便,靈活,可移植
    • 適合部署大量的鏡像和容器

Dockerfile基礎

  • '#'表示註釋,通常Dockerfile第一行註釋容器的基本信息和版本。
  • Dockerfile以命令:參數爲基本構建語句,命令所有大寫,後面的參數視命令而定
  • FROM,必須是第一個命令項,表示個人鏡像是以哪一個鏡像爲基礎構建的ubuntu

    languageFROM ubuntu
  • MAINTAINER,後面接構建這的姓名和郵箱,方便聯繫vim

    languageMAINTAINER adolphlwq <kenan3015@gmail.com>
  • LABEL,用鍵值對的方式來指定image的元數據緩存

    languageLABEL Description="it is used as a basic image for DuoHuoStudio and my study.I will update and install vim." Vendor="Basic image"
  • ADD,在構建時向Docker daemon傳遞文件bash

    languageADD sources.list /etc/apt/
  • RUN,接操做和命令sudo apt-get install -y vimui

    languageADD sources.list /etc/apt/
  • CMD,構建成功的鏡像第一次啓動時默認啓動的命令spa

    • CMD只有1條,通常默認在Dockerfile的最後
    • 若是有多個CMD,只有最後一個起做用
    • CMD會被docker run ..後面的命令覆蓋
    languageCMD ["/bin/bash"]
  • ENV,設置環境變量rest

    languageENV REFRESHED_AT 2015-05-18

構建命令

languagecd baseimage(構建上下文文件夾)
docker build -t="duohuosrudio/ubuntu:14.04_64_base_image" .

docker build-t表示容器的名字
duohuosrudio/ubuntuduohuostudio表示倉庫名(不容許大寫),ubuntu表示鏡像名。
ubuntu:14.04_64_base_image後的14.04_64_base_image是標籤,若是沒有指定,默認的是latest

構建過程:

實踐中遇到的錯誤

  • apt-get upgradeapt-get install vim都要加上** -y**選項,否則會報錯
  • ADD後面必須接兩個參數,ADD <src>... <dest>表示要添加的文件,表示文件添加到哪裏。
  • ADD添加的文件必須以構建上下文爲根目錄來找,不能超出構建上下文的範圍。

若是除錯中止構建了也不要擔憂,Docker會把構建過程當中的文件都緩存起來,再次構建時會從緩存的地方開始,節省時間。

除錯中止後docker images會出現一個只有IMAGE ID的鏡像,這個就是構建失敗後留下的緩存,咱們能夠經過image id來運行這個鏡像,而後執行除錯的命令來檢查爲何出錯!(下圖的最後1行)

languageadolph@geek:~/programs/DockerWorkspace/dockerfile/baseimage$ docker images
REPOSITORY               TAG                   IMAGE ID            CREATED             VIRTUAL SIZE
test/ubuntu              14.04_64_base_image   e9390454465c        14 hours ago        269.1 MB
test2/ubuntu             14.04_64_base_image   e9390454465c        14 hours ago        269.1 MB
duohuostudio/ubuntu      14.04_64_base_image   e9390454465c        14 hours ago        269.1 MB
<none>                   <none>                f6efc4dac25a        16 hours ago        269.1 MB

總結

languagedocker build -t="duohuostudio/ubuntu:14.04_64_base_image" .

這條命令的最後一個參數是用來指定Dockerfile的路徑,千萬不要忘記。

dockerfile已經上傳到 github 地址

鏡像也已經上傳到Docker Hub上了,能夠經過下列命令下載鏡像

docker pull adolphlwq/ubuntu
相關文章
相關標籤/搜索