目錄
- 從已有鏡像更新鏡像:
- 從零開(kāi)始構(gòu)建鏡像:
從 docker 鏡像倉(cāng)庫(kù)中下載的鏡像不能滿足我們的需求時(shí),可以通過(guò)以下兩種方式對(duì)鏡像進(jìn)行更改。
- 從已有鏡像更新鏡像
- 從零開(kāi)始構(gòu)建鏡像
從已有鏡像更新鏡像:
更新鏡像之前,我們需要使用鏡像來(lái)創(chuàng)建一個(gè)容器。
進(jìn)入容器:
docker run -t -i db2b37ec6181 /bin/bash
在運(yùn)行的容器內(nèi)使用 apt-get update 命令進(jìn)行更新。在完成操作之后,輸入 exit 命令來(lái)退出這個(gè)容器。
此時(shí) ID 為 0aab061e6f5a的容器,是按我們的需求更改的容器。我們可以通過(guò)命令 docker commit 來(lái)提交容器副本。
[root@localhost .ssh]# docker commit -m="has update" -a="zyn" 0aab061e6f5a mysql:v2 sha256:3dda266fd05963e816f22e3dec2584589977e040f7202e0421b0151290e4f54b
以上命令各個(gè)參數(shù)說(shuō)明:
-m: 提交的描述信息
-a: 指定鏡像作者
0aab061e6f5a:容器 ID
mysql:v2: 指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名
我們可以使用 docker images 命令來(lái)查看我們的新鏡像 mysql:v2:
從零開(kāi)始構(gòu)建鏡像:
使用命令 docker build , 從零開(kāi)始來(lái)創(chuàng)建一個(gè)新的鏡像。為此,需要?jiǎng)?chuàng)建一個(gè) Dockerfile 文件,其中包含一組指令來(lái)告訴 Docker 如何構(gòu)建我們的鏡像。
例如我們將一個(gè)jar包構(gòu)建出docker鏡像:
首先創(chuàng)建Dockerfile文件:
FROM java:8 MAINTAINER zyn COPY jenkins.war /usr/local/jenkins.war EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/usr/local/jenkins.war","--httpPort=8080"]
以上命令各個(gè)參數(shù)說(shuō)明:
java:8就是剛下載的基礎(chǔ)鏡像
MAINTAINER是作者
COPY是把本地的jar拷貝到鏡像中
EXPOSE聲明鏡像開(kāi)放的接口
ENTRYPOINT 是指定在docker run時(shí)的命令參數(shù),類似的還是RUN和CMD命令
每一個(gè)指令都會(huì)在鏡像上創(chuàng)建一個(gè)新的層,每一個(gè)指令的前綴都必須是大寫(xiě)的。
然后將jar放到與Dockerfile同級(jí)目錄下:
最后,我們使用 Dockerfile 文件,通過(guò) docker build 命令來(lái)構(gòu)建一個(gè)鏡像:
注意:Dockerfile后面的點(diǎn)指的是把當(dāng)前目錄作為上下文目錄,創(chuàng)建鏡像時(shí),會(huì)把上下文目錄的文件拷貝到鏡像中,也就是把jar包拷貝到鏡像中
[root@localhost zyn]# docker build -t my_jenkins:1.0 -f Dockerfile . Sending build context to Docker daemon 67.29MB Step 1/5 : FROM java:8 8: Pulling from library/java 5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Downloaded newer image for java:8 ---> d23bdf5b1b1b Step 2/5 : MAINTAINER zyn ---> Running in d8027d9002f4 Removing intermediate container d8027d9002f4 ---> cdd9362868cb Step 3/5 : COPY jenkins.war /usr/local/jenkins.war ---> 3a276d766222 Step 4/5 : EXPOSE 8080 ---> Running in 99cf28fb33a8 Removing intermediate container 99cf28fb33a8 ---> de89b785c80d Step 5/5 : ENTRYPOINT ["java", "-jar", "/usr/local/jenkins.war","--httpPort=8080"] ---> Running in c3a7e16eaa11 Removing intermediate container c3a7e16eaa11 ---> 5107b1256f01 Successfully built 5107b1256f01 Successfully tagged my_jenkins:1.0
啟動(dòng)以上的docker鏡像:
[root@localhost zyn]# docker run -itd --name jenkins -p 18080:8080 my_jenkins:1.0 5e185bb8e4866b8018f0b3bb7a4845360d3d4efc5bd2509d84fe118929fe52b3
到此這篇關(guān)于Docker構(gòu)建鏡像的兩種方式實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker構(gòu)建鏡像內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!