Docker是基于Linux 64bit的,无法在windows/unix或32bit的linux环境下使用. 所以docker只能在64的系统里面。容器虚拟化,比传统的虚拟化轻量。易迁移,平台依赖性不强。只算是系统的一个服务或模块。 docker核心概念 1. 镜像,只读模版,像我们装系统的一个iso文件。 2. 容器 , 镜像类似虚拟机本身,所以我们说容器装载镜像。 3.仓库,存放镜像的一个地方,分为私有仓库和公有仓库。最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库(dockerpool.com)。 4.安装docker(以centos为列,分为centos6,7) centos6 安装 yum install -y epel-release yum install -y docker-io centos7 上安装 yum install -y docker 启动dockerl /etc/init.d/docker start 5.docker基本操作 docker pull centos //从docker.com获取centos镜像 docker p_w_picpaths //查看本地都有哪些镜像 docker tag centos liu123 //为centos镜像设置标签为liu123,再使用docker p_w_picpaths查看会多出来一行,改行的p_w_picpathid和centos的一样 docker search [p_w_picpath-name] //从docker仓库搜索docker镜像,后面是关键词 docker run -t -i centos /bin/bash //用下载到的镜像开启容器,-i表示让容器的标准输入打开,-t表示分配一个伪终端,要把-i-t 放到镜像名字前面 当该镜像发生修改后,我们可以把该镜像提交重新生成一个新版本进行在本地。 docker ps //查看运行的容器,加上-a选项可以查看没有运行的容器 docker rmi centos //用来删除指定镜像, 其中后面的参数可以是tag,如果是tag时,实际上是删除该tag,只要该镜像还有其他tag,就不会删除该镜像。当后面的参数为镜像ID时,则会彻底删除整个镜像,连通所有标签一同删除 6.当下载了一个镜像后,然后docker run -it centos /bin/bash 进去后,安装了一些安装包后,可以生成自己的一个镜像。 docker commit -m "change somth" -a "somebody info" container_id(通过dockerps -a获取id) 新镜像名字 例如: docker commit -m "install httpd" -a "Aming" 2c74d574293f liuwenzhi 这个命令有点像svn的提交, -m 加一些改动信息, -a 指定作者相关信息 2c74d这一串为容器id,可通过docker ps -a 再后面为新镜像的名字 7.把镜像导出一个文件,镜像迁移 docker save -o centos.tar centos 8.用刚才的导出去的文件可以恢复本地镜像 docker load --input centos.tar 或者docker load <centos.tar 注:容器迁移 docker export container_id > file.tar 容器导入 cat file.tar |docker import - liuwenzhi 生成liuwenzhi该镜像 9.docker create -it centos //这样可以创建一个容器,但该容器并没有启动 docker start container_id //启动容器后,可以使用dockerps 查看到,有start就有stop,和restart 之前我们使用的docker run 相当于先create再start docker run -i -t centos bash 这样进入了一个虚拟终端里面,我们可以运行一些命令,使用命令exit或者ctrl d 退出该bash,当退出后这个容器也会停止。 docker run -d 可以让容器在后台运行 docker run --name web -itd centos bash // --name 给容器自定义名字 10.docker logs container_id 查看容器的历史记录 11.进入一个后台,docker attach container_id 这个退出后容器也跟着退出,不建议用。 12.docker exec -it container_id bash 进入后台运行的机器 13。删除容器的命令 docker rm container_id 删除镜像的命令 docker rmi 14.上传到本地镜像 docker pull registry //下载registry镜像,registy为docker官方提供的一个镜像,我们可以用它来创建本地的docker私有仓库。 docker run -d -p 5000:5000 registy //以registry镜像启动容器,监听5000端口 curl 127.0.0.1:5000 //可以访问它 下面我们来把其中一个镜像上传到私有仓库 docker tag aming_test 172.7.15.106:5000/centos //标记一下tag,必须要带有私有仓库的ip:port docker push 172.7.15.106:5000/centos //此时报错了类似如下 Error response from daemon: invalidregistry endpoint https://172.7.15.106:5000/v0/: unable to ping registryendpoint https://172.7.15.106:5000/v0/ v2 ping attempt failed with error: Get https://172.7.15.106:5000/v2/:EOF v1 ping attempt failed with error: Get https://172.7.15.106:5000/v1/_ping: EOF.If this private registry supports only HTTP or HTTPS with an unknown CAcertificate, please add `--insecure-registry 172.7.15.106:5000` to the daemon'sarguments. In the case of HTTPS, if you have access to the registry's CAcertificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/172.7.15.106:5000/ca.crt 这 是因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需 要在启动dockerserver时增加启动参数为默认使用http访问。解决该问题的方法为: vi /etc/init.d/docker 把 $exec -d $other_args 改为 $exec -d --insecure-registry 172.7.15.106:5000 $other_args 这里的IP是宿主机的IP 然后重启docker service docker restart 再启动registry容器 docker start registry_container_id curl http://172.7.15.106:5000/v1/search //可以查看私有仓库里面的所有镜像 15.docker的数据管理 挂在本地目录到docker里面 docker run -itd -v /data/:/data centos bash //:前面的/data是宿主机的目录。后面是docker里面的/data。 docker ps 查看刚才开启的docker的names(最后一列) docker run -itd --volumes-from testvol aming bash testvol就是刚才创建的names 16.docker网络 在开启docker容器时,就可以定义网络。用--net= 定义 host模式,docker创建指定网络是host时,容器内的ip和宿主机的ip是一样的。 container模式,是创建容器时指定另一台的网络和现在创建的网络一样。 如: docker run -itd --net=container:container_id/container_name centos bash none模式,不制定任何网络 bridge模式,和vmware里的nat模式相似。 17.docker里面怎么把http服务共享出去。 docker run -itd centos bash docker exec container_id bash yum install -y httpd 在通过保存镜像得到一个新建的镜像 docker commit -m "install_with_httpd" -a "liuwenzhi" container_id liuqingqing 得到一个liuqingqing的一个镜像。这里的container_id是上面安装了的http服务的那个容器的container_id。 docker run -itd -p 5123:80 liuqingqing bash docker exec -it container_id bash service httpd start 测试 编辑1.html: vi /var/www/html/1.html 随便写点东西 在宿主机上curl 127.0.0.1:5123/1.html 是否成功 18.配置桥接模式即(和宿主机同网段的ip)cd /etc/sysconfig/network-scripts/ cp ifcfg-eth0 ifcfg-br0 分别编辑eth0和br0 ifcfg-eth0改成如下: DEVICE=eth0 HWADDR=00:0C:29:55:A7:0A TYPE=Ethernet UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6 ONBOOT=yes NM_CONTROLLED=yes 去掉ip,并添加br0 BOOTPROTO=none BRIDGE=br0 ifcfg-br0改成如下: DEVICE=br0 #HWADDR=00:0C:29:55:A7:0A 去掉mac TYPE=Bridge #UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6 去掉uuid ONBOOT=yes NM_CONTROLLED=yes 改成原eth0的网址ip. BOOTPROTO=static IPADDR=192.168.1.17 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=202.106.0.20 我做实验的时候出现过以下情况。 [root@localhost network-scripts]# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Error: Connection activation failed: Master connection not found or invalid [FAILED] Bringing up interface br0: Error: Connection activation failed: Failed to determine connection's virtual interface name [FAILED] 解决办法: chkconfig NetworkManager off chkconfig network on service NetworkManager stop 这条命令这里小心,如果是远程的话,会断掉。 service network start 继续下一步 yum install -y git 用git下载docker官方的一个工具 git clone https://github.com/jpetazzo/pipework cp ~/pipework/pipework /usr/local/bin/ 开启一个容器 docker run -itd --net=none --name 123 centos /bin/bash rpm -Uvh https://repos.fedorapeople.org/openstack/EOL/openstack-grizzly/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm 不升级会报错( Object "netns" is unknown, try "ip help".) 给容器设置ip pipework br0 123 192.168.1.100/24 进去看下有没有ip docker exec -it 123 bash
docker基本操作
原创
©著作权归作者所有:来自51CTO博客作者出VU时代的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:KVM 操作
下一篇:自动化运维puppet工具的使用
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章