溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二、Docker使用模板創(chuàng)建鏡像、容器管理、倉庫管理、數(shù)據管

發(fā)布時間:2020-02-27 07:31:21 來源:網絡 閱讀:563 作者:seventeen_ 欄目:系統(tǒng)運維

一、Docker使用模板創(chuàng)建鏡像

首先下載一個模板

http://download.openvz.org/template/precreated/

//下載速度不快,下載了一個centos6的模板centos-6-x86-minimal.tar.gz

[root@fuxi01?~]#?wget?http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz

導入該鏡像的命令為:

#?cat?centos-6-x86-minimal.tar.gz|docker?import?-?centos6
sha256:cdce38ce7fb223b243043be905be88f24635036cf850ceae013007f60a2dda51

#?docker?images??//查看導入的鏡像
#?docker?run?-itd?centos6?bash
79ce4ee106cb84aadbc411489dafadd37d06a92e81b1682199b9e573c224ea6d
[root@fuxi01?~]#?docker?exec?-it?79ce4ee1?bash
[root@79ce4ee106cb?/]#?cat?/etc/issue??//查看它的版本
CentOS?release?6.8?(Final)
Kernel?\r?on?an?\m
[root@79ce4ee106cb?/]#?uname?-a
Linux?79ce4ee106cb?3.10.0-693.el7.x86_64?#1?SMP?Tue?Aug?22?21:09:27?UTC?2017?x86_64?x86_64?x86_64?GNU/Linux
[root@79ce4ee106cb?/]#?exit
[root@fuxi01?~]#?uname?-a
Linux?fuxi01?3.10.0-693.el7.x86_64?#1?SMP?Tue?Aug?22?21:09:27?UTC?2017?x86_64?x86_64?x86_64?GNU/Linux

由此可見,docker容器的內核和Linux機器的內核是同一個3.10.0的內核,所以說docker容器是基于Linux內核的。

把現(xiàn)有鏡像,導出為一個文件:

#?docker?save?-o?centos7_with_nettool.tar?centos_with_net

//save -o后先跟文件名,再跟鏡像名。save和load是一對。

[root@fuxi01?~]#?docker?ps?
CONTAINER?ID????????IMAGE???????????????COMMAND?????????????CREATED?????????????STATUS??????????????PORTS???????????????NAMES
79ce4ee106cb????????centos6?????????????"bash"??????????????4?days?ago??????????Up?4?days???????????????????????????????kind_pasteur
b15b83c7c7a2????????centos_with_net?????"/bin/bash"?????????5?days?ago??????????Up?5?days???????????????????????????????infallible_lalande
7ae3b5eb6e41????????ubuntu??????????????"/bin/bash"?????????12?days?ago?????????Up?12?days??????????????????????????????admiring_diffie
43aae89a76ae????????centos??????????????"/bin/bash"?????????13?days?ago?????????Up?13?days??????????????????????????????serene_kare
[root@fuxi01?~]#?docker?images
REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
centos6?????????????latest??????????????cdce38ce7fb2????????4?days?ago??????????512MB
centos_with_net?????latest??????????????2803335f23a6????????5?days?ago??????????261MB
ubuntu??????????????latest??????????????549b9b86cb8d????????3?weeks?ago?????????64.2MB
centos??????????????latest??????????????0f3e07c0138f????????3?months?ago????????220MB
yw_centos???????????latest??????????????0f3e07c0138f????????3?months?ago????????220MB
[root@fuxi01?~]#?docker?rm?-f?b15b83c7c7a2
b15b83c7c7a2
[root@fuxi01?~]#?docker?rmi?2803335f23a6
Untagged:?centos_with_net:latest
Deleted:?sha256:2803335f23a68731a68ffbc860d6e72c15feb2e922cc8aefb1e013fd174b604e
Deleted:?sha256:c7d34cfde22ae64c7556234eed73668e4a7b4b2803e51bde4cbbdbd25bb5a2cb

還可以用該文件恢復本地鏡像:

#?docker?load?--input?centos7_with_nettool.tar??或者
#?docker?load?<?centos7_with_nettool.tar
#?docker?push?image_name

docker push ?//可以把自己的鏡像傳到dockerhub官方網站上去,但前提是需要先注冊一個用戶,后續(xù)如果有需求再研究吧。


二、容器管理

#?docker?create?-it?centos6?bash

//這樣可以創(chuàng)建一個容器,但該容器并沒有啟動,docker create就像創(chuàng)建虛擬機一樣。和docker run基本一樣的用法。創(chuàng)建后,需要用docker ps -a才能看到,狀態(tài)是Created。

#?docker?start?container_id

//啟動容器后,可以使用 docker ps?查看到,有start 就有stop,和restart。

之前我們使用的docker run 相當于先create再start

#?docker?run?-it?centos?bash


這樣進入了一個虛擬終端里面,我們可以運行一些命令,使用命令exit或者ctrl d 退出該bash,當退出后這個容器也會停止。執(zhí)行docker ps -a可以看到它的狀態(tài)是Exited的狀態(tài)了。

# docker run -d ?可以讓容器在后臺運行

比如:docker run -d centos bash -c "while :; do echo "123"; sleep 2; done"

#?docker?run?--name?centos6_1?-itd?centos6?bash??//?--name?給容器自定義名字,如果不定義,docker?ps時最右側的NAMES就是隨機字符串。
#?docker?exec?-it?centos6_1?bash??//進入容器就可以直接寫定義的名字了,不用去寫它的ID了。

#?docker?run?--rm?-it?centos?bash?-c?"sleep?30"?//--rm?可以讓容器退出后直接刪除,在這里命令執(zhí)行完容器就會退出。-c,在容器里執(zhí)行命令。


docker logs 可以獲取到容器的運行歷史信息,用法如下:

docker logs ?container_id ?

[root@fuxi01?~]#?docker?run?-itd?centos?bash?-c?"echo?12345"
7c2e09481628fa13df86bdc858d2641ea094a88ee4fbdc0feeda6f3efa059048
[root@fuxi01?~]#?docker?logs?7c2e09
12345

docker attach 可以進入一個后臺運行的容器,比如

#?docker?attach??container_id????
//但是attach命令不好用,比如我們想要退出終端,就得exit了,這樣容器也就退出stop了,還有一種方法:
#?docker?exec?-it?container_id??bash??
//可以臨時打開一個虛擬終端,并且exit后,容器依然運行著。
#?docker?rm?container_id??
//container_id是docker?ps?-a的時候查看到的,這樣就可以把container刪除,如果是運行的容器,需要用rm?-f。
#?docker??export?container_id??>?file.tar??
//?導出容器,可以遷移到其他機器上,需要導入,導入是docker?load?--input。
#?cat?file.tar?|docker?import?-?aming_test???
//這樣會生成aming_test的鏡像


三、倉庫管理

#?docker?pull?registry


//下載registry 鏡像,registy為docker官方提供的一個鏡像,我們可以用它來創(chuàng)建本地的docker私有倉庫。拉取registry時如果沒有加速器會很慢。加速器:/etc/docker/daemon.json

重啟docker之后所有容器都會停止,要想批量自動啟動所有容器,

執(zhí)行:systemctl restart docker && ?docker start ?$(docker ps -a -q)

docker中 啟動所有的容器命令

#?docker?start?$(docker?ps?-a?|?awk?'{?print?$1}'?|?tail?-n?+2)

docker中 關閉所有的容器命令

#?docker?stop?$(docker?ps?-a?|?awk?'{?print?$1}'?|?tail?-n?+2)


#?docker?run?-d?-p?5000:5000?registry

//以registry鏡像啟動容器,-p會把容器的端口映射到宿主機上,:左邊為宿主機監(jiān)聽端口,:右邊為容器監(jiān)聽端口。也可以寫其他端口,自定義。

//要想訪問容器里的80 端口,就需要做一個端口映射。 ? 比如centos容器里的ip為172.17.0.2,這個IP是對內的,但是宿主機的192.168.255.128是對外的,而宿主機到容器的80端口是可以ping通的。

#?curl?127.0.0.1:5000/v2/_catalog???//可以訪問它
{"repositories":[]}

什么內容也沒有,我們需要把鏡像傳到倉庫里去,傳到倉庫里才能看到。

下面來把其中一個鏡像上傳到私有倉庫

#?docker?tag?centos?192.168.255.128:5000/centos???//標記一下tag,首先是宿主機的IP,必須要帶有私有倉庫的ip:port
#?docker?push?192.168.255.128:5000/centos???//把標記的鏡像給推送到私有倉庫

此時并不會成功,Get https://192.168.255.128:5000/v2/: http: server gave HTTP response to HTTPS client ?報錯,這里用的是https。

解決方法:

更改配置文件:

#?vi?/etc/docker/daemon.json???//更改為這一條內容,之前的加速器需要刪掉,不然push不成功。不使用HTTPS,使用HTTP。
?{?"insecure-registries":["192.168.255.128:5000"]?}
#?systemctl?restart?docker?
#?docker?ps?-a?//查看容器已經關閉,還需要啟動
#?docker?start??id?//這里的id為registry容器id

再次push

#?docker?push?192.168.255.128:5000/centos
#?curl?127.0.0.1:5000/v2/_catalog?//可以查看到推送上來的鏡像
{"repositories":["centos"]}
//這里的centos,就是在push的時候,最后面的字符串。

#?docker?tag?ubuntu?192.168.255.128:5000/ubuntu???//打標簽,推送,就能在私有倉庫查看到了。
#?docker?push?192.168.255.128:5000/ubuntu
#?curl?127.0.0.1:5000/v2/_catalog
{"repositories":["centos","ubuntu"]}

新機器從私有倉庫拉鏡像:
先安裝docker,然后定義倉庫地址vi?/etc/docker/daemon.json,啟動docker,然后pull就可以了:
#?docker?pull?192.168.255.128:5000/ubuntu
//加上IP:port就是在私有倉庫下載,不加就是在官方下載。


四、數(shù)據管理

容器是由鏡像啟動的,容器里產生的新數(shù)據,在容器停止或刪除時,數(shù)據會一并消除,這樣就意味數(shù)據有一定風險。所以想到一個辦法,把宿主機的目錄掛載到容器里去,這樣即使容器被停止或刪除,數(shù)據還是依然在宿主機的目錄里。

1. 掛載本地的目錄到容器里

#?docker?run?-tid?-v?/data/:/data?centos?bash
266bc8cd6fe8fe57c919acddbd958a756bbbdeeb1d6cecf9a49938ee0cd746ab
[root@fuxi01?~]#?ls?/data
change.log??ftp??gitroot??mariadb??mysql??tomcat-instance??user_passwd??wwwroot
[root@fuxi01?~]#?docker?exec?-it?266bc8c?bash
[root@266bc8cd6fe8?/]#?ls?/data
change.log??ftp??gitroot??mariadb??mysql??tomcat-instance??user_passwd	wwwroot
[root@266bc8cd6fe8?/]#?
//這樣,容器里的data目錄和宿主機的data目錄就是數(shù)據同步的了,更改也會同步。

//-v 用來指定掛載目錄,:前面的/data/為宿主機本地目錄,:后面的/data/為容器里的目錄,會在容器中自動創(chuàng)建。


2. 掛載數(shù)據卷(--volumes-from)

其實我們掛載目錄的時候,可以使用--name指定容器name,如果不指定就隨機定義了。比如上面沒有指定,它就生成了一個名字為heuristic_almeida,這個名字可以使用命令 docker ps ?看最右側一列。

#?docker?ps
CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS????????????????????NAMES
266bc8cd6fe8????????centos??????????????"bash"???????????????????23?hours?ago????????Up?23?hours??????????????????????????????????heuristic_almeida
#?docker?run?-itd?--volumes-from?heuristic_almeida?centos6?bash
53ad0ecc0ea797915dd62ce03e886c05f86171136404b35a1f8049542cf57358

這樣,我們使用centos6鏡像創(chuàng)建了新的容器,并且把 heuristic_almeida 容器作為了數(shù)據卷,進入這個centos6的容器可以ls /data看到內容和centos的是一樣的,centos容器的data目錄是什么樣的,它centos6這里就是什么樣的,是關聯(lián)在一起的。


3. 定義數(shù)據卷容器

有時候,我們需要多個容器之間相互共享數(shù)據,類似于linux里面的NFS,所以就可以搭建一個專門的數(shù)據卷容器,然后其他容器直接掛載該數(shù)據卷。

首先建立數(shù)據卷容器

#?docker?run?-itd?-v?/data/?--name?testvol?centos??bash

//注意這里的/data/是容器的/data目錄,并非本地的/data/目錄。?就是不需要宿主機的目錄做映射。把這個目錄共享出來,作為公共的目錄。

然后讓其他容器掛載該數(shù)據卷

#?docker?run?-itd??--volumes-from?testvol?centos6?bash
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI