用docker打包一個demo image

目標

用docker打包一個image,這個image的容器實現(xiàn)打包輸出"hello docker"

打包過程

搜索基線

我們計劃使用echo命令打印,echo命令基于bash。因此,我們先搜索看看是否有bash相關(guān)的image。

~$ sudo docker search bash
NAME                           DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
bash                           Bash is the GNU Project's Bourne Again SHell    232                 [OK]                
basho/riak-kv                  Docker image for running a minimal Riak KV c…   29                                      
...

可以看到官方的bash image。因此我們可以基于此image來打包生成我們自己的image。

Dockerfile編寫

創(chuàng)建一個目錄hello_docker,在下面創(chuàng)建子目錄app,Dockerfile,和腳本hello.sh

spencer@ubuntu:~/my_docker/hello_docker$ tree .
.
├── app
├── Dockerfile
└── hello.sh

hello.sh中,就是我們的容器需要執(zhí)行的指令。

echo "hello docker"

Dockerfile是此步的關(guān)鍵,其內(nèi)容是:

FROM bash
WORKDIR /app
COPY hello.sh .
CMD [ "bash", "hello.sh" ]

解釋:

  • FROM: 表示當前image基于bash這個官方image來打包
  • WORKDIR: 指定容器工作目錄,此目錄下的內(nèi)容,才會被打包進容器
  • COPY: 將腳本拷貝進工作目錄。注意,此命令的第一個參數(shù)是基于宿主機上的當前路徑的,也就是Dockerfile所在的目錄的相對路徑,第二個參數(shù)的是基于WORKDIR的相對路徑(此例中是app目錄)
  • CMD: 指定了容器運行起來后,默認要執(zhí)行的腳本

可以看出,Dockerfile中,除了CMD指令外,其它指令即是在告訴docker框架,如何一步一步地生成image。

打包生成容器

執(zhí)行以下命令打包:

docker image build -t hello_docker .

打包完成后,驗證一下image已生成

spencer@ubuntu:~$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello_docker        latest              39dc2cd8ee2b        16 minutes ago      15.2MB

運行容器

spencer@ubuntu:~$ docker run hello_docker
hello docker

搞定!

Dockerfile是打包image的關(guān)鍵,此例中只用到了簡單的幾個。如果想進一步了解Dockerfile,請參考這里。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容