您的位置:首页 > 运维架构 > Docker

docker技术入门与实战-镜像、容器、仓库

2017-05-25 21:29 1046 查看
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地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
前面的ubuntu镜像大小大概只有100多兆不到200兆的样子,我们运行起来就可以和它交互了,看下下面的命令:
docker run -ti ubuntu
其中-t表示让Docker分配一个伪终端并绑定到容器的标准输入上,-i让标准输入打开,然后就可以运行一个简单的伪终端和ubuntu容器交互了。基本的命令都有。可以输入ctrl+d或者输入exit来退出容器
2.守护态运行
如果加上-d参数,那么容器将会以守护态来运行。比如下面的命令:
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1;done"
如果要查看容器的输出信息,可以使用docker logs id命令
3.启动和终止容器
使用ctrl+d或者exit命令来退出终端时,容器也会终止。另外,还可以使用docker stop id来终止一个容器
终止后怎么启动呢?docker start id来启动,另外,docker restart命令会将一个运行态的容器终止,并重新启动
4.进入容器
使用-d参数后,容器启动后会进入后台,用户无法看到容器中的消息,这个时候就需要进入容器的操作了,有多重方法,包括docker attach命令,docker exec命令,已经nsenter工具等

docker attach命令
# docker run -idt ubuntu
# docker ps     //查看后台运行的命令
# docker attach name  //只能是名字,前面我们用ps命令查看过了
但是attach命令有一个缺点,你如果多终端同时attach同一个容器的时候,所有窗口会同步显示,当某个窗口因命令阻塞的时候,其他窗口就没办法操作了。

docker exec命令
这个命令和run命令非常像,只不过把run改成了exec,而且exec只能由两个参数,第一个参数是容器的id,第二个参数是针对容器的命令
比如: docker exec -ti 97e3 /bin/bash

nsenter工具 略
4.删除容器
docker rm删除处于终止状态的容器,命令格式为:docker rm 【options】 container 【container】...
options可以是下列的三个中的若干个:
-f,--force=false:强制删除一个运行中的容器
-l,--link=false:删除容器的连接,但保留容器
-v,--volumes=false:删除容器挂载的数据卷
5.导入和导出容器
导出容器:docker export 【id】> [name.tar]
将容器保存成对应的tar文件
导入容器:docker import 【options】 【name.tar】 【repository:【TAG】】 
将name.tar导入镜像到repository,tag为TAG。options有以下:
-c :应用docker
指令创建镜像;
-m
:提交时的说明文字;

例如: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 容器 镜像 仓库