您好,登錄后才能下訂單哦!
這篇文章主要介紹“Docker鏡像、容器、倉庫三大概念的對應操作介紹”,在日常操作中,相信很多人在Docker鏡像、容器、倉庫三大概念的對應操作介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker鏡像、容器、倉庫三大概念的對應操作介紹”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
鏡像是Docker運行容器的前提
docker pull NAME[:TAG] // 不指定TAG,默認選擇latest標簽
docekr run -t -i ubuntu /bin/bash
docker images
添加鏡像標簽
docker tag ubuntu:latest my/ubuntu:latest
查看鏡像詳細信息
docker inspect 鏡像id docker inspect -f {{".Architecture"}} id // 查詢某一項內容
docker search TERM --automated=false 僅展示自動創建的鏡像 --no-trunc=false 輸出信息不截斷顯示 -s=0 僅顯示評價為指定星級以上的鏡像
docker rmi IMAGE[IMAGE...] 其中IMAGE可以為標簽或者id
刪除正在運行的鏡像
docker rmi -f ubuntu 強制刪除(不建議) 推薦:1. 刪除容器;2. 再用id刪除鏡像 docker rm id docker rmi ubuntu
基于已有鏡像創建
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 選項包括: -a,--author="" 作者信息 -m,--message="" 提交信息 -p,--pause=true 提交時暫停容器運行
下面是一個展示:
$ 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
基于本地模板導入
可以直接從一個操作系統模板文件導入一個鏡像,推薦使用OpenVZ提供的模板來創建。下載地址為:
https://wiki.openvz.org/Download/template/precreated
比如我下載了一個ubuntu,可以使用如下命令導入:
[root@izwz909ewdz83smewux7a7z ~]# cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04 sha256:57a7c0bb864c4185d5d9d6eb6af24820595482b9df956adec5fde8d16aa9cb7c [root@izwz909ewdz83smewux7a7z ~]# docker images
基于Dockerfile創建
可以使用 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]
容器就是鏡像的一個運行實例,它帶有額外的可寫文件層
使用 docker create 創建容器后市處于停止狀態,可以使用 docker start 啟動
docker create -it ubuntu:latest
root@ubuntu_server:/home/coderluo# docker run ubuntu /bin/echo 'i am coderluo' i am coderluo
等價于先 docker create 然后 docker start命令
docker run 需要執行的動作:
檢查本地是否有對應的鏡像,不存在就從共有倉庫下載;
利用鏡像創建并啟動一個容器;
分配一個文件系統,并在只讀的鏡像層外面掛載一層可讀寫層;
從宿主機配置的網橋接口中橋接一個虛擬接口到容器中;
分配一個ip給容器;
執行用戶指定的應用程序;
執行完畢后容器關閉;
接下來,我們打開一個bash終端,允許用戶交互:
docker run -ti ubuntu bash
-t : 選項讓Docker分配一個偽終端并綁定到容器的標準輸入
-i : 讓容器的標準輸入保持打開
使用 exit 可以退出容器,退出后該容器就處于終止狀態,因為對應Docker容器來說,當運行的應用退出后,容器也就沒有運行的必要了;
比較常見的是需要Docker容器在后臺以守護態 形式運行。 可以通過添加 -d 參數來實現:
$ 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]]
它首先會向容器發送SIGTERM信號,等待一段時間后(默認10s)。再發送SIGKILL信號終止容器。
注意: docker kill 會直接發送SIGKILL 來強行終止容器。
$ docker stop cae cae
當Docker容器中運行的應用終結時,容器也自動終止。例如上面開啟的終端容器,通過exit退出終端后,創建的容器也會終止。
可以使用 docekr ps -a -q
所有狀態的容器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
當容器后臺啟動,用戶無法進入容器中,如果需要進入容器進行操作,則可以使用下面方法:
$ 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:/#
缺點:當多個窗口同時attach到同一個容器中,所有窗口同步顯示,一個阻塞則全部阻塞。
Docker 1.3 版本起引入一個可以直接在容器內執行命令的工具 exec。
進入之前創建的容器,并啟動一個bash:
$ docker exec -ti b99 bash root@b9953944f4cc:/#
第三方支持,感興趣可以自己google,個人感覺和exec差不多
docker rm [OPTIONS] CONTAINER [CONTAINER...]
-f,--force=false 強行終止并刪除一個運行中的容器
-l,--link=false 刪除容器的連接,但保留容器
-v,--volumes=false 刪除容器掛載的數據卷
$ 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
可以將導出的文件傳輸到其他機器上,直接通過導入命令實現容器遷移。
導出的文件可以使用 docker import 命令導入,成為鏡像。
$ 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 載入鏡像的區別是:
docker import 用來導入一個容器快照到本地鏡像庫,會丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而 docker load 命令載入鏡像文件會保存完成的記錄,體積也要大。而且容器快照導入可以重新制定標簽等元數據信息。
倉庫是集中存放鏡像的地方
很多人容易搞混倉庫和注冊服務器。這里說明下,注冊服務器和倉庫的區別。
注冊服務器是存放倉庫的地方,每個服務器上可以有多個倉庫,而每個倉庫下面有多個鏡像,比如ubuntu是一個倉庫,下面有很多不同版本的鏡像。他所在的服務器就是注冊服務器。
可以使用官方提供的registry 鏡像 簡單搭建一套本地私有倉庫環境:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
參數說明:
-d,后臺運行
-p,端口映射
-v,將宿主機的/opt/data/registry 綁定到 /var/lib/registry, 來實現數據存放到本地路徑,默認registry容器中存放鏡像文件的目錄/var/lib/registry
運行后測試下我們私有倉庫中的所有鏡像:
$ curl http://倉庫宿主機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":[]}
現在是空的,因為才剛運行,里面沒有任何鏡像內容。
在一臺測試機上(非倉庫機)查看已有鏡像,如果當前沒有鏡像 使用 docker pull 下載即可;
為鏡像打標簽
格式為: 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 為私有鏡像注冊服務器的地址和端口
上傳到鏡像服務器
$ 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命令發現已經可以看到倉庫中的鏡像了。
測試下載鏡像
$ 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"]}
某個鏡像倉庫中的所有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"]}
到此,關于“Docker鏡像、容器、倉庫三大概念的對應操作介紹”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。