Docker是一款針對程序開發人員和系統管理員來開發、部署、運行應用的一款虛擬化平臺。Docker 可讓你像使用集裝箱同樣快速的組合成應用,而且能夠像運輸標準集裝箱同樣,儘量的屏蔽代碼層面的差別。Docker 會盡量的縮短從代碼測試到產品部署的時間。css
docker pull命令從倉庫獲取鏡像,默認倉庫源是docker官方源,爲了加快速度,可使用其它源地址:mysql
docker pull http://localhost:5000/ubuntu:18.04
最經常使用的是更換docker默認源爲國內源:
vim /etc/docker/daemon.json
nginx
{
"registry-mirrors": [ "https://registry.docker-cn.com" ] }
重啓docker便可使用git
docker images
web
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.100.52:5000/centos latest 7a5530ef979d 5 days ago 4.75 GB
centos lnmp2 7a5530ef979d 5 days ago 4.75 GB
127.0.0.1:5000/centos latest 7a5530ef979d 5 days ago 4.75 GB
192.168.100.52/centos latest 7a5530ef979d 5 days ago 4.75 GB
id相同的鏡像是同一個鏡像
tag用來標記贊成倉庫的不一樣鏡像
使用docker run 啓動鏡像的時候,若是不指定具體的tag。怎會啓動最新latestsql
通常來講不是真正的建立新鏡像,而是基於一個已有的基礎鏡像,如ubuntu,centos等構建新鏡像而已。docker
先使用鏡像啓動容器,而後進入容器進行修改,修改完成後退出容器,用docke commit 命令進行提交更改後的容器副本,shell
docker commit
apache
選項:
-a :提交的鏡像做者; -c :使用Dockerfile指令來建立鏡像; -m :提交時的說明文字; -p :在commit時,將容器暫停。
mkdir -p /home/docker-web && cd /home/docker-web && touch Dockerfile
#註釋
FROM ubuntu:14.04 #指定一個基礎鏡像,FROM要大寫
MAINTAINER #鏡像做者以及聯繫方式
RUN #RUN命令會在當前鏡像中運行指定命令。好比:
RUN yum -y install apache
默認狀況下,RUN指令會在shell裏使用命令包裝器/bin/sh -c來執行,不支持shell用exec格式的RUN
RUN [ "yum","-y","install","apache"]
EXPOSE指定須要打開哪些端口
構建鏡像
docker build -t="centos/apache:v1 ."
-t
選項爲鏡像指定倉庫和鏡像名字。
.
指定在當前目錄中指定Dockerfile
也能夠指定一個git倉庫源地址
構建每一步都會有id,若是構建出錯,進入前一步驟的id進行調試,而後再次構建。
- Dockerfile和構建緩存
因爲每步過程都會提交爲鏡像,最終鏡像以前的鏡像就能夠看做是緩存,若是構建失敗對某一步驟進行調試,前面幾步沒有改動,會在有修改的步驟開始進行構建。
不須要構建緩存時,用--no-cache
參數
- 基於緩存構建Dockerfile模板
構建緩存的好處是,能夠實現簡單的Dockerfile模板,,好比在Dockerfile文件頂部增長包倉庫或者更新包,儘量命中緩存。
- ENV指令爲環境變量,因爲鏡像的層次文件系統,環境變量在後續的層次中被引用。當容器啓動後,在容器能夠經過env命令查看環境變量。
ENV DIR=/usr/local/
WORKDIR $DIR
ENV建立的環境變量會持久的保存到今後鏡像建立的任何容器中,也可因此使用docker run -e
參數指定環境變量,只在啓動時有效
- RUN命令是構建容器時所須要運行的命令
- CMD是在容器運行時,須要運行的命令,將要運行的命令放在一個數組結構中例如:CMD ["bin/bash","ls"]
, 若是不加數組結構,docker會在命令前加上/bin/sh -c
- 啓動容器時docker run命令能夠覆蓋CMD
- Dockerfile中只能指定一個CMD命令。多個CMD只會執行最後一個
- ENTRYPOINT指令與CMD類似,區別:docker run會覆蓋CMD命令,可是不能覆蓋ENTRYPOINT命令。如需覆蓋在啓動時市容docker run --entrypoint
- WORKDIR指令從鏡像建立容器時,在容器內設置一個工做目錄,指定ENTRYPOINT和/或者CMD、RUN、COPY、ADD指令的工做目錄,若是不存在,就會建立。能夠屢次設置。在啓動容器時,用docker run -w
參數進行覆蓋。
- USER指令用來指定該鏡像會議什麼用戶運行。啓動時用docker run -u
參數進行覆蓋。默認爲root。json
USER user
USER user:group
USER uid:gid
USER uid:group
VOLUME ["/data/mysql","data"]
ADD passwd /etc/passwd
將本地構建目錄下的passwd複製到鏡像中/etc/passwd。能夠是一個url,或者構建上下文文件或者目錄,不能是構建目錄意外的文件。docker經過末尾的/判斷是目錄仍是文件。添加url示例:ADD http://www.baidu.com/123.zip /home/baidu.zip
當ADD的文件是本地歸檔文件。會自動解包。ADD baidu.zip /home/
會自動解包,若是存在目標文件或目錄,不會被覆蓋,自動解壓支支持本地歸檔文件,不支持url。若是目標路徑不存在則會自動建立