溫馨提示×

溫馨提示×

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

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

Docker鏡像、容器、倉庫三大概念的對應(yīng)操作介紹

發(fā)布時(shí)間:2021-09-08 16:19:38 來源:億速云 閱讀:120 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“Docker鏡像、容器、倉庫三大概念的對應(yīng)操作介紹”,在日常操作中,相信很多人在Docker鏡像、容器、倉庫三大概念的對應(yīng)操作介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker鏡像、容器、倉庫三大概念的對應(yīng)操作介紹”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!


鏡像

鏡像是Docker運(yùn)行容器的前提

獲取鏡像

docker pull NAME[:TAG] // 不指定TAG,默認(rèn)選擇latest標(biāo)簽

運(yùn)行鏡像

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)建鏡像

  • 基于已有鏡像創(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í)例,它帶有額外的可寫文件層

創(chuàng)建容器

新建容器

使用 docker create 創(chuàng)建容器后市處于停止?fàn)顟B(tài),可以使用 docker start 啟動(dòng)

docker create -it ubuntu:latest
新建并啟動(dòng)容器
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)作:

  1. 檢查本地是否有對應(yīng)的鏡像,不存在就從共有倉庫下載;

  2. 利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器;

  3. 分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層;

  4. 從宿主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中;

  5. 分配一個(gè)ip給容器;

  6. 執(zhí)行用戶指定的應(yīng)用程序;

  7. 執(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)行的必要了;

守護(hù)態(tài)運(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

進(jìn)入容器

當(dāng)容器后臺(tái)啟動(dòng),用戶無法進(jìn)入容器中,如果需要進(jìn)入容器進(jìn)行操作,則可以使用下面方法:

attach命令
$ 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è)阻塞則全部阻塞。

exec

Docker 1.3 版本起引入一個(gè)可以直接在容器內(nèi)執(zhí)行命令的工具 exec。

進(jìn)入之前創(chuàng)建的容器,并啟動(dòng)一個(gè)bash:

$ docker exec -ti b99 bash
root@b9953944f4cc:/#
nsenter

第三方支持,感興趣可以自己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

導(dǎo)入和導(dǎo)出容器

導(dǎo)出容器
docker export CONTAINER
docker export cae > test_for_run.tar

可以將導(dǎo)出的文件傳輸?shù)狡渌麢C(jī)器上,直接通過導(dǎo)入命令實(shí)現(xiàn)容器遷移。

導(dǎo)入容器

導(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ù)器。

創(chuàng)建和使用私有倉庫

使用registry鏡像創(chuàng)建私有倉庫

可以使用官方提供的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 下載即可;

  1. 為鏡像打標(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ù)器的地址和端口

  1. 上傳到鏡像服務(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)可以看到倉庫中的鏡像了。

  1. 測試下載鏡像

$ 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í)用的文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI