Docker之創建自定義鏡像


簡單介紹

之前使用docker run或者docker pull使用了Docker Hub上面已經構建好的的鏡像,當然也可以自己基於基礎鏡像自定義鏡像。

 

實際操作

1、可以使用docker run或者docker pull進行鏡像的拉取和運行。

2、使用docker search ×××指令進行查找鏡像

指令:sudo docker search fedora


結果

這里展示了有關fedora的鏡像,顯示了鏡像名稱,描述,星級,是否為官方以及是否自動構建信息。

3、構建鏡像

構建鏡像可以使用兩個命令:

(1)docker commit

(2)docker build命令和Dockerfile文件

3.1docker commit

可以將此方法看為在以往版本控制系統里提交變更,然后進行變更的提交即可。首先創建一個新容器,也可以在之前容器基礎上進行修改,這里使用已有容器進行修改。

sudo docker start suspicious_noyce

sudo docker attach suspicious_noyce

在容器內進行apache2的安裝,並希望將這個容器作為一個web服務器來運行,所以把當前的狀態保留下來。這樣就不需要每次都創建一個容器並再次在里面安裝Apache了。

root@d0920780bc56:/# apt-get -yqq update

root@d0920780bc56:/# apt-get -y install apache2

運行成功之后,就可以進行提交鏡像了。如下:

指令:

sudo docker commit -m"A new custom image" -a"MNicholas" d0920780bc56 mnicholas/apache2:webserver

在docker commit命令中,首先-m選項用來制定新創建的鏡像的提交信息,同時還制定了-a選項用來列出該鏡像的作者信息。接着指定了要提交的修改過的容器的ID為d0920780bc56(可以通過sudo docker ps -l -q查看),最后的指定了鏡像的用戶名和倉庫名為mnicholas/apache2:webserver,並為該鏡像增加了一個webserver標簽。

可以使用sudo docker inspect mnicholas/apache2:webserver查看鏡像的詳細信息,如下:


詳細信息

3.2Dockerfile和docker build

不推薦使用docker commit方法來構建鏡像,相反,使用被稱為Dockerfile的定義文件和docker build命令來構建鏡像。Dockerfile使用基本的基於DSL(Domain Specific Language)語法的指令來構建一個鏡像,因為通過Dockerfile構建鏡像更具備可重復性、透明性和冪等性。一旦有了Dockerfile,就可以使用docker build命令基於該Dockerfile中的指令構建一個新的鏡像。

首先創建一個Dockerfile,路徑自己熟悉即可,內容如下:

# cd Docker

# mkdir static_web

# cd static_web/

創建一個static_web目錄用來存放Dockerfile,這個目錄就是我們的構建環境(build environment),Docker則稱此環境為上下文(context)或者構建上下文(build context)。Docker會在構建鏡像時將構建上下文和該上下文中的文件和目錄上傳到Docker守護進程。這樣Docker守護進程就能直接訪問用戶想在鏡像中存儲的任何地阿媽、文件或者其他數據。

# Version: 0.0.1

FROM ubuntu:18.04

MAINTAINER MNicholas "632549546@qq.com"

RUN apt-get update && apt-get install -y nginx

RUN echo 'Hi, I am in you container'  >/usr/share/nginx/html/index.html

EXPOSE 80

如此,使用如下指令進行構建鏡像:

sudo docker build -t="mnicholas/static_web" .

注意:最后的“.”不能少,否則無法構建。


成功

3.3查看鏡像


成功

 

 

參考:

《第一本Docker書》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM