Docker 入門
什麽是容器:
容器技術已經成為應用程序封裝和交付的核心技術
容器技術的核心有以下幾個內核技術組成:
— CGroups( Control Groups ) - 資源管理
— NameSpace - 進程隔離
— SELinux 安全
由於是物理機上實施隔離,啟動一個容器,可以想啟動一個進程一樣快速
什麽是Docker:
Docker是完整的一套容器管理系統
Docker提供了一組命令,讓用戶更加方便直接地使用容器技術,而不需要過多關心底層內核技術
Docker優點:
相比與傳統的虛擬化技術,容器更加簡潔高效
傳統虛擬機器要給每個VM安裝操作系統
容器使用的共享公共庫和程序
Docker的缺點
容器的隔離性沒有虛擬化強
共用Linux內核,安全性有先天缺陷
SELinux難以駕馭
監控容器和容器排錯是挑戰
部署Docker
Ubuntu 系列安裝 Docker
Docker支持版本:
UbuntuXenial16.04(LTS)
UbuntuWily15.10
UbuntuTrusty14.04(LTS)
UbuntuPrecise12.04(LTS)
Docker目前只能安裝在64位平臺上,並且要求內核版本不低於3.10,實際上內核越新越好,過低的內核版本容易造成功能的不穩定。
用戶可以通過如下命令檢查自己的內存版本信息
$ uname -a
$ cat /proc/version
更新APT鏡像源
首先需要安裝 apt-transport-https 包支持 https 協議的源
$ sudo apt-getinstall apt-transport-https ca-certificates
添加源的 gpg 密鑰
$sudo apt-keyadv--keyserver hkp://p80.pool.sks-keyservers.net
獲取當前操作系統的代號
$ lsb_release -c
Codename:trusty
添加 Docker 的官方 apt 軟件源了。
$ sudo cat <<EOF > /etc/apt/sources.list.d/docker.list
debhttps://apt.dockerproject.org/repoubuntu-trustymain
EOF
添加成功後,更新apt軟件包緩存。
$ sudo apt-get update
分版本的預安裝任務
高於 12.04 LTS的版本
$ sudo apt-get install-y linux-image-extra-$(uname -r)
$ sudo apt-get install apparmor
12.04 LTS版本
$sudo apt-get install linux-image-generic-lts-trusty
安裝Docker
$sudo apt-getinstall -ydocker-engine
CentOS 系列安裝Docker
要添加yum 軟件源
$sudo cat > /etc/yum.repos.d/docker.repo<<-'EOF'
[dockerrepo]
name=DockerRepository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=0
EOF
使用yum 安裝docker-engine
$ sudo yum install -y install docker-engine
Debian操作系統安裝Docker
支持版本
Debiantestingstretch(64-bit)
Debian8.0Jessie(64-bit)
Debian7.7Wheezy(64-bit)
更新APT倉庫
1. 清理舊的倉庫信息
$apt-getpurgelxc-docker*
$apt-getpurgedocker.io*
2. 更新和安裝軟件包
$apt-getupdate
$apt-getinstallapt-transport-httpsca-certificates
3. 添加 GPG 鍵
$ apt-keyadv--keyserverhkp://p80.pool.sks-keyservers.net:80 --recv-keys58118E89F3A912897C070ADBF76221572C52609D
4. 添加 APT 源 以Debian Jessie 為例
$sudo cat<<EOF> /etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repodebian-jessie main
EOF
其他兩個版本
deb https://apt.dockerproject.org/repo debian-wheezy main
deb https://apt.dockerproject.org/repo debian-stretch main
安裝Docker
$sudo apt-get install docker-engine
為非 root 用戶授權
#如果沒有就建立一個 Docker 組
$sudo groupadd docker
#增加一個用戶(用真實的名字替換下面的 ${USER})到 Docker 組,需重登陸來生效
$sudo gpasswd -a ${USER}docker
#重啟 Docker 服務
$sudo service docker restart
更新 Docker
$apt-get upgrade docker-engine
卸載 Docker
#卸載軟件包
$sudo apt-get purge docker-engine
#卸載依賴包
$sudo apt-get autoremove --purge docker-engine
#如有必要,執行以下命令,刪除全部鏡像、容器、數據卷和其他docker相關用戶信息
:
$rm -rf /var/lib/docker
下面使用 CentOS 7 系統介紹Docker:
把軟件 docker-engine docker-engine-selinux 拷貝到私有yum倉庫中
運行 createrepo .
# yum -y install -y docker-engine docker-engine-selinux
啟動docker時 最好要將iptables 的規則清空 iptable有的規則可能會影響Docker
# brctl show bridge name bridge id STP enabled interfaces # iptables-save //設置開機啟動,啟動 docker 服務 # systemctl enable docker # systemctl start docker # brctl show bridge name bridge id STP enabled interfaces docker0 8000.02424ba34d68 no # iptables-save # Generated by iptables-save v1.4.21 on Sun Jan 21 22:48:11 2018 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [2:262] :POSTROUTING ACCEPT [2:262] :DOCKER - [0:0] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE -A DOCKER -i docker0 -j RETURN COMMIT # Completed on Sun Jan 21 22:48:11 2018 # Generated by iptables-save v1.4.21 on Sun Jan 21 22:48:11 2018 *filter :INPUT ACCEPT [27:3069] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [20:3101] :DOCKER - [0:0] :DOCKER-ISOLATION - [0:0] -A FORWARD -j DOCKER-ISOLATION -A FORWARD -o docker0 -j DOCKER -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i docker0 ! -o docker0 -j ACCEPT -A FORWARD -i docker0 -o docker0 -j ACCEPT -A DOCKER-ISOLATION -j RETURN COMMIT # Completed on Sun Jan 21 22:48:11 2018 # docker version Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: OS/Arch: linux/amd64 Server: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: OS/Arch: linux/amd64
Docker 鏡像:
Docker 運行容器前需要本地存在對應的鏡像,如果鏡像不存在本地,Docker會從鏡像倉庫下載( 默認是Docker Hub 公共註冊服務器中的倉庫 )
查看系統鏡像
docker images
從官方源搜索鏡像 (前提 物理機可以連通外網)
docker search 鏡像名
下載鏡像
docker pull 鏡像名
上傳鏡像
docker push 鏡像名
刪除本地鏡像
docker rmi 鏡像名
把本機鏡像備份為 tar 包
docker save 鏡像名 > 鏡像名.tar
把備份的 tar 包導入到本地鏡像
docker load < 鏡像名.tar
查看鏡像制作歷史
docker history
查看鏡像底層信息
docker inspect
修改鏡像名稱和標簽
docker tag
這裏用 busybox 練習 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE # docker search busybox # docker pull busybox # docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest f9b6f7f7b9d3 6 days ago 1.143 MB 在列出的信息中 可以看到幾個字段信息 來自於哪個倉庫,比如 busybox 鏡像標記,比如 latest 它的 ID 號 唯一 創建時間 鏡像大小 # docker save busybox > busybox.tar # ls busybox.tar busybox.tar # docker rmi busybox # docker load < busybox.tar 779f37a09c89: Loading layer 1.355 MB/1.355 MB Loaded image: busybox:latest # docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest f9b6f7f7b9d3 6 days ago 1.143 MB # docker history busybox IMAGE CREATED CREATED BY SIZE COMMENT f9b6f7f7b9d3 6 days ago /bin/sh -c #(nop) CMD ["sh"] 0 B <missing> 6 days ago /bin/sh -c #(nop) ADD file:3e663b99b5cb560010 1.143 MB
鏡像的實現原理
Docker 使用Union FS 將這些不同的層結合到一個鏡像中去。
通常 Union FS 有兩個用途, 一方面可以實現不借助 LVM、RAID 將多個 disk 掛到同一個目錄下,另一個更常用的就是將一個只讀的分支和一個可寫的分支聯合在一起,LiveCD正是基於此方法可以允許在鏡像不變的基礎上允許用戶在其上進行一些寫操作。 Docker 在 AUFS上構建的容器也是利用了類似的原理。
Docker 容器:
容器是獨立運行的一個或一組應用,以及它們的運行態環境。
對應的虛擬機可以理解為模擬運行的一整套操作系統(提供了運行態環境和其他系統環境)和跑在上面的應用。
容器常用命令列表
– docker run //運行容器
– docker ps //查看容器列表
– docker stop //關閉容器
– docker start //啟動容器
– docker restart //重啟容器
– docker attach|exec //進入容器
– docker inspect //查看容器底層信息
– docker top //查看容器進程列表
– docker rm //刪除容器
啟動容器
啟動容器有兩種方式,一種是基於鏡像新建一個容器並啟動,另外一個是將在終止狀態的容器重新啟動.
新建並啟動
命令主要為docker run
例如 下面命令輸出一個'Hello world' 之後終止容器 # docker run centos /bin/echo 'Hello world' Hello world 下面的命令則啟動一個 bash 終端,允許用戶進行交互。 # docker run -it centos /bin/bash [root@b45c34328e05 /]#echo Hello world Hello world [root@b45c34328e05 /]# ls anaconda-post.log dev home lib64 media opt root sbin sys usr bin etc lib lost+found mnt proc run srv tmp var [root@b45c34328e05 /]# exit exit -t 選項 讓Docker分配一個偽終端 並綁定到容器的標準輸入上 -i 選項 則讓容器的標準輸入保持打開
啟動已終止容器
可以利用 docker start 命令 直接將一個已經終止的容器啟動運行
使用 docker ps 命令查看容器信息 終止狀態的容器可以用 docker ps -a 看到 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b45c34328e05 centos "/bin/bash" 47 seconds ago Exited (0) 40 seconds ago sharp_carson # docker start b45c34328e05 b45c34328e05 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b45c34328e05 centos "/bin/bash" About a minute ago Up 5 seconds sharp_carson
後臺運行
需要讓Docker在後臺運行而不是直接把執行命令的結果輸出在當前宿主機下
可以docker run 添加 -d 參數來實現 啟動後會返回唯一的 id
# docker run -d centos /bin/sh -c "while true;do echo hello world; sleep 1;done" 3a5f25a937544c37c10c37443c848d0c818859995cf74232c16d04f25c5ec932 # docker logs 3a5f //可以通過簡寫id 使用docker logs 命令獲取容器的輸出信息 hello world hello world hello world hello world # docker ps //查看容器信息 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a5f25a93754 centos "/bin/sh -c 'while tr" About a minute ago Up About a minute happy_goldstine
終止容器
可以使用 docker stop 來終止一個運行中的容器
當Docker 容器中指定的應用終結時,容器也自動終止,用戶通過exit 命令 或者 Ctrl + d 來退出終端時,所創建的容器立刻終止。
# docker stop 3a5f 3a5f [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b45c34328e05 centos "/bin/bash" 45 minutes ago Up 44 minutes sharp_carson [root@test ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a5f25a93754 centos "/bin/sh -c 'while tr" 15 minutes ago Exited (137) 42 seconds ago happy_goldstine [root@test ~]# docker restart 3a5f 3a5f [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a5f25a93754 centos "/bin/sh -c 'while tr" 16 minutes ago Up 4 seconds happy_goldstine
此外,docker restart 命令會將一個運行態的容器終止,然後再重新啟動它
進入容器
在使用 -d 參數時,容器啟動會進入後臺。某些時候需要進入容器進行操作
attach 命令
# docker run -idt centos 7cc5abd320d6e67cc8df2388e840bb168715afd3331364514be91e42be0d7304 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7cc5abd320d6 centos "/bin/bash" 7 seconds ago Up 4 seconds high_lamarr # docker attach 7cc [root@7cc5abd320d6 /]# [root@7cc5abd320d6 /]# exit exit [root@test ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@test ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7cc5abd320d6 centos "/bin/bash" 3 minutes ago Exited (0) 13 seconds ago high_lamarr
但是使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執操作了。exit 會導致容器關閉
exec 命令
進入容器,退出時不會關閉容器
# docker run -idt centos f433775528d9616212145b73cc10a04b5b8c0f383c9cd002fe1f6dc984462313 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f433775528d9 centos "/bin/bash" 7 seconds ago Up 5 seconds berserk_bassi # docker exec -it f4 /bin/bash [root@f433775528d9 /]# [root@f433775528d9 /]# exit exit # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f433775528d9 centos "/bin/bash" 3 minutes ago Up 3 minutes berserk_bassi -i ,-t , -d 參數 -i 選項 則讓容器的標準輸入保持打開 -t 選項 讓Docker分配一個偽終端 並綁定到容器的標準輸入上 -d 選項 在後臺執行一個進程。可以看出,如果一個命令需要長時間進程,使用-d參數會很快返回。 # docker exec -i f4 /bin/bash date Tue Jan 23 12:15:21 UTC 2018 echo $? 0 exit # docker exec -t f4 /bin/bash [root@f433775528d9 /]# date ^C # docker exec -it f4 /bin/bash [root@f433775528d9 /]# date Tue Jan 23 12:18:21 UTC 2018 [root@f433775528d9 /]# exit exit
刪除容器
可以使用 docker rm 來刪除一個處於終止狀態的容器
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f433775528d9 centos "/bin/bash" 29 minutes ago Up 29 minutes berserk_bassi 7cc5abd320d6 centos "/bin/bash" 34 minutes ago Exited (0) 32 minutes ago high_lamarr [root@test ~]# docker rm 7cc 7cc [root@test ~]# docker rm f43 Error response from daemon: You cannot remove a running container f433775528d9616212145b73cc10a04b5b8c0f383c9cd002fe1f6dc984462313. Stop the container before attempting removal or use -f [root@test ~]# docker rm -f f43 f43
如果要刪除一個運行中的容器,可以添加 -f 參數
清理所有處於終止狀態的容器
如果數量太多要一個個刪除可能會很麻煩,用 docker rm $( docker ps -aq ) 可以全部處理掉
自定義鏡像
docker commit
? 使用鏡像啟動容器,在該容器基礎上修改
? 另存為另一個鏡像
案例 1
基於centos鏡像使用commit創建新的鏡像文件
配置yum源 安裝基礎工具
# docker run -it centos [root@7ffa443a9898 /]# rm -rf /etc/yum.repos.d/C* [root@7ffa443a9898 /]# cat > /etc/yum.repos.d/yum.repo <<EOF > [yum] > name=yum > baseurl=http://192.168.4.254/rhel7 > gpgcheck=0 > EOF [root@7ffa443a9898 /]# yum repolist Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile repo id repo name status yum yum 4620 repolist: 4620 [root@7ffa443a9898 /]# yum provides ifconfig Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile yum/filelists_db | 3.2 MB 00:00 net-tools-2.0-0.17.20131004git.el7.x86_64 : Basic networking tools Repo : yum Matched from: Filename : /sbin/ifconfig [root@7ffa443a9898 /]# yum -y install net-tools-2.0-0.17.20131004git.el7.x86_64 [root@7ffa443a9898 /]# yum provides vim Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile 2:vim-enhanced-7.4.160-1.el7.x86_64 : A version of the VIM editor which includes : recent enhancements Repo : yum Matched from: Provides : vim = 7.4.160-1.el7 [root@7ffa443a9898 /]# yum -y install vim [root@7ffa443a9898 /]# exit exit # docker ps -qa 7ffa443a9898 # docker commit 7ffa443a9898 myos:latest //自定義鏡像文件 sha256:d2b307795b544d9ee7529dea3ebdcd5028036ed05ceefbcd02c901ef56ad3318 # docker images | grep myos myos latest d2b307795b54 50 seconds ago 386 MB # docker run -it myos // 運行 自定義鏡像文件 [root@54649cf632cc /]# yum repolist Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile repo id repo name status yum yum 4620 repolist: 4620
使用 Dockerfile 自定義鏡像
? Dockerfile語法格式
– FROM:基礎鏡像
– MAINTAINER:鏡像創建者信息
– EXPOSE:開放的端口
– ENV:設置變量
– ADD:復制文件到鏡像
– RUN:制作鏡像時執行的命令,可以有多個
– WORKDIR:定義容器默認工作目錄
– CMD:容器啟動時執行的命令,僅可以有一條CMD
案例2
基於centos鏡像使用Dockerfile文件創建新的鏡像文件
# mkdir test # cd test/ # cp /etc/yum.repos.d/yum.repo yum.repo # vim Dockerfile FROM centos RUN rm -rf /etc/yum.repos.d/* ADD yum.repo /etc/yum.repos.d/yum.repo RUN yum -y install net-tools psmisc vim iproute CMD [ "/bin/bash" ] #docker build -t myos:test . # docker run -itd myos:test 4535d05df622a60d14ee995cf2a7a53d75dd480a96c2f921cde027d6f1797f55 # docker exec -it 4535 /bin/bash [root@4535d05df622 /]# yum repolist Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile repo id repo name status docker docker 2 yum yum 4620 repolist: 4622
案例3
基於剛剛建立myos:test 鏡像 創建 部署Apache 服務 鏡像
# mkdir httpd # cd httpd/ # vim Dockerfile FROM myos:test RUN yum -y install httpd ADD index.html /var/www/html/index.html ENV EnvironmentFile=/etc/sysconfig/httpd CMD [ "/usr/sbin/httpd","-DFOREGROUND" ] # docker build -t myos:httpd . # docker run -d -p 80:80 myos:httpd # curl http://192.168.4.1 hello world
案例4
基於剛剛建立myos:test 鏡像 創建 部署sshd 服務 鏡像
# mkdir ssh # cd ssh/ # vim Dockerfile FROM myos:test RUN yum -y install openssh-server ENV EnvironmentFile=/etc/sysconfig/sshd RUN /usr/sbin/sshd-keygen &> /dev/null RUN echo '123' | passwd --stdin root EXPOSE 22 CMD [ "/usr/sbin/sshd","-D" ] # docker build -t myos:sshd . # docker run -d -p 222:22 myos:sshd # ssh -X -p 222 [email protected] The authenticity of host '[192.168.4.1]:222 ([192.168.4.1]:222)' can't be established. ECDSA key fingerprint is 7d:c1:ca:40:0d:1d:c4:78:9c:0a:e1:1b:5d:b9:30:60. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.4.1]:222' (ECDSA) to the list of known hosts. [email protected]'s password: X11 forwarding request failed on channel 0 [root@015c6cab3064 ~]#
案例5
基於剛剛建立myos:test 鏡像 創建 部署 同時使用 ssh 和 apache 服務鏡像# mkdir httpdandssh
# cd httpdandssh/ # vim start.sh #!/bin/bash EnvironmentFile=/etc/sysconfig/sshd /usr/sbin/sshd -D & EnvironmentFile=/etc/sysconfig/httpd /usr/sbin/httpd -DFOREGROUND & wait # vim Dockerfile FROM myos:test RUN yum -y install openssh-server httpd ADD index.html /var/www/html/index.html RUN /usr/sbin/sshd-keygen &> /dev/null RUN echo '123' | passwd --stdin root ADD start.sh /etc/init.d/start.sh RUN chmod 755 /etc/init.d/start.sh EXPOSE 22 80 CMD [ "/etc/init.d/start.sh" ] # cp ../httpd/index.html index.html # docker build -t httpd:sshd . # docker run -d -p 222:22 -p 80:80 httpd:sshd # curl http://192.168.4.1 hello world # ssh -X -p 222 [email protected] The authenticity of host '[192.168.4.1]:222 ([192.168.4.1]:222)' can't be established. ECDSA key fingerprint is 29:cf:ac:95:4d:d7:2b:36:10:d1:e9:c6:31:7e:72:c7. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.4.1]:222' (ECDSA) to the list of known hosts. [email protected]'s password: X11 forwarding request failed on channel 0 [root@f072715497ba ~]# exit logout Connection to 192.168.4.1 closed.
Docker 倉庫
倉庫(Repository)是集中存放鏡像的地方。
註冊服務器 registry 基礎概念
共享鏡像的一臺服務器(鏡像化的一臺服務器)
Docker Hub
目前 Docker 官方維護了一個公共倉庫 Docker Hub,其中已經包括了超過 15,000的鏡像。大部分需求,都可以通過在Docker Hub 中直接下載鏡像來實現。
登錄
可以通過執行docker login 命令來輸入用戶名、密碼和郵箱來完成註冊和登錄。註冊成功後,本地用戶目錄的 .dockercfg 中將保存用戶的認證信息。
基本操作
用戶無需登錄即可通過docker search 命令來查找官方倉庫中的鏡像,並利用docker pull 命令來將它下載到本地。
私有倉庫
有時候使用Docker Hub 這樣的公共倉庫可能不方便,用戶可以創建一個本地倉庫供私人使用。
# vim /etc/docker/daemon.json # cat /etc/docker/daemon.json { "insecure-registries" : ["192.168.4.1:5000"] } # systemctl restart docker 在安裝了Docker 後,可以通過獲取官方 registry 鏡像來運行 # docker run -id -p 5000:5000 registry 創建好私有倉庫之後,就可以使用docker tag 來標記一個鏡像,然後推送它到倉庫,別的機器上就可以下載下來了。 例如私有倉庫地址為192.168.4.1:5000 # docker tag busybox:latest 192.168.4.1:5000/busybox # docker tag myos:test 192.168.4.1:5000/myos_test # docker tag httpd:sshd 192.168.4.1:5000/httpd_sshd 使用docker push 上傳標記的鏡像 # docker push 192.168.4.1:5000/busybox The push refers to a repository [192.168.4.1:5000/busybox] 779f37a09c89: Pushed latest: digest: sha256:4efd5033df5ddf3cff692505ae2a8e6d492014dbadd2f7281ccda9f744d41901 size: 527 [root@test httpdandssh]# docker push 192.168.4.1:5000/myos_test The push refers to a repository [192.168.4.1:5000/myos_test] 8202e413fce3: Pushed 0d281e60bd3c: Pushed b41d6696cce4: Pushed 0aeb287b1ba9: Pushed latest: digest: sha256:860417d703ab3dce337a7f69ccaa417b67842729114d9f34f3760525e4e8a604 size: 1155 [root@test httpdandssh]# docker push 192.168.4.1:5000/httpd_sshd The push refers to a repository [192.168.4.1:5000/httpd_sshd] 67de9bddfeb9: Pushed 7ed802e5e1cf: Pushed 7fa005843c99: Pushed c68f5228f676: Pushed 0b433cb3a604: Pushed 1e0fef9107ab: Pushed 8202e413fce3: Mounted from myos_test 0d281e60bd3c: Mounted from myos_test b41d6696cce4: Mounted from myos_test 0aeb287b1ba9: Mounted from myos_test latest: digest: sha256:5ac74ff037126e46123abe22ce81b56879e9b916e191809303b9efedacf6d85d size: 2403 用 curl 查看倉庫中的鏡像。 # curl -XGET "http://192.168.4.1:5000/v2/_catalog" {"repositories":["busybox","httpd_sshd","myos_test"]} # curl -XGET "http://192.168.4.1:5000/v2/busybox/tags/list" {"name":"busybox","tags":["latest"]} # curl -XGET "http://192.168.4.1:5000/v2/httpd_sshd/tags/list" {"name":"httpd_sshd","tags":["latest"]} 使用啟動倉庫中的鏡像 # docker run -it 192.168.4.1:5000/busybox / # / # / #
Docker 入門