您好,登錄后才能下訂單哦!
這篇文章主要介紹“Docker鏡像、容器、倉庫三大概念的對應(yīng)操作介紹”,在日常操作中,相信很多人在Docker鏡像、容器、倉庫三大概念的對應(yīng)操作介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker鏡像、容器、倉庫三大概念的對應(yīng)操作介紹”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
鏡像是Docker運(yùn)行容器的前提
docker pull NAME[:TAG] // 不指定TAG,默認(rèn)選擇latest標(biāo)簽
docekr run -t -i ubuntu /bin/bash
docker images
添加鏡像標(biāo)簽
docker tag ubuntu:latest my/ubuntu:latest
查看鏡像詳細(xì)信息
docker inspect 鏡像id docker inspect -f {{".Architecture"}} id // 查詢某一項(xiàng)內(nèi)容
docker search TERM --automated=false 僅展示自動(dòng)創(chuàng)建的鏡像 --no-trunc=false 輸出信息不截?cái)囡@示 -s=0 僅顯示評(píng)價(jià)為指定星級(jí)以上的鏡像
docker rmi IMAGE[IMAGE...] 其中IMAGE可以為標(biāo)簽或者id
刪除正在運(yùn)行的鏡像
docker rmi -f ubuntu 強(qiáng)制刪除(不建議) 推薦:1. 刪除容器;2. 再用id刪除鏡像 docker rm id docker rmi ubuntu
基于已有鏡像創(chuàng)建
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 選項(xiàng)包括: -a,--author="" 作者信息 -m,--message="" 提交信息 -p,--pause=true 提交時(shí)暫停容器運(yùn)行
下面是一個(gè)展示:
$ winpty docker run -ti ubuntu bash root@39b31ce63c14:/# touch test root@39b31ce63c14:/# exit # 查看容器id $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 39b31ce63c14 ubuntu "bash" 12 minutes ago Exited (0) 11 minutes ago friendly_chebyshev $ docker commit -m "added a new file" -a "coderluo" 39b test:coderluo sha256:489150941c65c552268ddacd10d9fe05c01e30c8c3bd111e4217d727e8f724c4
基于本地模板導(dǎo)入
可以直接從一個(gè)操作系統(tǒng)模板文件導(dǎo)入一個(gè)鏡像,推薦使用OpenVZ提供的模板來創(chuàng)建。下載地址為:
https://wiki.openvz.org/Download/template/precreated
比如我下載了一個(gè)ubuntu,可以使用如下命令導(dǎo)入:
[root@izwz909ewdz83smewux7a7z ~]# cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04 sha256:57a7c0bb864c4185d5d9d6eb6af24820595482b9df956adec5fde8d16aa9cb7c [root@izwz909ewdz83smewux7a7z ~]# docker images
基于Dockerfile創(chuàng)建
可以使用 docker save 和 docker load 命令來存出和載入鏡像
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE myubuntu coderluo 489150941c65 About an hour ago 64.2MB ubuntu latest a2a15febcdf3 43 hours ago 64.2MB ubuntu 14.04 271ca7812183 3 months ago 188MB chong@L MINGW64 ~ $ docker save -o myubuntu_14.04.tar myubuntu:coderluo
chong@L MINGW64 ~ $ docker load < myubuntu_14.04.tar
docker push NAME[:TAG]
容器就是鏡像的一個(gè)運(yùn)行實(shí)例,它帶有額外的可寫文件層
使用 docker create 創(chuàng)建容器后市處于停止?fàn)顟B(tài),可以使用 docker start 啟動(dòng)
docker create -it ubuntu:latest
root@ubuntu_server:/home/coderluo# docker run ubuntu /bin/echo 'i am coderluo' i am coderluo
等價(jià)于先 docker create 然后 docker start命令
docker run 需要執(zhí)行的動(dòng)作:
檢查本地是否有對應(yīng)的鏡像,不存在就從共有倉庫下載;
利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器;
分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層;
從宿主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中;
分配一個(gè)ip給容器;
執(zhí)行用戶指定的應(yīng)用程序;
執(zhí)行完畢后容器關(guān)閉;
接下來,我們打開一個(gè)bash終端,允許用戶交互:
docker run -ti ubuntu bash
-t : 選項(xiàng)讓Docker分配一個(gè)偽終端并綁定到容器的標(biāo)準(zhǔn)輸入
-i : 讓容器的標(biāo)準(zhǔn)輸入保持打開
使用 exit 可以退出容器,退出后該容器就處于終止?fàn)顟B(tài),因?yàn)閷?yīng)Docker容器來說,當(dāng)運(yùn)行的應(yīng)用退出后,容器也就沒有運(yùn)行的必要了;
比較常見的是需要Docker容器在后臺(tái)以守護(hù)態(tài) 形式運(yùn)行。 可以通過添加 -d 參數(shù)來實(shí)現(xiàn):
$ docker run -d ubuntu sh -c "while true; do echo hello world; sleep 1; done" caedc06b26723ec1aff794a053835d2b0b603702bea8a5bb3a39e97b0adf5654 $ docker logs cae hello world hello world hello world hello world hello world hello world
docker stop [-t|--time[=10]]
它首先會(huì)向容器發(fā)送SIGTERM信號(hào),等待一段時(shí)間后(默認(rèn)10s)。再發(fā)送SIGKILL信號(hào)終止容器。
注意: docker kill 會(huì)直接發(fā)送SIGKILL 來強(qiáng)行終止容器。
$ docker stop cae cae
當(dāng)Docker容器中運(yùn)行的應(yīng)用終結(jié)時(shí),容器也自動(dòng)終止。例如上面開啟的終端容器,通過exit退出終端后,創(chuàng)建的容器也會(huì)終止。
可以使用 docekr ps -a -q
所有狀態(tài)的容器ID信息。
$ docker ps -a -q 90bcf718ad13 caedc06b2672 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES caedc06b2672 ubuntu "sh -c 'while true; …" 17 minutes ago Up About a minute epic_swartz $ docker restart cae cae $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES caedc06b2672 ubuntu "sh -c 'while true; …" 18 minutes ago Up 8 seconds epic_swartz
當(dāng)容器后臺(tái)啟動(dòng),用戶無法進(jìn)入容器中,如果需要進(jìn)入容器進(jìn)行操作,則可以使用下面方法:
$ docker run -idt ubuntu b9953944f4cc4a17d09bba846d40eea25523098d188d44484f814132e3a04ae7 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b9953944f4cc ubuntu "/bin/bash" 7 seconds ago Up 5 seconds laughing_chatterjee $ docker attach laughing_chatterjee root@b9953944f4cc:/#
缺點(diǎn):當(dāng)多個(gè)窗口同時(shí)attach到同一個(gè)容器中,所有窗口同步顯示,一個(gè)阻塞則全部阻塞。
Docker 1.3 版本起引入一個(gè)可以直接在容器內(nèi)執(zhí)行命令的工具 exec。
進(jìn)入之前創(chuàng)建的容器,并啟動(dòng)一個(gè)bash:
$ docker exec -ti b99 bash root@b9953944f4cc:/#
第三方支持,感興趣可以自己google,個(gè)人感覺和exec差不多
docker rm [OPTIONS] CONTAINER [CONTAINER...]
-f,--force=false 強(qiáng)行終止并刪除一個(gè)運(yùn)行中的容器
-l,--link=false 刪除容器的連接,但保留容器
-v,--volumes=false 刪除容器掛載的數(shù)據(jù)卷
$ docker rm 90b 90b $ docker rm b99 Error response from daemon: You cannot remove a running container b9953944f4cc4a17d09bba846d40eea25523098d188d44484f814132e3a04ae7. Stop the container before attemptin g removal or force remove chong@L MINGW64 ~ $ docker rm -f b99 b99
docker export CONTAINER
docker export cae > test_for_run.tar
可以將導(dǎo)出的文件傳輸?shù)狡渌麢C(jī)器上,直接通過導(dǎo)入命令實(shí)現(xiàn)容器遷移。
導(dǎo)出的文件可以使用 docker import 命令導(dǎo)入,成為鏡像。
$ cat Desktop/test_for_run.tar | docker import - test/ubuntu:v1.0 sha256:aa9dd6a88eb02d192c0574e1e2df171d0ec686a21048cba9a70fcd9ce3ba7d76 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/ubuntu v1.0 aa9dd6a88eb0 11 seconds ago 64.2MB
這里和前面鏡像模塊的 docker load 載入鏡像的區(qū)別是:
docker import 用來導(dǎo)入一個(gè)容器快照到本地鏡像庫,會(huì)丟棄所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當(dāng)時(shí)的快照狀態(tài)),而 docker load 命令載入鏡像文件會(huì)保存完成的記錄,體積也要大。而且容器快照導(dǎo)入可以重新制定標(biāo)簽等元數(shù)據(jù)信息。
倉庫是集中存放鏡像的地方
很多人容易搞混倉庫和注冊服務(wù)器。這里說明下,注冊服務(wù)器和倉庫的區(qū)別。
注冊服務(wù)器是存放倉庫的地方,每個(gè)服務(wù)器上可以有多個(gè)倉庫,而每個(gè)倉庫下面有多個(gè)鏡像,比如ubuntu是一個(gè)倉庫,下面有很多不同版本的鏡像。他所在的服務(wù)器就是注冊服務(wù)器。
可以使用官方提供的registry 鏡像 簡單搭建一套本地私有倉庫環(huán)境:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
參數(shù)說明:
-d,后臺(tái)運(yùn)行
-p,端口映射
-v,將宿主機(jī)的/opt/data/registry 綁定到 /var/lib/registry, 來實(shí)現(xiàn)數(shù)據(jù)存放到本地路徑,默認(rèn)registry容器中存放鏡像文件的目錄/var/lib/registry
運(yùn)行后測試下我們私有倉庫中的所有鏡像:
$ curl http://倉庫宿主機(jī)ip:5000/v2/_catalog % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 20 100 20 0 0 20 0 0:00:01 --:--:-- 0:00:01 160{"repositories":[]}
現(xiàn)在是空的,因?yàn)椴艅傔\(yùn)行,里面沒有任何鏡像內(nèi)容。
在一臺(tái)測試機(jī)上(非倉庫機(jī))查看已有鏡像,如果當(dāng)前沒有鏡像 使用 docker pull 下載即可;
為鏡像打標(biāo)簽
格式為: docker tag IMAGE[:TAG] [REGISTRYHOST/] [USERNAME/] NAME[:TAG]
docker tag ubuntu:latest 192.168.137.200:5000/ubuntu:v1 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.137.200:5000/ubuntu v1 a2a15febcdf3 3 days ago 64.2MB
192.168.137.200:5000 為私有鏡像注冊服務(wù)器的地址和端口
上傳到鏡像服務(wù)器
$ docker push 192.168.137.200:5000/ubuntu The push refers to repository [192.168.137.200:5000/ubuntu] 122be11ab4a2: Pushed 7beb13bce073: Pushed f7eae43028b3: Pushed 6cebf3abed5f: Pushed v1: digest: sha256:ca013ac5c09f9a9f6db8370c1b759a29fe997d64d6591e9a75b71748858f7da0 size: 1152 $ curl http://192.168.137.200:5000/v2/_catalog % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 28 100 28 0 0 28 0 0:00:01 --:--:-- 0:00:01 198{"repositories":["ubuntu"]}
如上curl命令發(fā)現(xiàn)已經(jīng)可以看到倉庫中的鏡像了。
測試下載鏡像
$ docker rmi -f 鏡像id # 刪除本地鏡像 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE $ docker pull 192.168.137.200:5000/ubuntu:v1 #下載私有倉庫鏡像 v1: Pulling from ubuntu 35c102085707: Pull complete 251f5509d51d: Pull complete 8e829fe70a46: Pull complete 6001e1789921: Pull complete Digest: sha256:ca013ac5c09f9a9f6db8370c1b759a29fe997d64d6591e9a75b71748858f7da0 Status: Downloaded newer image for 39.108.186.135:5000/ubuntu:v1 $ docker images # 查看本地鏡像 REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.137.200:5000/ubuntu v1 a2a15febcdf3 3 days ago 64.2MB
列出所有鏡像:
$ curl 39.108.186.135:5000/v2/_catalog % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 28 100 28 0 0 28 0 0:00:01 --:--:-- 0:00:01 254{"repositories":["ubuntu"]}
某個(gè)鏡像倉庫中的所有tag:
$ curl http://39.108.186.135:5000/v2/ubuntu/tags/list % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 32 100 32 0 0 32 0 0:00:01 --:--:-- 0:00:01 128{"name":"ubuntu","tags":["v1"]}
到此,關(guān)于“Docker鏡像、容器、倉庫三大概念的對應(yīng)操作介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。