日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Dockerfile文件:使用脚本文件生成镜像

發布時間:2023/12/14 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dockerfile文件:使用脚本文件生成镜像 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:Dockerfile文件,就是一個腳本文件

Dockerfile 是一個用來構建鏡像的文本文件
沒有文件后綴名,可以直接使用文本編輯器來編寫
就像shell腳本的[xxx.sh]文件,只是沒有.sh作為后綴名。

二:制作這個文件有什么用?

1:版本區分
2:制作鏡像的過程都在腳本文件中編寫好了,可以清楚知道怎么構建的
3:如本地存儲過多鏡像文件,鏡像文件很大的
4:發送,保存,部署方便

:三:創建Dockerfile文件

linux系統中使用vim編寫Dockerfile

vim dockerfile

windows系統中使用vscode直接編寫,不設置文件后綴名

四:快速創建Dockerfile參考

FROM [指定什么鏡像作為基礎鏡像] FROM [python:latest]WORKDIR [指定執行run命令之前設置路徑] WORKDIR [/home/]RUN [制作鏡像過程中執行linux語句] 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 [下載 網絡文件-容器] ADD [http://www.a.com/a.txt /home/b.txt]COPY [復制 主機-容器] COPY [/home/a.txt /home/b.txt]ENV [環境變量添加] ENV AAA=aaaEXPOSE [端口映射,會被docker run -P覆蓋] EXPOSE 80/tcp EXPOSE 90/tcpVOLUME [掛載卷 1:主機默認docker路徑創建文件夾作為掛在卷,/var/lib/docker/volumes2:容器跟路徑創建一個文件夾] VOLUME [/luichun]ENTRYPOINT [運行起容器后執行語句,會在CMD語句之前執行] ENTRYPOINT [ls] ENTRYPOINT ["ls"]CMD [運行起容器后執行語句,會被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 <鏡像名字>:<標簽號>這個鏡像是用那什么鏡像作為基礎的,
先找本地有沒有這個鏡像
如本地沒有,會自動去docker hub中下載
WORKDIR <linux路徑地址>進入容器的什么路徑
例1:
WORKDIR /root/
進入/root/的文件夾
RUN <linux語句>有多條RUN語句時,都會執行,但顯示的為最后一條

在制作為鏡像時,執行linux語句
有多條RUN,則會按順序執行,并且沒執行一次就打包一次
所以RUN語句盡量使用&&符號來拼接
例1:
RUN ls && pwd
列出本目錄文件列表,再查看所在路徑是什么
例2:
RUN cd /home && mkdir wenjian
進入home路徑創建【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 <網上的文件下載url> <容器中的路徑>從網上下載文件到容器的什么路徑里面
比COPY多一個功能下載
ADD <主機文件路徑> <容器路徑文件>把主機中的文件復制到容器里面
例1:
ADD /home/a.txt /root/b.txt
和COPY 一樣
VOLUME <主機路徑> <容器路徑>掛在卷
把主機的什么路徑替換到容器里面
該路徑中的文件主機能用
該路徑中的文件容器也能用
VOLUME <容器路徑>掛在卷
在容器里面創建一個文件夾
例1:
VOLUME /home2
等于:
VOLUME ["/home2"]
在容器的根目錄中創建home2文件夾
同時也會主機的/var/lib/docker/volumes/的文件夾中創建了一個home2文件夾
主機可把文件放到該位置給容器內部使用
也就是該文件夾不會因為容器關閉而刪除
啟動容器后通過命令docker inspect <容器名>來查看容器掛載卷的信息Mounts
或者docker volume ls查看掛在卷列表
ENV <環境變量=什么>環境變量,寫入容器里面的環境變量
例1:
ENV ABC=abc
在容器的env里面就會多出一個ABC=abc的變量
EXPOSE <容器的端口>暴露容器的什么端口
例1:
EXPOSE 80/tcp
暴露80端口使用tcp協議
注意:
如果在啟動該鏡像的語句中docker run -d -----
使用了-p,啟動語句優先級別高
啟動語句的-p參數會把構建鏡像中的端口覆蓋
制作成鏡像時不執行,當把這個鏡像運行為容器時才執行的語句
CMD 與ENTRYPOINT
CMD <linux語句>執行一條linux語句
制作鏡像時不執行,需等到啟動容器時才執行
Linux語句有兩種寫法
CMD ["yum","install","-y","gcc"]
等于
CMD yum install -y gcc
本語句可以被docker run <鏡像名> <linux語句>中的<linux語句>覆蓋掉
也就是Dockerfile中編寫的CMD命令不運行
ENTRYPOINT <linux語句>執行一條linux語句
制作鏡像時不執行,需等到啟動容器時才執行
ENTRYPOINT ["yum","install","-y","gcc"]
等于
ENTRYPOINT yum install -y gcc

本語句也能被運行容器時的命令語句覆蓋,
但是需要指定參數,如:docker run <鏡像名> --entrypoint <linux語句>

六:把Dockerfile腳本文件運行起來

docker build .

語句意思
docker build . -t NameA:v1build:構建鏡像
.:表示當前的目錄
-t [自定義鏡像名]:[版本號]:指定構建出來的鏡像使用什么名字,什么版本號
得到鏡像 名為:NameA 標簽號:v1
本條語句必須在Dockerfile腳本文件所在的路徑中執行本語句,
并且本路徑下的Dockerfile腳本文件的文件名為Dockerfile
新制作出來的鏡像的存放位置是本地鏡像庫
docker build -f fileB -t NameB:v2用名為fileB的腳本文件構建NameB的鏡像
-f [自定義的Dockerfile腳本名字]:
制作的Dockerfile腳本文件名字是自定義的名字
本路徑下可能有多個Dockrefile文件
所以不使用.的默認使用文件名

構建鏡像優化技巧:目前是能用就行,不要在這個地方深究,就算是集群部署1000臺機器制作10000個鏡像,總耗時不會使用多于2分鐘

總結

以上是生活随笔為你收集整理的Dockerfile文件:使用脚本文件生成镜像的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。