三、Docker相關概念-image

1.什麼是image

  • image是文件和meta data的集合(root filesystem)
  • 分層的,並且每一層都可以添加改變刪除文件,成爲一個新的image
  • 不用的image可以共享相同的layer
  • image本身是read-only的


2.Image的獲取(1)

  • Build from Dockerfile

    這是一個Dockerfile文件,這個Dockerfile有5行,其中第一行:選擇一個baseImage
    第二行:標明作者是誰
    第三行:基於iamge之上去運行什麼命令
    第四行:暴露的端口
    第五行:起點,程序的入口
docker build -t xiaopeng163/redis:last .

-t聲明一個名字,最後面的.的意思是在當前目錄下的Dockerfile文件去build


3.Image的獲取(2)

  • Pull from Registry
    有點模仿github,提出了一個registry,我們可以從registry中拉去image

    registry是docker提供的一個免費image倉庫,地址:https://hub.docker.com

4.DIY一個自己的image(hello world)

  • 新建文件夾hello-world
  • 用C語言寫一個hello.c
#include<stdio.h>
int main(){
  printf("hello docker");
}

我們知道如果要編譯C語言的程序我們必須要有一個gcc,敲入命令:

sudo yum install gcc
sudo yum install glibc-static
  • 編譯C程序
gcc -static hello.c -o hello

然後我們可以看到在當前目錄下面有了一個可執行文件hello,然後輸入

./hello

就會打印出來hello docker

  • 構建Dockerfile
FROM scratch
ADD hello /
CMD ["/hello"]

這是一個非常簡單的Dockerfile
然後我們來構建這個鏡像

docker build -t tinner/hello-tinner

至此,我們自定義的Dockerfile構建完畢。


我們可以看到,構建的這個鏡像的大小是基於這個可執行文件大小的
然後我們可以看到這個image的分層:

docker history 9993e2f152b3

我們可以看到這個image就只有兩層,第一層是添加文件,第二層是執行命令。其實第一層的FROM scratch是聲明我們這個image不基於任何環境的。
然後運行

docekr run tinner/hello-tinner

可以看到輸出了hello docker

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章