只描述非windows系統。
FROM [:] [AS ]: 設置基礎鏡像
FROM alpine:latest
RUN \ ["executable", "param1", "param2"]: 執行shell腳本。進來少使用RUN,因為沒執行一次 docker就會增加一層只讀層。
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'
等同於
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
等同於
RUN ["/bin/bash", "-c", "source $HOME/.bashrc; echo $HOME"]
CMD ["executable","param1","param2"] \ ["param1","param2"] \ command param1 param2: DockerFile中只有一個CMD,多於一個將執行最後一個。它的意思差不多就是啟動容器後執行的默認命令。
FROM *:*
CMD ["catalina.sh", "run"]
LABEL = = ... : 鏡像標籤
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
EXPOSE
EXPOSE 80/tcp
EXPOSE 80/udp
ENV \ =: 設置容器環境變量。可以使用docker run --env =修改環境變量
ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat fluffy
ADD [--chown=:] ... \ [--chown=:] ["",... ""]: 拷貝一個新文件,或者文件夾或者遠程文件的 URLS,把他們添加到,鏡像的文件系統中。 為絕對路徑或者由WORKDIR定義的相對路徑。
ADD hom* /mydir/ # 添加所有以 "hom" 開頭的文件
ADD hom?.txt /mydir/ # ? 替換任何單個的字符, e.g., "home.txt"
ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
ENV cpath /home/zb
ARG zbpath=/home/lala
WORKDIR $cpath
ADD **.jpg $cpath
ADD **.jpg $zbpath
# 添加含有特殊字符的文件或者文件夾時如「[]」,需要遵循 golang 的規則將它們進行轉義,以防它們為匹配模式
ADD arr[[]0].txt /mydir/ # 複製一個文件名為 "arr[0].txt" 到 /mydir/
# 通過 --chown 指定添加文件或者文件夾的用戶名和組名
ADD --chown=55:mygroup files* /somedir/
ADD --chown=bin files* /somedir/
ADD --chown=1 files* /somedir/
ADD --chown=10:11 files* /somedir/
COPY [--chown=:] ... / [--chown=:] ["",... ""]: 與 ADD命令差不多。
ENTRYPOINT ["executable", "param1", "param2"] / command param1 param2: 容器啟動後執行該命令。如果定義ENTRYPOINT 那麼CMD形式就變為CMD ["param1","param2"] json數組中變為ENTRYPOINT的第一個參數和第二個參數
ARG VERSION=latest
FROM alpine:$VERSION
ENTRYPOINT ["ls", "-la"]
ENTRYPOINT與CMD的比較
1.當有多個ENTRYPOINT CMD它們都只執行最後一個
2.當容器為一個可執行文件時應該定義ENTRYPOINT
3.當同時定義ENTRYPOINT 和 CMD時,CMD為ENTRYPOINT的默認參數
4.當docker執行run命令時,在裡面指定CMD時,CMD將會被重寫。
VOLUME ["/data"]: 在製作鏡像時掛載卷。會在宿主機上自動生成一個對應的共享目錄。
RUN mkdir /data1
RUN touch /data1/2a.txt
VOLUME /data1
# 通過命令 docker inspect hasVvolume
"Mounts": [
{
"Type": "volume",
"Name": "0d63fcdf621ee728bb85dfcc2b30f3acddf6489a0e93b81ced17f05860497321",
"Source": "/var/lib/docker/volumes/0d63fcdf621ee728bb85dfcc2b30f3acddf6489a0e93b81ced17f05860497321/_data",
"Destination": "/data1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
========================================================================================================================
# 也可以通過 docker run -v 來掛載共享目錄,這時 Source 指出 -v 時定義的目錄
"Mounts": [
{
"Type": "bind",
"Source": "/Users/zhangbo/Desktop/data1",
"Destination": "/data1",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
容器中共享目錄
# 使用 --volumes-from,達到容器中文件夾共享
docker run -itd --name noVvolume-v-1 --volumes-from noVvolume-v 48cd9e43b6a9
USER [:] / [:]: 給鏡像添加一個用戶
WORKDIR /path/to/workdir or WORKDIR to_workdir /path/to/workdir: 為 RUN, CMD, ENTRYPOINT, COPY, ADD 創建工作目錄
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd
ARG [=] : docker file中的變量
FROM busybox
ARG user1="zhang bo"
ARG buildno
RUN echo $user1
RUN echo $buildno
Step */* : RUN echo $user1
---> Running in a56a602a8f87
zhang bo
Removing intermediate container a56a602a8f87
---> 3e9c6ec19129
Step */* : RUN echo $buildno
---> Running in 6598768a1080
預製變量
FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}
RUN echo $CONT_IMG_VER
# 可以通過 --build-arg 標籤進行給定的預製的變量。--build-arg <varname>=<value>
docker run --build-arg CONT_IMG_VER=******* .
docker 常用命令如下
管理命令:
container 管理容器
image 管理鏡像
network 管理網絡
node 管理Swarm節點
plugin 管理插件
secret 管理Docker secrets
service 管理服務
stack 管理Docker stacks
swarm 管理Swarm集群
system 查看系統信息
volume 管理卷
如:docker container ls 顯示所有容器
普通命令:
attach 進入一個運行的容器
build 從一個DockerFile構建鏡像
commit 從容器創建一個鏡像
cp 從容器和主機文件系統之間拷貝文件
create 創建一個容器
diff 檢查容器文件系統上的更改
events 從伺服器獲取實時事件
exec 在正在運行的容器中運行命令
export 將容器的文件系統導出為tar存檔
history 顯示鏡像的歷史記錄
images 查看鏡像列表
import 從歸檔文件中創建鏡像
info 顯示系統範圍的信息
inspect 返回Docker對象的低級信息
kill kill運行中的容器
load 從存檔或者STDIN加載鏡像
login 登陸docker鏡像倉庫
logout 退出docker鏡像倉庫
logs 獲取一個容器的日誌
pause 暫停一個或多個容器中的所有進程
port 查看埠映射或容器的特定映射列表
ps 查看容器列表
pull 從鏡像倉庫拉取鏡像
push 將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
rename 重命名容器
restart 重啟容器
rm 刪除容器
rmi 刪除鏡像
run 創建一個新的容器並運行一個命令
save 將指定鏡像保存成 tar 歸檔文件
search 從Docker Hub搜索鏡像
start 啟動容器
stats 實時顯示容器資源使用情況的統計信息
stop 停止容器
tag 標記本地鏡像,將其歸入某一倉庫
top 展示一個容器中運行的進程
unpause 恢復容器中所有的進程
update 更新容器配置
version 顯示Docker的版本信息
wait 阻塞直到容器停止,然後列印退出代碼
如:docker images 顯示所有鏡像
參考:
阿波羅程序猿
https://www.jianshu.com/p/ed4818838385
胡海超
http://www.cnblogs.com/cblogs/p/dockerCommand.html
---END---
Kubernetes線下實戰培訓,採用3+1新的培訓模式(3天線下實戰培訓,1年內可免費再次參加),資深一線講師,實操環境實踐,現場答疑互動,培訓內容覆蓋:Docker架構、鏡像、數據存儲、網絡、以及最佳實踐。Kubernetes實戰內容,Kubernetes設計、Pod、常用對象操作,Kuberentes調度系統、QoS、Helm、網絡、存儲、CI/CD、日誌監控等。<了解更多詳情>
北京站:12月30-31日,1月1日(元旦3天),深圳站:12月21-23日;上海站:1月4-6日; 諮詢/報名:曹輝/15999647409