1号机#
#桥接网络例如ip:192.168.1.10
#ifdown ens33;ifup ens33
#systemctl stop firewalld
#setenforce 0
#yum -y install  https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#yum -y install docker
# ystemctl  start  docker \\启动
 #systemctl  enable  docker  \\设为开机自动启动
 #docker  version \\查看docker版本
 #docker  search  dhcp                      搜索镜像(默认搜索路径:dockerhub)(下面为显示结果项)
 INDEX              NAME          DESCRIPTION            STARS          OFFICIAL      AUTOMATED
 索引                   镜像名             描述                         星级                  官方创建              自主创建
 #docker  pull  docker.io/networkboot/dhcpd        下载镜像(时间看带宽)#docker  images                              查看本地镜像
#docker  tag  docker.io/networkboot/dhcpd    dhcp:dhcp          修改镜像标签
#docker  run  -d  dhcp:dhcp  /bin/bash  -c  "while  true;do  echo  ok;done;" 由镜像创建容器并运行命令:作为后台进程,持续执行(注意:-d代表后台守护进程)
#docker ps -a            启动后查看容器运行状态up为运行状态
#docker  commit  -m  "newdhcp"  -a  "t3117"  10e727b392b5  centos:dhcp1注释:-m:描述      -a:作者信息      -p:把正在运行中的容器停止  //查看已经镜像并复制后,用docker comint 创建一个新镜像-------------------(基于已有镜像创建新镜像)
#docker  images
由本地模板创建镜像适用于创建全新纯净版底层系统)
#wget  http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz           或者:上传已有centos镜像
#cat  centos-7-x86_64-minimal.tar.gz  | docker  import  -  docker:centos7.1    // 命令创建镜像
#docker images
基于Dockfile创建(适用于高级服务搭建和配置)
#docker search centos
#docker pull docker.io/centos                 //下载centos
#docker images
#docker save -o centos docker.io/centos              //将docker.io/ceonts改名为centos
#docker load --input centos  //将centos上传到本地镜像
#mkdir  apache
#cd apacke/
#ls
#vim Dockerfile
FROM  centos \\指定基于的基础镜像,镜像centos必须存在
 MAINTAINER  THE CENTOS\\维护该镜像的用户信息
 RUN  yum  -y  install  httpd  \\镜像中的操作命令,可写多条
 EXPOSE  80 \\容器开放的端口CMD  ["/usr/sbin/sshd","-D"]  \\启动容器时执行命令,可写多条但仅最后一条生效ADD index.html  /var/www/html/index.html  // 复制网站首页文件
 ADD run.sh  /run.sh  //将脚本复制到镜像中RUN chmod 775 /run.sh   
RUN systemctl disable httpd  //设置apache服务不自行启动
CMD ["/run.sh"]
保存退出
#vim run.sh  //编写执行脚本
添加:
 #!/bin/bash
 rm  -rf  /run/httpd/*         清理httpd的缓存
 exec  /usr/sbin/apachectl  -D  FOREGROUND   启动apache服务
 保存退出#echo "www.benet.com" > index.html         //创建测试页面
#ls       (出现Dockerfile, index.html,run.sh)
#docker  build  -t  httpd:centos7  .      \\使用刚编好的Dockerfile脚本自动运行生成镜像注意:最后的“.”代表当前Dockerfile所在目录
#docker images        //查看新生成的镜像httpd:centos
#docker  run  -d  -p  12345:80  httpd:centos7         //将生成的镜像加载到容器中运行映射端口
#docker ps -a   //查看新镜像
浏览器:httpd://192.168.1.100:12345          //检查网页
#cd
创建私有仓库
#docker pull registry   //上传registry镜像到仓库
#docker  tag  docker.io/registry  192.168.1.100:5000/registry        修改镜像tag(必须指定ip和端口)
#systemctl start firewalld         //需要启动防火墙
#vim  /etc/sysconfig/docker                修改docker配置文件,指定私有仓库url
 添加:
 OPTIONS='-selinux-enabled  -insecure-registry=192.168.1.100:5000'
 保存退出vim  /etc/docker/daemon.json
 添加:
 {
 "registry-mirrors":  [  "https://pee6w651.mirror.aliyuncs.com"],"insecure-registries":  ["192.168.1.104:5000"]
 }
 保存退出#systemctl restart docker
#docker  run  -d  -p  5000:5000  -v  /data/registry:/tmp/registry    registry     使用下载好的registry镜像启动一个容器,默认情况下仓库存放于容器内的/tmp/registry目录下,使用“-v”选项可以将本地目录挂载到容器内的/tmp/registry目录下使用,这样就不怕容器被删除后镜像也会随之丢失  ---启动私有仓库,监听5000端口
#docker  push  192.168.1.100:5000/registry    //上传本地镜像到服务器上
# docker rmi -f 192.168.1.1:5000/registry               //删除本地镜像进行测试
# docker pull 192.168.1.1:5000/registry                   //从本地私有仓库进行下载
 # docker images | grep 192.168.1.1:5000/registry                                    私有仓库搭建完成,验证成功!数据卷
数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现在宿主机与容器之间的迁移,数据卷的使用类似于Linux下对目录进行的挂载操作
创建数据卷
在“docker run”命令中使用“-v”选项可以在容器内创建数据卷。多次使用“-v”选项可以创建多个数据卷。使用“--name”选项可以给容器创建一个友好的自定义名称
# docker  run  -d  -v  /data1  -v  /data2  --name  web  httpd:centos           通过httpd:centos镜像创建名为web的容器,并同时创建数据卷/data1和/data2            -v:可在容器内创建数据卷   --name:给容器创建一个友好的自定义名称
#docker exec -it web /bin/bash //进入容器并查看两个目录是否存在
#ls -l
#exit
挂载主机目录为数据包
使用“-v”选项可以在创建数据卷的同时,将宿主机的目录挂载到数据卷上使用,以实现宿主机与容器之间的数据迁移。
#docker  run  -d  -v  /var/www:/data1  --name  web-1  httpd:centos 使用httpd:centos镜像创建一个名为web1的容器,并将宿主机的/var/www目录挂载到容器的/data1目录上
#cd /var/www/
#touch file          
#ls         (出现file)
#cd
#docker exec -it web-1 /bin/bash
#ls
#cd data1/
#ls          (在容器数据卷中创建的数据在宿主机相应的挂载目录中可见)
.数据卷容器
如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用
# docker run -it --volumes-from web --name db1 httpd:centos /bin/bash  //使用实现创建好的容器web,使用“--volumes-from”来挂载web1容器中的数据间到新的容器db1
# docker start db1           
#docker exec -it db1 /bin/bash
#cd data1
# touch file   //db1容器在/data1目录下创建一个新的文件
#ls                   (出现file)
# exit
#docker exec -it web /bin/bash
#cd data1/
#ls 
#exit                                   -----------------------(证明数据共享)
Docker网络通信
 Docker提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务。1.端口映射
 在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务的。Docker提供端口映射机制来将容器内的服务提供给外部网络访问,实质上就要将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口可以访问容器内的服务。实现端口映射,需要在运行“docker run”命令时使用“-P(大写)”选项可以实现随机映射,Docker会随机映射一个端口范围在49000~49900的端口到容器内部开放的网络端口,但是不是绝对的,也有例外不会映射到这个范围内。这种情况并不是很常用。
 # docker run -d --name httpd  -P(大P)浏览器http://192.168.1.100:32764
# docker ps -a           //查询得知,内部的80端口映射到本机的32769端口
#docker run -d  -p(小p)
#docker ps -a
容器互联
 容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道从而实现的互联。注意:容器互联是通过容器的名称来执行的,“--name”选项可以给容器创建一个友好的名称,这个名称是唯一的,如果已经命名了一个相同名称的容器,当要再次使用这个名称的时候,需先使用“docker run”来删除之前创建的同名容器。
(1)创建源容器
#docker run -d -P(大p)
(2)创建接收容器
#docker run -d -P(大p)
(3)测试容器互联
# docker exec -it web2 /bin/bash
#ping web1      (平通测试成功)这时可以看出web2容器已经和web1容器建立互联关系
#ping web     (不通证明没有创建互联)
如果现在还要在加入一个容器C,使容器C与容器A和容器B进行互联,进行一下操作
# docker run -d -P(大p)
# docker exec -it web3 /bin/bash
# ping web1通测试成功
# ping web2通测试成功