倉庫使用
docker官方倉庫
注冊
https://hub.docker.com
自由注冊,郵件激活即可使用
命令使用
Docker pull/search/login/push/tag
tag [鏡像名:版本] [倉庫]/[鏡像名:版本]:標記本地鏡像,將其歸入某一倉庫
Push [倉庫]/[鏡像名:版本]: 推送鏡像到倉庫 --需要登陸
Search [鏡像名]:在倉庫中查詢鏡像 – 無法查詢到tag版本
Pull [鏡像名:版本]: 下載鏡像到本地
Login:登陸倉庫
1、命令登陸dockerhub
2、再使用tag命令標記一個鏡像,指定自己的倉庫
3、使用push命令推送此鏡像到倉庫里
4、打開查詢自己倉庫的鏡像
私有倉庫
搭建
下載registry鏡像:docker pull registry
-----可配置加速器加速下載
啟動
docker run -d --name reg -p 5000:5000 registry
然后可以通過restful接口查看倉庫中的鏡像(當前倉庫是空的)
配置http傳輸
私服默認只能使用https,需要配置開放http
配置完畢重啟下docker服務
systemctl daemon-reload
systemctl restart docker
私服倉庫推送鏡像
docker tag hello-world 192.168.244.7:5000/hello-world
docker push 192.168.244.7:5000/hello-world
查詢鏡像:http://192.168.244.5:5000/v2/_catalog
查詢hello版本: http://192.168.244.5:5000/v2/hello/tags/list
commit鏡像並上傳倉庫
創建一個centos容器:
啟動后自動進入此容器
容器內安裝nginx服務:
添加一下nginx源:
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum search nginx ##搜索一下看看
yum install nginx -y ## 安裝
啟動nginx服務
ctrl +P+Q退出容器,在主機環境內校驗nginx請求,正常得到歡迎頁
commit服務為一個nginx鏡像
現在要將cent容器提交成為一個鏡像,命令如下:
docker commit cent cent-ng:v1
可看到得到了新的鏡像cent-ng:v1
啟動此nginx鏡像
1、使用新建的鏡像創建容器,並進入查看,發現已安裝有nginx,但nginx並未啟動
容器內啟動nginx服務,並退出容器。在主機方校驗,nginx歡迎頁面出現
2、現在我們希望啟動容器時,直接啟動nginx服務,怎么做?
docker run -d --name ngx3 cent-ng:v1 /usr/sbin/nginx -g "daemon off;"
可看到,容器內nginx服務也已正常運行
ps:后面運行的命令都是容器命令,由於nginx命令沒有設置到path中,所以全路徑啟動,
而nginx -g這個參數是指可以在外面添加指令到nginx的配置文件中,
daemon off是指nginx服務不運行在后端,而是在前台運行(container中的服務必須運行在前台)
commit創建鏡像方式的本質
原容器與commit后的鏡像,在文件系統上並無區別。只是把容器層原來的可寫屬性,置成了只讀。於是變成了一個不可改的鏡像
數據管理
docker容器運行,產生一些數據/文件/等等持久化的東西,不應該放在容器內部。應當以掛載的形式存在主機文件系統中。
docker的文件系統
- 鏡像與容器讀寫層,通過聯合文件系統,組成系統文件視角
- 容器服務運行中,一定會生成數據
- 容器只是運行態的服務器,是瞬時的,不承載數據的持久功能
volume文件掛載的探究
1、volume參數創建容器數據卷
2、我們通過docker inspect data查看容器元數據,可看到掛載信息
3、在容器端添加一個文件
回主機目錄查看,果然存在此文件:
4、在主機方添加一個文件
回容器里查看,果然也同步增加了此文件
5、指定主機目錄方式掛載文件
格式:-v path1:path2
如下命令,容器方會自動增加一個data目錄
宿主機方,同樣自動增加一個/opt/data目錄
volumes-from引用數據卷
新啟一容器,引入上一步的data容器目錄
自動得到同一個目錄,內容與data容器里掛載一樣
備份/恢復數據卷
備份:docker run --rm --volumes-from data -v $(pwd):/backup centos tar cvf /backup/data.tar /opt/data
恢復:docker run --rm --volumes-from data -v $(pwd):/backup centos tar xvf /backup/data.tar -C /
釋義:
docker run --rm ----- 啟動一個新的容器,執行完畢刪除
--volumes-from data ------- data容器中掛載卷
-v $(pwd):/backup --------掛載當前目錄到容器中為backup
cvf /backup/data.tar /opt/data --------- 備份/opt/data目錄(即卷中所有的數據)為data.tar
xvf /backup/data.tar -C / ---------- 解壓data.tar 到根目錄/ ,因tar歸檔中已包含了/opt/data路徑
刪除數據卷:
docker rm -v data
Dockerfile使用
dockerfile方式創建容器
最簡單的dockerfile
創建鏡像
使用此鏡像運行一個容器
dockerfile基本要素
dockerfile指令
FROM:
FROM {base鏡像}
必須放在DOckerfile的第一行,表示從哪個baseimage開始構建
MAINTAINER:
可選的,用來標識image作者的地方
RUN
RUN都是啟動一個容器、執行命令、然后提交存儲層文件變更。
第一層 RUN command1 的執行僅僅是當前進程,一個內存上的變化而已,其結果不會造成任何文件。
而到第二層的時候,啟動的是一個全新的容器,跟第一層的容器更完全沒關系,自然不可能繼承前一層構建過程中的內存變化。
而如果需要將兩條命令或者多條命令聯合起來執行需要加上&&。
如:cd /usr/local/src && wget xxxxxxx
CMD:
CMD的作用是作為執行container時候的默認行為(容器默認的啟動命令)
當運行container的時候聲明了command,則不再用image中的CMD默認所定義的命令
一個Dockerfile中只能有一個有效的CMD,當定義多個CMD的時候,只有最后一個才會起作用
EXPOSE
EXPOSE 指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會因為這個聲明應用就會開啟這個端口的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。
entrypoint:
entrypoint的作用是,把整個container變成可執行的文件,且不能夠通過替換CMD的方法來改變創建container的方式。但是可以通過參數傳遞的方法影響到container內部
每個Dockerfile只能夠包含一個entrypoint,多個entrypoint只有最后一個有效
當定義了entrypoint以后,CMD只能夠作為參數進行傳遞
ADD & COPY:
把host上的文件或者目錄復制到image中(能夠進行自動解壓壓縮包)
ENV:
用來設置環境變量,后續的RUN可以使用它所創建的環境變量
WORKDIR:
用來指定當前工作目錄(或者稱為當前目錄)
USER:
運行RUN指令的用戶
VOLUME:
用來創建一個在image之外的mount point
nginx鏡像制作實戰
編譯/安裝nginx
mkdir一個目錄,在此目錄內下載nginx源碼包
wget http://nginx.org/download/nginx-1.13.2.tar.gz
並創建一個Dockerfile文件,文件內制作一系列nginx的編譯安裝流程,內容如文件:
其中,每一個RUN就是增加一個鏡像層文件,一層層的RUN命令最終形成一系列鏡像層
運行build指令(注意最后的.代表當前路徑),制作鏡像
docker build -t cent-ngx2 .
我們查看一下這個鏡像的層次歷史
可看到,此鏡像層基本與dockerfile文件的RUN是一一對應的
使用制作的nginx鏡像,創建一個容器。
因此鏡像無前台命令,因為必須指定啟動命令 :/usr/local/nginx/sbin/nginx -g "daemon off;"
為鏡像指定環境變量,掛載目錄,默認啟動命令
在上一版鏡像的基礎上,我們新加配置
執行:docker build -t cent-ngx3 .
查看鏡像的歷史,可看到比ngx2的鏡像多了幾個層
ngx3的鏡像創建容器,已經不需要再指定cmd命令了
可執行命令自行校驗:docker run -d --name ng2 cent-ngx3