Docker的理解和基本命令

如何通俗解釋D ocker是什麼?
Docker思想來自於集裝箱,集裝箱解決了什麼問題呢?比如,在一艘大船上,要把各種各樣的貨物要整理起來,集裝箱(Docker)就可以做到,並且相互間不會影響。就不需要指定運輸的船了(這個船運吃的那個船運穿的)。只要把貨物裝在集裝箱裏封裝好,就可以用一艘大船把他們都運走。
1.Docker就是類似的理念。雲計算是運輸船,Docker就是集裝箱。
1.不同的應用程序可能會有不同的應用環境,比如.net開發的網站和php開發的網站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調試很久,而且很麻煩,還會造成一些衝突。比如IIS和Apache訪問端口衝突。這個時候你就要隔離.net開發的網站和php開發的網站。常規來講,我們可以在服務器上創建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。docker可以實現虛擬機隔離應用環境的功能,並且開銷比虛擬機小,小就意味着省錢了。
2.你開發軟件的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟件從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的數據庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發環境直接封裝轉移給運維,運維直接部署你給他的docker就可以了。而且部署速度快。
3.在服務器負載方面,如果你單獨開一個虛擬機,那麼虛擬機會佔用空閒內存的,docker部署的話,這些內存就會利用起來。
總之docker就是集裝箱原理。
4.docker就是用來存放應用的一個容器

容器管理
# docker run -it –name vm1 ubuntu bash //創建容器
# docker ps -a //查看容器狀態
# 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
容器內的數據提交:(docker commit vm3 ubuntu//提交vm3容器裏面的數據到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

提交的內容是在鏡像裏面的內容上加一層(只讀):

[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建立容器,容器內部包含有vm1裏面的文件。如果刪除vm1裏面新建的文件,再次提交,ubuntu裏面的內容就會被覆蓋掉。再次用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章