Dockerfile文件:使用脚本文件生成镜像
生活随笔
收集整理的這篇文章主要介紹了
Dockerfile文件:使用脚本文件生成镜像
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一:Dockerfile文件,就是一個腳本文件
Dockerfile 是一個用來構(gòu)建鏡像的文本文件
沒有文件后綴名,可以直接使用文本編輯器來編寫
就像shell腳本的[xxx.sh]文件,只是沒有.sh作為后綴名。
二:制作這個文件有什么用?
1:版本區(qū)分
2:制作鏡像的過程都在腳本文件中編寫好了,可以清楚知道怎么構(gòu)建的
3:如本地存儲過多鏡像文件,鏡像文件很大的
4:發(fā)送,保存,部署方便
:三:創(chuàng)建Dockerfile文件
linux系統(tǒng)中使用vim編寫Dockerfile
vim dockerfile
windows系統(tǒng)中使用vscode直接編寫,不設(shè)置文件后綴名
四:快速創(chuàng)建Dockerfile參考
FROM [指定什么鏡像作為基礎(chǔ)鏡像] FROM [python:latest]WORKDIR [指定執(zhí)行run命令之前設(shè)置路徑] WORKDIR [/home/]RUN [制作鏡像過程中執(zhí)行l(wèi)inux語句] RUN [下載] RUN [http://www.a.com/a.txt /home/b.txt] RUN [linux命令]使用臨時安裝源來安裝插件 RUN [pip install redis-py -i https://pypi.tuna.tsinghua.edu.cn/simple/] RUN [<語句> && <語句> && <語句>] 盡量用一條RUN,因為每一條RUN都會被打包一次ADD [復制 主機-容器] ADD [/home/a.txt /home/b.txt] ADD [下載 網(wǎng)絡(luò)文件-容器] ADD [http://www.a.com/a.txt /home/b.txt]COPY [復制 主機-容器] COPY [/home/a.txt /home/b.txt]ENV [環(huán)境變量添加] ENV AAA=aaaEXPOSE [端口映射,會被docker run -P覆蓋] EXPOSE 80/tcp EXPOSE 90/tcpVOLUME [掛載卷 1:主機默認docker路徑創(chuàng)建文件夾作為掛在卷,/var/lib/docker/volumes2:容器跟路徑創(chuàng)建一個文件夾] VOLUME [/luichun]ENTRYPOINT [運行起容器后執(zhí)行語句,會在CMD語句之前執(zhí)行] ENTRYPOINT [ls] ENTRYPOINT ["ls"]CMD [運行起容器后執(zhí)行語句,會被docker run <語句>覆蓋] CMD [pwd] CMD ["pwd"] CMD ["py","manage.py","runserver","0.0.0.0:8080"]四:腳本編寫實例
FROM nginx:latest WORKDIR /root/ RUN ls CMD pwd CMD ["yum","install","-y","gcc"] ENTRYPOINT pwd ENTRYPOINT ["yum","install","-y","gcc"] RUN echo a.txt RUN cd /home && mkdir wenjian ENV ABC=abc COPY /home/a.txt /root/ COPY ./b/b.txt /root/ ADD /home/c.txt /root/d.txt ADD https://luichun.com/e.txt /root/ EXPOSE 80/tcp EXPOSE 81/udp VOLUME /home/a/ /home/a/ VOLUME /home2五:Dockerfile文件編寫語法
| FROM <鏡像名字>:<標簽號> | 這個鏡像是用那什么鏡像作為基礎(chǔ)的, 先找本地有沒有這個鏡像 如本地沒有,會自動去docker hub中下載 |
| WORKDIR <linux路徑地址> | 進入容器的什么路徑 例1: WORKDIR /root/ 進入/root/的文件夾 |
| RUN <linux語句> | 有多條RUN語句時,都會執(zhí)行,但顯示的為最后一條 在制作為鏡像時,執(zhí)行l(wèi)inux語句 有多條RUN,則會按順序執(zhí)行,并且沒執(zhí)行一次就打包一次 所以RUN語句盡量使用&&符號來拼接 例1: RUN ls && pwd 列出本目錄文件列表,再查看所在路徑是什么 例2: RUN cd /home && mkdir wenjian 進入home路徑創(chuàng)建【wenjian】文件夾 例3: RUN yum -y install wget && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" && tar -xvf redis.tar.gz |
| COPY <主機文件路徑> <容器路徑文件> | 把主機中的文件復制到容器里面 例1: COPY /home/a.txt /root/b.txt 把主機中home/路徑中的a.txt文件復制到容器/root/文件夾中并且重命名為b.txt 例2: COPY ./b.txt /root/ 把同Dockerfile路徑中的/b文件夾中的b.txt文件復制到容器的/root/文件夾中 |
| ADD <網(wǎng)上的文件下載url> <容器中的路徑> | 從網(wǎng)上下載文件到容器的什么路徑里面 比COPY多一個功能下載 |
| ADD <主機文件路徑> <容器路徑文件> | 把主機中的文件復制到容器里面 例1: ADD /home/a.txt /root/b.txt 和COPY 一樣 |
| VOLUME <主機路徑> <容器路徑> | 掛在卷 把主機的什么路徑替換到容器里面 該路徑中的文件主機能用 該路徑中的文件容器也能用 |
| VOLUME <容器路徑> | 掛在卷 在容器里面創(chuàng)建一個文件夾 例1: VOLUME /home2 等于: VOLUME ["/home2"] 在容器的根目錄中創(chuàng)建home2文件夾 同時也會主機的/var/lib/docker/volumes/的文件夾中創(chuàng)建了一個home2文件夾 主機可把文件放到該位置給容器內(nèi)部使用 也就是該文件夾不會因為容器關(guān)閉而刪除 啟動容器后通過命令docker inspect <容器名>來查看容器掛載卷的信息Mounts 或者docker volume ls查看掛在卷列表 |
| ENV <環(huán)境變量=什么> | 環(huán)境變量,寫入容器里面的環(huán)境變量 例1: ENV ABC=abc 在容器的env里面就會多出一個ABC=abc的變量 |
| EXPOSE <容器的端口> | 暴露容器的什么端口 例1: EXPOSE 80/tcp 暴露80端口使用tcp協(xié)議 注意: 如果在啟動該鏡像的語句中docker run -d ----- 使用了-p,啟動語句優(yōu)先級別高 啟動語句的-p參數(shù)會把構(gòu)建鏡像中的端口覆蓋 |
| 制作成鏡像時不執(zhí)行,當把這個鏡像運行為容器時才執(zhí)行的語句 CMD 與ENTRYPOINT | |
| CMD <linux語句> | 執(zhí)行一條linux語句 制作鏡像時不執(zhí)行,需等到啟動容器時才執(zhí)行 Linux語句有兩種寫法 CMD ["yum","install","-y","gcc"] 等于 CMD yum install -y gcc 本語句可以被docker run <鏡像名> <linux語句>中的<linux語句>覆蓋掉 也就是Dockerfile中編寫的CMD命令不運行 |
| ENTRYPOINT <linux語句> | 執(zhí)行一條linux語句 制作鏡像時不執(zhí)行,需等到啟動容器時才執(zhí)行 ENTRYPOINT ["yum","install","-y","gcc"] 等于 ENTRYPOINT yum install -y gcc 本語句也能被運行容器時的命令語句覆蓋, 但是需要指定參數(shù),如:docker run <鏡像名> --entrypoint <linux語句> |
六:把Dockerfile腳本文件運行起來
docker build .
| docker build . -t NameA:v1 | build:構(gòu)建鏡像 .:表示當前的目錄 -t [自定義鏡像名]:[版本號]:指定構(gòu)建出來的鏡像使用什么名字,什么版本號 得到鏡像 名為:NameA 標簽號:v1 本條語句必須在Dockerfile腳本文件所在的路徑中執(zhí)行本語句, 并且本路徑下的Dockerfile腳本文件的文件名為Dockerfile 新制作出來的鏡像的存放位置是本地鏡像庫 |
| docker build -f fileB -t NameB:v2 | 用名為fileB的腳本文件構(gòu)建NameB的鏡像 -f [自定義的Dockerfile腳本名字]: 制作的Dockerfile腳本文件名字是自定義的名字 本路徑下可能有多個Dockrefile文件 所以不使用.的默認使用文件名 |
構(gòu)建鏡像優(yōu)化技巧:目前是能用就行,不要在這個地方深究,就算是集群部署1000臺機器制作10000個鏡像,總耗時不會使用多于2分鐘
總結(jié)
以上是生活随笔為你收集整理的Dockerfile文件:使用脚本文件生成镜像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成工资条 恢复工资表 宏 巨集 vba
- 下一篇: 分享一个热血合击脚本辅助工具(以及随机数