https://hub.docker.comnginx
自由註冊,郵件激活便可使用docker
Docker pull/search/login/push/tag後端
tag [鏡像名:版本] [倉庫]/[鏡像名:版本]:標記本地鏡像,將其納入某一倉庫centos
Push [倉庫]/[鏡像名:版本]: 推送鏡像到倉庫 --須要登錄 服務器
Search [鏡像名]:在倉庫中查詢鏡像 – 沒法查詢到tag版本 restful
Pull [鏡像名:版本]: 下載鏡像到本地ui
Login:登錄倉庫spa
1、命令登錄dockerhub3d
2、再使用tag命令標記一個鏡像,指定本身的倉庫rest
3、使用push命令推送此鏡像到倉庫裏
4、打開查詢本身倉庫的鏡像
下載registry鏡像:docker pull registry
-----可配置加速器加速下載
docker run -d --name reg -p 5000:5000 registry
而後能夠經過restful接口查看倉庫中的鏡像(當前倉庫是空的)
私服默認只能使用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
啓動後自動進入此容器
添加一下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後的鏡像,在文件系統上並沒有區別。只是把容器層原來的可寫屬性,置成了只讀。因而變成了一個不可改的鏡像
docker容器運行,產生一些數據/文件/等等持久化的東西,不該該放在容器內部。應當以掛載的形式存在主機文件系統中。
1、volume參數建立容器數據卷
2、咱們經過docker inspect data查看容器元數據,可看到掛載信息
3、在容器端添加一個文件
回主機目錄查看,果真存在此文件:
4、在主機方添加一個文件
回容器裏查看,果真也同步增長了此文件
5、指定主機目錄方式掛載文件
格式:-v path1:path2
以下命令,容器方會自動增長一個data目錄
宿主機方,一樣自動增長一個/opt/data目錄
新啓一容器,引入上一步的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
建立鏡像
使用此鏡像運行一個容器
FROM {base鏡像}
必須放在DOckerfile的第一行,表示從哪一個baseimage開始構建
可選的,用來標識image做者的地方
RUN都是啓動一個容器、執行命令、而後提交存儲層文件變動。
第一層 RUN command1 的執行僅僅是當前進程,一個內存上的變化而已,其結果不會形成任何文件。
而到第二層的時候,啓動的是一個全新的容器,跟第一層的容器更徹底不要緊,天然不可能繼承前一層構建過程當中的內存變化。
而若是須要將兩條命令或者多條命令聯合起來執行須要加上&&。
如:cd /usr/local/src && wget xxxxxxx
CMD的做用是做爲執行container時候的默認行爲(容器默認的啓動命令)
當運行container的時候聲明瞭command,則再也不用image中的CMD默認所定義的命令
一個Dockerfile中只能有一個有效的CMD,當定義多個CMD的時候,只有最後一個纔會起做用
EXPOSE 指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會由於這個聲明應用就會開啓這個端口的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另外一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。
entrypoint的做用是,把整個container變成可執行的文件,且不可以經過替換CMD的方法來改變建立container的方式。可是能夠經過參數傳遞的方法影響到container內部
每一個Dockerfile只可以包含一個entrypoint,多個entrypoint只有最後一個有效
當定義了entrypoint之後,CMD只可以做爲參數進行傳遞
把host上的文件或者目錄複製到image中(可以進行自動解壓壓縮包)
用來設置環境變量,後續的RUN可使用它所建立的環境變量
用來指定當前工做目錄(或者稱爲當前目錄)
運行RUN指令的用戶
用來建立一個在image以外的mount point
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