Docker的理解和基本命令詳解
如何通俗解釋D ocker是什么?
Docker思想來自于集裝箱,集裝箱解決了什么問題呢?比如,在一艘大船上,要把各種各樣的貨物要整理起來,集裝箱(Docker)就可以做到,并且相互間不會影響。就不需要指定運輸?shù)拇耍ㄟ@個船運吃的那個船運穿的)。只要把貨物裝在集裝箱里封裝好,就可以用一艘大船把他們都運走。
1.Docker就是類似的理念。云計算是運輸船,Docker就是集裝箱。
1.不同的應用程序可能會有不同的應用環(huán)境,比如.net開發(fā)的網(wǎng)站和php開發(fā)的網(wǎng)站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調(diào)試很久,而且很麻煩,還會造成一些沖突。比如IIS和Apache訪問端口沖突。這個時候你就要隔離.net開發(fā)的網(wǎng)站和php開發(fā)的網(wǎng)站。常規(guī)來講,我們可以在服務器上創(chuàng)建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。docker可以實現(xiàn)虛擬機隔離應用環(huán)境的功能,并且開銷比虛擬機小,小就意味著省錢了。
2.你開發(fā)軟件的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟件從開發(fā)環(huán)境轉移到生產(chǎn)環(huán)境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的數(shù)據(jù)庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發(fā)環(huán)境直接封裝轉移給運維,運維直接部署你給他的docker就可以了。而且部署速度快。
3.在服務器負載方面,如果你單獨開一個虛擬機,那么虛擬機會占用空閑內(nèi)存的,docker部署的話,這些內(nèi)存就會利用起來。
總之docker就是集裝箱原理。
4.docker就是用來存放應用的一個容器
容器管理
# docker run -it –name vm1 ubuntu bash //創(chuàng)建容器 # docker ps -a //查看容器狀態(tài) # docker attach vm1 //鏈接容器 # docker top vm1 //查看容器進程 [root@foundation22 ~]# docker run -it –name vm1 ubuntu root@b6e503aec1e3:/# [root@foundation17 ~]# //////用ubuntu這個鏡像生成一個名為vm1的容器/// [root@foundation22 ~]# docker run -it ubuntu //未制定容器名稱 [root@foundation22 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2c94bd4ef22 ubuntu “/bin/bash” 2 minutes ago Up 2 minutes silly_curie a2798a01f075 ubuntu “/bin/bash” 4 minutes ago Up 8 seconds vm1 [root@foundation22 ~]# docker stop c2c94bd4ef22 //結束一個容器(用進程id結束) c2c94bd4ef22 [root@foundation22 ~]# docker rm c2c94bd4ef22 //刪除容器(用進程id刪除) c2c94bd4ef22 [root@foundation22 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a2798a01f075 ubuntu “/bin/bash” 5 minutes ago Up About a minute vm1 root@bd4961841626:/# [root@foundation17 ~]# docker attach vm1 root@bd4961841626:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@bd4961841626:/# touch file{1..5} root@bd4961841626:/# ls bin dev file1 file3 file5 lib media opt root sbin sys usr boot etc file2 file4 home lib64 mnt proc run srv tmp var [root@foundation22 ~]# docker pause vm1 //暫停容器 vm1 [root@foundation22 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd4961841626 ubuntu “/bin/bash” 2 minutes ago Up 41 seconds (Paused) vm1 [root@foundation22 ~]# docker unpause vm1 //啟動容器 vm1 [root@foundation22 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd4961841626 ubuntu “/bin/bash” 3 minutes ago Up About a minute vm1 [root@foundation22 ~]# docker run -it –name vm2 ubuntu root@aac0080d0606:/# [root@foundation17 ~]# docker run -it –name vm3 ubuntu root@13e9f0e36ea0:/# [root@foundation17 ~]# docker run -it –name vm4 ubuntu root@2e4adfc6ea87:/# [root@foundation17 ~]# docker run -it –name vm5 ubuntu root@cf98619960fc:/# [root@foundation17 ~]# [root@foundation22 ~]# docker ps -aq cf98619960fc 2e4adfc6ea87 13e9f0e36ea0 aac0080d0606 bd4961841626 [root@foundation22 ~]# docker stop docker ps -aq cf98619960fc 2e4adfc6ea87 13e9f0e36ea0 aac0080d0606 bd4961841626
容器內(nèi)的數(shù)據(jù)提交:(docker commit vm3 ubuntu//提交vm3容器里面的數(shù)據(jù)到ubuntu鏡像放到倉庫)
[root@foundation22 ~]# docker commit vm3 ubuntu sha256:ca9b1aa4a9aee738f632999bfad3baf5bda20b5a8b51de82b8f288a922cb4a66 [root@foundation22~]# docker stop vm3 vm3 [root@foundation22 ~]# docker rm vm3 vm3 [root@foundation22 ~]# docker run -it –name vm4 ubuntu root@6cb52f07dcde:/# ls bin dev file1 file3 file5 lib media opt root sbin sys usr boot etc file2 file4 home lib64 mnt proc run srv tmp var
提交的內(nèi)容是在鏡像里面的內(nèi)容上加一層(只讀):
[root@foundation22 ~]# docker run -it –name vm1 ubuntu root@59026e7f5104:/# ls bin dev file1 file3 file5 lib media opt root sbin sys usr boot etc file2 file4 home lib64 mnt proc run srv tmp var root@59026e7f5104:/# rm -fr file* root@59026e7f5104:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@59026e7f5104:/# exit exit [root@foundation22 ~]# docker commit vm1 ubuntu sha256:734d5eba88071735584a1c22519d9000d133b531df3dd7b56e6bbd0dca2abdd3 [root@foundation22 ~]# docker run -it –name vm8 ubuntu root@e05171f7c0c7:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr [root@foundation22 ~]# docker history ubuntu //查看鏡像的層(最多不能超過127層) IMAGE CREATED CREATED BY SIZE COMMENT 734d5eba8807 29 minutes ago /bin/bash 52 B ca9b1aa4a9ae 51 minutes ago /bin/bash 28 B 07c86167cdc4 14 months ago /bin/sh -c #(nop) CMD [“/bin/bash”] 0 B 220d2912ab1d 14 months ago /bin/sh -c sed -i ‘s/^#\s*(deb.*universe)$/ 1.895 kB cc77a2e3d72c 14 months ago /bin/sh -c echo ‘#!/bin/sh' > /usr/sbin/polic 194.5 kB c8fa7cdceff3 14 months ago /bin/sh -c #(nop) ADD file:b9504126dc55908988 187.7 MB
////vm1里面新建文件后,提交,vm1里面的文件提交到ubuntu之后,ubuntu里面就有記錄,再用鏡像ubuntu建立容器,容器內(nèi)部包含有vm1里面的文件。如果刪除vm1里面新建的文件,再次提交,ubuntu里面的內(nèi)容就會被覆蓋掉。再次用ubuntu建立容器,新建立的容器不就沒有最早vm1里面建立的文件。
復制文件到容器里面需要制定路徑(即容器源)
[root@foundation22~]# docker cp /etc/passwd vm1 must specify at least one container source [root@foundation22 ~]# docker cp /etc/passwd vm1:/ [root@foundation22 ~]# docker export -o vm2.tar vm1 //導出到當前目錄,并命名為vm2.tar [root@foundation22 ~]# docker save -o ubuntu.tar ubuntu:v1 // 將ubuntu:v1鏡像制成 ubuntu:v1文件 [root@foundation22 ~]# docker run -d –name web -p 8000:80 nginx 3cca467e17717b7dd09dd997d7df4e2239e8505be8f0fc79ec11804c5365103d [root@foundation22 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cca467e1771 nginx “nginx -g ‘daemon off” 15 seconds ago Up 11 seconds 443/tcp, 0.0.0.0:8000->80/tcp web [root@foundation22 ~]# netstat -antlp | grep :8000 tcp6 0 0 :::8000 :::* LISTEN 16093/docker-proxy [root@foundation22 ~]# docker diff vm1 C /root C /root/.bash_history A /passwd D /file2 D /file5 D /file1 D /file3 D /file4
D:表示刪除
A:表示增加add
以上所述是小編給大家介紹的Docker的理解和基本命令詳解,希望對大家有所幫助!
相關文章
Docker安裝方法與Docker四種網(wǎng)絡模式詳解
今天小編就為大家分享一篇關于Docker安裝方法與Docker四種網(wǎng)絡模式的詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-09-09