Dockerfile的書寫規則和指令的使用方法

2021-10-01 17:14:53 字數 4366 閱讀 3510

dockerfile中的每個指令都會建立乙個新的映象層

映象層將被快取和復用

當dockerfile的指令修改了,複製的檔案變化了,或者構建映象時指定的變數不同了,對應的映象快取就會失效

某一層的映象快取失效之後,它的映象層快取都會失效

映象層是不可變的,如果在某一層中新增乙個檔案,然後在下一層中刪除它,則映象中依然會包含該檔案docker映象

docker映象的建立方法將容器裡面執行的程式及執行環境打包生成新的映象

docker create

-it centos /bin/bash

docker commit

-m "new"

-a "daoke" a19597abf62d daoke:centos

通過匯入作業系統模板檔案生成新的映象

使用wget命令匯入為本地映象

wget 

cat nginx-

1.12

.0.tar.gz | docker import

- docker:new

匯入成功後可檢視本地映象資訊
docker images | grep new
dockerfile是由一組指令組成的檔案

dockerfile結果四部分

使用dockerfile建立映象並在容器中執行

指令含義

from映象

指定新映象所基於的映象,第一條指令必須為from指令,每建立乙個映象就需要ffrom指令。

maintainer 名字

說明新映象的維護人資訊

run命令

在所基於的映象上執行命令,並提交到新的映象中

cmd[ 「要執行的程式","引數1,「引數2 "]

指令啟動容器時要執行的命令或者指令碼,dockerfile只能有一條cmd命令,如果指定多條則只能最後f被執行

expose 埠號

指定新映象載入到docker時要開啟的埠

env環境變數變數值

設定乙個環境變數的值,會被後面的run使用

add原始檔/目錄目標檔案/目錄

將原始檔複製到目標檔案,原始檔要與dockerfile位於相同目錄中,或者是f url

copy原始檔/目錄目標檔案/目錄

將本地主機上的檔案/目錄複製到目標地點,原始檔/目錄要與dgckerfile在相同的目錄中

volume [「目錄」]

在容器中建立乙個掛載點

user使用者名稱/uid

指定執行容器時的使用者

workdir 路徑

為後續的run、cmd、entrypoint指定工作目錄

onbuild 命令

指定所生成的映象作為乙個基礎映象時所要執行的命令

healthcheck

健康檢查

mkdir apache

cd apache/

vim dockerfile

#基於的基礎映象

from centos

#維護映象的使用者資訊

maintainer the project

#映象操作指令安裝apache軟體

run yum -y update

//更新yum倉庫

#開啟80埠

expose 80

#複製**首頁檔案

addindex

.html /var/www/html/

index

.html

#將執行指令碼複製到映象中

add run.sh /run.sh

run chmod 755

/run.sh

#啟動容器時執行指令碼

//生成映象

//新映象執行容器

#基於的基礎映象

from centos

#維護映象的使用者資訊

maintainer this is project

run yum -y update

#安裝必要軟體包

run yum -y install openssh* net-tools lsof telnet passwd

#為root使用者設定密碼

run echo '123456'

| passwd --stdin root

#修改配置檔案

run sed -i 's/usepam yes/usepam no/g'

/etc/ssh/sshd_config

#生成秘鑰

run ssh-keygen -t rsa -f /etc/ssh/sshd_host_rsa_key

run sed -i '/^scssion\s\+required\s\+pam_loginuid.so/s/^/#/'

/etc/pam.d/sshd

run mkdir -p /root/

.ssh && chown root.root /root && chmod 700

/root/

.ssh

#開啟20埠

expose 22

#啟動容器

cmd [

"/usr/sbin/sshd"

,"-d"

]//生成映象

docker build -t sshd:new .

//啟動容器並修改root密碼

docker run -d -p sshd:new

ssh localhost -p 32770

mkdir systemctl 

cd systemctl

vim dockerfile

#基於的基礎映象

from sshd:new

env container docker

run (cd /lib/systemd/system/sysinit.target.wants/

;for i in*;

do[ $i =

= \systemd-tmpfile-setup.service ]

|| rm -f $i; done)

; \rm -f /lib/systemd/system/multi-

user

.target.wants/

*; \

rm -f /etc/systemd/system/

*.wants/

*; \

rm -f /lib/systemd/system/

local

-fs.target.wants/

*; \

rm -f /lib/systemd/system/sockets.target.wants/

*udev*

; \rm -f /lib/systemd/system/sockets.target.wants/

*initctl*

; \rm -f /lib/systemd/system/basic.target.wants/

*; \

rm -f /lib/systemd/system/anaconda.target.wants/*;

volume [

"/sys/fs/cgroup"

]cmd [

"/usr/sbin/init"

]//生成映象

docker build -t local

/c7-systemd:latest .

//privileged container內的root擁有真正的root許可權。否責,container內的root只是外部的乙個普通使用者許可權

docker run --privileged -ti -v /sys/fs/cgroup:sys/fs/cgroup:ro local/c7-systemd:latest /sbin/init

//進入容器

docker exec

-it 映象ip bash

QSS 書寫規則

借用css 的靈感,qt也支援qt自己的css,簡稱qss。同css 相似,qss的主要功能與最終目的都是能使介面的表現與介面的元素分離,即質與形的分離,就如同乙個人可以在不同的時候穿上不同的衣服一樣,css機制的引入,使得設計一種 與介面控制項分離的軟體成為可能,應用程式也能像web介面那樣隨意地...

sql書寫規則

表命名是以英文名稱為原則,表示該錶的具體意義,例如商品表可以叫item,商品表可以叫item image。如果公司業務複雜,資料庫過多,schema也比較多,則要根據schema的來命名,例如 在crm下面可以用crm開頭命名crm user.臨時表應該以tmp開頭tmp user,這樣的表一段時間...

uBlock的動態規則過濾規則書寫

ublock具有動態和靜態兩種規則,但是它比之前的abp等規則過濾規則強的地方就在於他的動態規則,靜態規則的語法繼承與abp,有興趣的可以去看abp的過濾規則現在主要介紹它的動態規則,這才是讓它變成神器的主要原因 英文文件 語句書寫非常簡單 分為4塊 主機位址 目前正在瀏覽的 載入廣告的源位址 請求...