為了安全,盡量使用官方(official)的image作為base image!
#製作base image
from scratch
#使用base image
from centosfrom ubuntu:
14.04
包含作者、版本、描述,metadata不可少,相當於**注釋!
label maintainer=""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 /rootworkdir /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/binentrypoint [
'docker-entrypoint.sh']
expose
27017
cmd[
"mongod
"]
run apt-get install -y vimcmd 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...