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