Docker 中Dockerfile的語法梳理

2022-08-19 12:09:12 字數 2208 閱讀 3984

為了安全,盡量使用官方(official)的image作為base image!

#製作base image

from scratch

#使用base image

from centos

from ubuntu:

14.04

包含作者、版本、描述,metadata不可少,相當於**注釋!

label maintainer="

[email protected]

"label version="

1.0"

label description="

this is description

"

執行命令,安裝軟體,每次run對於image都會生成新的一層

為了美觀,複雜的run請用反斜線換行!

避免無用分層,合併多條命令成一行!

run yum update && yum install -y vim \

python-dev #反斜線換行

run apt-get update && apt-get install -y perl \

pwgen --no-install-recommends && rm -rf \

/var/lib/apt/lists/*

run /bin/bash -c 'source $home/.bashrc;echo $home'

設定當前工作目錄或者建立目錄

用workdir ,不要用run cd!

盡量使用絕對目錄!

workdir /root

workdir /test #如果沒有會自動建立test目錄

workdir demo

run pwd #輸出結果應該是 /test/demo

大部分情況,copy優於add!

add除了copy還有額外功能(解壓)!

新增遠端檔案/目錄請使用curl或者wget!

add hello /add test.tar.gz /#新增到根目錄並解壓

workdir /root

add hello test/ #/root/test/hello

workdir /root

copy hello test/

設定環境變數、常量

env mysql_version 5.6

#設定常量

run apt-get install -y mysql-server= "$"

\ && rm -rf /var/lib/apt/lists/*

#引用常量

儲存和網路

run:執行命令並建立新的image layer

cmd:設定容器啟動後預設執行的命令和引數

容器啟動時預設執行的命令

如果docker run指定了其他命令,cmd命令會被忽略

如果定義了多個cmd,只有最後乙個會執行

entrypoint:設定容器啟動時執行的命令

讓容器以應用程式或者服務的形式執行

不會被忽略,一定會執行

最佳實踐:寫乙個shell指令碼作為entrypoint

copy docker-entrypoint.sh /usr/local/bin

entrypoint [

'docker-entrypoint.sh']

expose

27017

cmd[

"mongod

"]

run apt-get install -y vim

cmd echo

"hello docker

"entrypoint echo

"hello docker

"

run ["

apt-get

", "

install

", "

-y", "

vim"

]cmd [

"/bin/echo

", "

hello docker"]

entrypoint [

"/bin/echo

", "

hello docker

"]

docker映象的製作(一) dockerfile

映象的儲存方式,利用linux的聯合儲存檔案系統,不同的目錄可以掛載在同乙個的檔案系統下,就能形成分層的結構 在同乙個目錄下查詢到其他各個目錄的檔案。在 docker commit 的學習中,我們可以了解到,映象的定製實際上就是定製每一層所 新增的配置 檔案。如果我們可以把每一層修改 安裝 構建 操...

Docker容器中執行docker 命令

一 在一台執行了docker的伺服器上,啟動374c3bec1f4b 映象的容器,這個映象中安裝docker yum install docker y docker run itd v var run docker.sock var run docker.sock name docker test ...

docker 關於docker中掛載的解釋

現在有這麼乙個命令 docker run p 33061 3306 name mysql restart always e mysql root password pisen v etc localtime etc localtime ro v etc timezone etc timezone r...