dockerfile制作apache鏡像的方法
一、Docker鏡像
1.1 docker鏡像
應(yīng)用的是發(fā)布的標(biāo)準(zhǔn)格式
支撐一個(gè)docker容器的運(yùn)行
1.2 docker鏡像的創(chuàng)建方法
- 基于已有的鏡像創(chuàng)建
- 基于本地模板創(chuàng)建
- 基于Dockerfile創(chuàng)建
Docker鏡像是分層的結(jié)構(gòu)
①Dockerfile中的每個(gè)指令都會(huì)創(chuàng)建一個(gè)新的鏡像層
②鏡像層將被緩存和復(fù)用
③當(dāng)Dockerfile的指令修改了,復(fù)制的文件變化了,或者構(gòu)建鏡像時(shí)指定的變量不同了,對(duì)應(yīng)的鏡像層緩存就會(huì)失效
④某一層的鏡像緩存失效之后,它之后的鏡像層緩存都會(huì)失效
⑤鏡像層是不可變的,如果在某一層中添加一個(gè)文件,然后在下一層中刪除它,則鏡像中依然會(huì)包含該文件
二、基于已有的鏡像創(chuàng)建實(shí)例
將容器里面運(yùn)行的程序及運(yùn)行環(huán)境打包生成新的鏡像
docker commit 選項(xiàng) 容器id 想要?jiǎng)?chuàng)建的鏡像名:標(biāo)簽
-m:說(shuō)明信息
-a:作者信息
-p:生成過程中停止容器的運(yùn)行
實(shí)例
[root@server1 ~]# docker ps -a #現(xiàn)有容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 86cf506635da centos:7 "/bin/bash" 6 seconds ago Up 5 seconds nervous_shockley [root@server1 ~]# docker commit -m "image" -a "zf" -p 86cf506635da docker:new #創(chuàng)建docker:new鏡像 sha256:e3056b40acd772abc9a39c6c4f3cb42ba119eb9392b32fb275414f00e82d55b2 [root@server1 ~]# docker images #查看生成的鏡像 REPOSITORY TAG IMAGE ID CREATED SIZE docker new e3056b40acd7 9 seconds ago 267MB centos 7 4f280dc8c807 21 hours ago 267MB #最好停止容器再創(chuàng)建鏡像
三、基于本地模板創(chuàng)建
通過導(dǎo)入操作系統(tǒng)模板文件生成新的鏡像
使用wget命令導(dǎo)入為本地鏡像
[root@server1 ~]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new #導(dǎo)入模板命名鏡像名為daoke:new [root@server1 ~]# docker images #查看生成的鏡像 REPOSITORY TAG IMAGE ID CREATED SIZE daoke new 61b2d8af0457 38 seconds ago 215MB docker new e3056b40acd7 10 minutes ago 267MB centos 7 4f280dc8c807 22 hours ago 267MB
四、基于Dockerfile創(chuàng)建
Dockerfile是由一組指令組成的文件。
文件結(jié)構(gòu):
- 基礎(chǔ)鏡像信息
- 維護(hù)者信息
- 鏡像操作指令
- 容器啟動(dòng)時(shí)執(zhí)行指令
Dockerfile每行支持一 條指令,每條指令可攜帶多個(gè)參數(shù),支持使用以“#“號(hào)開頭的注釋。
Dockerfile操作指令:
指令 | 解釋 |
---|---|
FROM 鏡像 | 指定新鏡像所基于的鏡像,第一條指令必須為FROM指令 , |
MAINTAINER名字 | 說(shuō)明新鏡像的維護(hù)人信息 |
RUN 命令 | 在所基于的鏡像上執(zhí)行命令,并提交到新的鏡像中 |
CMD [ "要運(yùn)行的程序”,”參數(shù)1,"參數(shù)2 "] | 指令啟動(dòng)容器時(shí)要運(yùn)行的命令或者腳本,Dockerfile只能有一條CMD命令,如果指定多條則只能最后一條被執(zhí)行 |
EXPOSE 端口號(hào) | 暴露鏡像端口號(hào),方便運(yùn)行鏡像和提供服務(wù)時(shí),映射給外部節(jié)點(diǎn)使用 |
ENV 環(huán)境變量變量值 | 設(shè)置一個(gè)環(huán)境變量的值,會(huì)被后面的RUN使用 |
ADD 源文件/目錄 目標(biāo)文件/目錄 | 從宿主機(jī)復(fù)制文件到容器,如果是壓縮包并進(jìn)行解壓,源文件要與Dockerfile同一目錄 |
COPY源文件/目錄目標(biāo)文件/目錄 | 將本地主機(jī)上的文件/目錄復(fù)制到目標(biāo)地點(diǎn),源文件/目錄要與Dockerfile在相同的目錄中 |
VOLUME [“目錄"] | 在容器中創(chuàng)建一個(gè)掛載點(diǎn) |
USER用戶名/UID | 指定運(yùn)行容器時(shí)的用戶 |
WORKDIR路徑 | 為后續(xù)的RUN、CMD、ENTRYPOINT指定 工作目錄,相當(dāng)于cd |
ONBUILD命令 | 指定所生成的鏡像作為一個(gè)基礎(chǔ)鏡像時(shí)所要運(yùn)行的命令 |
HEALTHCHECK | 健康檢查 |
實(shí)例
[root@server1 ~]# mkdir apache #建立鏡像目錄 [root@server1 ~]# cd apache/ #創(chuàng)建Dockerfile [root@server1 apache]# vi Dockerfile FROM centos:7 #基于的基礎(chǔ)鏡像,在centos內(nèi)核運(yùn)行 MAINTAINER this is zzf web #維護(hù)者信息 RUN yum -y update RUN yum -y install httpd EXPOSE 80 #開啟80端口,給外部映射用 ADD index.html /var/www/html/index.html #將宿主機(jī)網(wǎng)站文件加入到鏡像內(nèi) ADD run.sh /run.sh #將執(zhí)行腳本復(fù)制到鏡像內(nèi) RUN chmod 755 /run.sh #提權(quán) CMD ["/run.sh"] #啟動(dòng)容器時(shí)執(zhí)行腳本,開啟Apache服務(wù) #當(dāng)前目錄里創(chuàng)建index.html和run.sh [root@server1 apache]# vi run.sh #!/bin/bash rm -rf /run/httpd/* exec /usr/sbin/apachectl -D FOREGROUND #啟動(dòng)容器時(shí)啟動(dòng)服務(wù) [root@server1 apache]# vi index.html hello #創(chuàng)建鏡像,必須在當(dāng)前有Dockerfile的目錄下,注意空格加. 代表當(dāng)前目錄 [root@server1 apache]# docker build -t http:centos . #查看創(chuàng)建的鏡像 [root@server1 apache]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE http centos 5db0e8103d54 5 minutes ago 539MB daoke new 61b2d8af0457 33 minutes ago 215MB docker new e3056b40acd7 43 minutes ago 267MB centos 7 4f280dc8c807 22 hours ago 267MB #運(yùn)行鏡像為容器 -p 為映射端口,將容器端口80映射為宿主主機(jī)端口1212(必須是未被占用的) -P 不指定節(jié)點(diǎn)端口,隨機(jī)指定端口,默認(rèn)從32168端口開始分配 [root@server1 apache]# docker run -d -p 1212:80 http:centos #查看容器狀態(tài) [root@server1 apache]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a8fa8ae6be42 http:centos "/run.sh" 3 minutes ago Up 3 minutes 0.0.0.0:1212->80/tcp xenodochial_franklin 86cf506635da centos:7 "/bin/bash" 48 minutes ago Up 48 minutes nervous_shockley
關(guān)閉防火墻,測(cè)試Apache服務(wù)
到此這篇關(guān)于dockerfile制作apache鏡像的方法的文章就介紹到這了,更多相關(guān)dockerfile制作鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux Docker阿里云鏡像倉(cāng)庫(kù)失效的解決
作者分享了在VmWare安裝的Linux7中,通過yum安裝的docker無(wú)法pull鏡像的問題解決經(jīng)驗(yàn),首先,他檢查了網(wǎng)絡(luò)是否通暢,然后設(shè)置了阿里云鏡像加速地址,但仍然無(wú)法pull鏡像,接下來(lái),他查看了docker是否成功設(shè)置鏡像地址,并查看了docker日志2024-10-10快速使用docker-compose部署clickhouse的教程
ClickHouse 的工作速度比傳統(tǒng)方法快 100-1000 倍。它適用于大數(shù)據(jù)、業(yè)務(wù)分析和時(shí)間序列數(shù)據(jù)。在這個(gè)小教程中,我將向您展示如何以最少的設(shè)置安裝 ClickHouse,感興趣的朋友一起看看吧2021-11-11Docker?Desktop?啟用?Kubernetes?失敗后處理方案
?在setting -> Kubernetes 中,選中 Enable Kubernetes 后,長(zhǎng)時(shí)間顯示 Starting ...? ,在Images中顯示幾個(gè)自動(dòng)下載的鏡像后,顯示 Start Kubernetes failed,這篇文章主要介紹了Docker?Desktop啟用Kubernetes失敗后處理方法,需要的朋友可以參考下2023-08-08windows10下安裝docker且使用wsl2安裝雙系統(tǒng)并構(gòu)建最小jre鏡像和應(yīng)用鏡像
這篇文章主要給大家介紹了windows10下安裝docker且使用wsl2安裝雙系統(tǒng)并構(gòu)建最小jre鏡像和應(yīng)用鏡像的流程步驟,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下2023-08-08