docker技术入门与实战-镜像容器仓库
Posted 软件猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker技术入门与实战-镜像容器仓库相关的知识,希望对你有一定的参考价值。
1.如果出现Cannot connect to the Docker daemon. Is the docker daemon running on this host?
解决办法在控制台输入:>$ service docker start即可
2.hub.docker.com创建了自己的账号,如何push和pull
step1——找到本地镜像的ID:docker images
step2——登陆Hub:docker login --username=username --password=password --email=email
step3——tag:docker tag <imageID> <namespace>/<image name>:<version tag eg latest>(build,commit命令也可以)
step4——push镜像:docker push <namespace>/<image name>
3.本地镜像registry运行中,push后如何查看,或者说我们到底push到哪里去了?
本地镜像默认是保存在/var/lib/registry或者是/var/lib/ucf/registry中。可以在浏览器中打开127.0.0.1:5000/v2/_catalog查看我们已经push的镜像。其中5000是你运行registry时设置的端口,v2是你的registry的版本,如果是1.*,就是v1,如果是2.*就是v2。
0.0.0.0是默认的ip地址,就像路由器路由表中不存在的,都会将ip报文转发给0.0.0.0(我们可以设置某个端口为0.0.0.0出口,发出去我们就管不着了,寻址的事情就交给下一级路由器了)
255.255.255.255是广播地址
127网段整体保留,你输入的127.*.*.*都会转化为127.0.0.1环回地址。
所以上面在浏览器中可以打开127.*.*.*:5000/v2/_catalog。
Docker容器、镜像、仓库
1.容器:什么是docker容器呢?就是用来运行镜像的小型的虚拟机,或者说是一个轻量级的沙箱,Docker利用容器来运行和隔离应用。简单来讲,你就可以把它看作简单的linux系统环境,这里面会有很多打包好的引用在运行(也可能比较少)。 2.镜像:类似于虚拟机镜像,镜像是只读的,是创建docker容器的基础。运行中的一个镜像就构成了一格容器。 3.仓库:集中存储镜像的地方,网上有很多可以利用的仓库,你可以从上面下载各种你需要的镜像来使用。你也可以自己创建自己的本地仓库等等,仓库根据是否公开分为私有仓库和公开仓库两种。目前最大的公开仓库是Docker Hub,存放了大量的镜像供用户下载。Docker镜像
下面的命令几乎都需要root权限,所以建议加上sudo,或者直接先进入root用户再操作 1.获取镜像:docker获取镜像的路径是:先从本地获取,然后从默认的Docker Hub获取,也可以自己配置自定义的docker仓库。 获取镜像的命令:docker pull name[:tag] 其中docker pull是固定的命令,name是你要获取的镜像的名字,:tag可选,表示镜像的标签,不使用tag的话,会自动选择latest标签的镜像(镜像有多个版本,latest tag 表示最新版本) 比如:# docker pull ubuntu (需要root权限) ,或者docker pull registry.hub.docker.com/ubuntu:latest效果是一样的,只不过后面的给定了仓库名路径(URL)和标签latest。 2.查看镜像信息:docker images命令 # docker images命令执行后,会有一个表格,表格的内容是:REPOSITORY,TAG,IMAGE ID, CREATED VCRTUAL SIZE,顾名思义,分别表示镜像来源的仓库,tag标签(版本号),id(唯一),创建时间以及虚拟大小(所占用的镜像空间) 你也可以使用docker tag oldrepository:tag newrepository:tag来创建一个新的镜像,这个新创建的镜像和原来的镜像是同一个id,只不过repository和tag不同。 还可以使用docker inspect IMAGE_ID来查看镜像的详细信息,这个信息显示的格式为json 3.搜寻镜像:默认搜索远程仓库Docker Hub中的镜像 命令:docker search name 支持的参数包括:--automated=false 仅显示自动创建的镜像;--no-trunc = false 输出信息不截断显示 -s, --start=0 指定仅显示评级为指定星级以上的镜像。当然,这些参数肯定是要放在name之前了。4.删除镜像 删除镜像的命令是docker rmi(remove images),具体的命令格式为:docker rmi image [image...],其中image可以是标签或者id,可以同时删除多个 比如删除前面下载的ubuntu镜像,可以使用如下命令:docker rmi ubuntu 或者docker rmi id 当当前镜像的tag多于一个的时候,也就是使用docker images查看镜像的时候,id相同的多于一个,那么执行rmi命令只会删除其中的一个镜像tag,如果只剩下一个了,那么删掉了就没了。 有的时候如果容器在运行中,这个时候删除是会失败的,有两种办法,使用-f参数强制删除或者先删除运行的容器,再删除镜像。 方法一:docker rmi -f ubuntu 方法二:docker rm images docker rmi ubuntu 其他相关命令:查看本机上的运行的容器:docker ps -a ;运行容器 docker run -【parameters】 imagename 5.创建镜像 可以基于已有的镜像或者容器来创建新的镜像,类似于复制操作(和tag的区别是,tag的出来的镜像id相同,这个的id不同) 命令:docker commit 【options】 id name 其中,options有三个,分别是-a 作者author -m 信息message,-p 表示提交时暂停容器运行。 id表示要复制的那个镜像的id,name表示新镜像的名字。 例子:docker commit -a "yourname" -m " a new docker image" 91sa212zg12fa13 test 运行后得到一个id不同的,名字为test的镜像 也可以基于本地模板导入,这个不再详说。 6.存储和载入镜像 存储:docker save -o name.tar imagename:tag,tag可以省略 载入:docker load --input name.tar 7.上传镜像 docker push命令可以上传到镜像操作,默认的是Docker Hub官方仓库(需要登录) 上传命令:docker push name:tag,tag可以省略
容器
1.创建容器 命令:docker create -【options】 image:tag 创建成功会返回新建容器的id,可以使用前面提到过的docker ps -a查看创建的容器。现在创建的容器是停止状态的,需要使用新的命令启动容器 命令:docker start docker_id 命令:docker run -[options] image:tag instructions 比如用一个命令输出hellowrold : docker run ubuntu /bin/echo 'hello world' 利用docker run创建并启动容器时,Docker在后台运行时的标准操作包括:- 检查本地是否存在指定镜像,不存在就在共有仓库下载
- 利用镜像创建一个容器,然后启动(create + start)
- 分配一个文件系统,并在只读的镜像层外面挂一层可读写曾
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个ip地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
- docker attach命令
- docker exec命令
- nsenter工具 略
例如:docker export ce55ad ubuntu.tar docker import ubuntu.tar myubuntu:ubuntu
仓库(Repository)
仓库是集中存放镜像的地方,注册服务器(Registry)是存放仓库的具体服务器,一个服务器上可以有多个仓库,每个仓库下面可以有多个镜像。比如dl.dockerpool.com/ubuntu,dl.dockerpool.com是注册服务器地址,ubuntu是仓库名,这个仓库里面只有一个镜像。仓库又可以分为共有仓库和私有仓库 1.Docker Hub 官方仓库,包含一万多个镜像,大部分可以直接下载。 官方仓库的地址是hub.docker.com ,我们可以在浏览器打开,然后直接申请一个账号。申请完毕之后,只需要在控制台输入docker login,根据提示来输入用户名和密码以及邮箱来登录。如下图所示 接下来你就可以对你自己账户内的镜像进行操作了,比如push一个镜像到自己的仓库,这个push操作可能会遇到各种问题,一般都是网络问题,我遇到的问题如下,我push了三次才成功。 push的过程在最开始已经说了,我们来看我做的整个过程: 1、登录hub, 2.、找到本地镜像id 3、我们看图,如何修改tag。解释下,修改repository和tag的原因是,你不能将images上传到docker hub的公有root目录,只能上传到你自己的namespace,也就是你在申请账号时的用户名。比如这里我就修改成了njufxd12/mynginx:latest,njufxd12就是我的docker hub用户名,mynginx是我对nginx这个镜像新起的名字,tag我设置为latest。注意看,nginx和njufxd12/mynginx的image id是一样的。 4.push操作,可能会出现连接问题,多push几次就好了。 第一次push,出现因为等待连接,而取消掉请求 第二次push 出现i/o 超时 第三次push 成功 2.创建私有仓库1)sudo docker run -d -p 5000:5000 registry //自动下载并启动一个registry容器,这个容器可以创建本地的私有仓库 当然也可以设置上传镜像的目录 sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry 其中5000:5000表示所有ip地址的5000端口上传都会上传到指定仓库。 2)改名 sudo docker tag id 192.168.1.1:5000/test 3) sudo docker push 192.168.1.1:5000/test。 如果上传失败,建议关闭防火墙,按照这个链接的操作来http://www.2cto.com/net/201612/574844.html
以上是关于docker技术入门与实战-镜像容器仓库的主要内容,如果未能解决你的问题,请参考以下文章