什么是容器:
容器技术已经成为应用程序封装和交付的核心技术
容器技术的核心有以下几个内核技术组成:
— 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 root@192.168.4.1 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. root@192.168.4.1'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 root@192.168.4.1 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. root@192.168.4.1'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 / # / # / #
原文:http://blog.51cto.com/13558754/2064405