ouzhoudijie 发表于 2018-5-28 12:18:39

Docker入门:概念 镜像 容器 仓库 数据管理

  时间<<--->>时间戳:进行时间计算时,需要利用转换的时间戳实现
  date+%Y%m%d-d @148569820<<--->>date +s% -d '2016-11-16 16:00:00'   --- 小 Q
  ----------------------------------------------------------------------------------------------------
  Docker 概 念

  一个开源的应用容器引擎,让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
  三个概念
1、镜像:一个只读的模板,类似于安装系统用到的iso文件镜像;
  2、容器:如果镜像类似于操作系统,那容器就是虚拟机主本身,可被启动停止删除并互相隔离等;

  3、仓库:存放镜像的一个仓库,最大的仓库hubhub.docker.com 国内最大dockerpool.com

  安装
  yum install -y epel-release   #centos6
  yum install -y docker-io
  /etc/init.d/docker start

  yum install -y docker      #centos7

  systemctl docker start

  ---------------------------------------------------------------------------------------------------
  加速:https://cr.console.aliyun.com 注册,控制台左侧有加速按钮,找到自己的专属链接http:xxxxxxx

  vim/etc/sysconfig/docker添加 other_args="--registry-mirror=https:xxxxxxxx"   重启docker即可
  ---------------------------------------------------------------------------------------------------

  镜 像 管 理

  docker pull centos   //下载镜像
  docker images   //查看本地拥有的镜像
  docker tag centosteng123   //复制镜像,并命名为teng123
  docker tag centosteng:teng   //复制镜像,并改了image和tag
  docker searchimage-name    //在从仓库中搜索image-name
  docker rmi centos   //删除centos镜像,可以是centos:teng 指定tag镜像删除
  docker run -itd --name 容器名 centos /bin/bash   //通过centos镜像打开指定名字的容器 -d是后台

  docker run -it container_id bash   //进入容器,container_id即容器id,一般用下方式进入
  docker exec -it container_id bash   //进入容器,跟上不同的是,退出容器时,容器仍旧运行
  docker start container_id   //开启某个docker
  docker ps -a//查看所有的容器

  docker ps   //查看正在运行的容器


  docker run -it teng123 bash   &&yum install -y httpd//首先进入一个容器做一些更改

  docker commit -m "change" -a "A" container_idxun   //提交新镜像,-a指定用户的名字,xun镜像名


  docker save -o teng.tarteng123(或image_id)//备份镜像成teng.tar文件
  docker load < teng.tar 或docker load --input teng.tar//还原teng.tar镜像文件

  docker push image_name   //把自己的镜像上传到dockerhub,前提要有用户

  容 器 管 理

  docker create -it centos//创建容器但不启动

  docker start container_id   //启动容器
  docker run -i -t -d centos /bin/bash   //-i让容器标准输入打开-t分配伪终端-d后台运行
  docker exec -it container_idbash   //临时打开一个终端,exit退出后,容器不退出

  docker attach container_id   //进入一个后台运行的容器,但一旦退出,容器也就退出了
  docker logs container_id   //查看容器的运行历史信息
  docker stop container_id   //停掉一直输出的内容
  docker rm container_id    //删除某个容器

  docker export container_id > file.tar //备份容器内容到file.tar
  cat file.tar |docker import - teng_centos   //还原备份内容到新的镜像
命令说明import  .tar文件、容器.tar文件   容器还原镜像:cat file.tar |docker import - tengxun_test
export容器导出 容器.tar文件 容器备份:dockerexportcontainer_id> file.tarsave 镜像保存 镜像.tar文件   镜像备份:docker save -o tengxun-centos.tar tengxun/centos (container_id或id号)load 镜像.tar恢复 原来的镜像   镜像还原:docker load < tengxun-centos.tar
  commit
镜像--->新镜像  仓 库 管 理

  docker pull registry   

  //registy为官方提供的镜像,我们可以用它来创建本地的docker私有仓库
  docker run -d -p 5000:5000 registry   

  //以registry镜像启动容器监听5000端口-p端口映射5000:5000=宿主机:docker容器

  curl 127.0.0.1:5000

  //可以访问它

  实验:将镜像上传至私有仓库
  1. docker tag teng_test172.7.15.106:5000/centos //标记一下tag必须要带有私有仓库的ip:port
2. docker push 172.7.15.106:5000/centos   //此时报错了类似如下
Error response from daemon: invalid registry endpoint https://172.7.15.106:5000/v0/: unable to ping registry endpoint 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 CA certificate, please add `--insecure-registry 172.7.15.106:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, 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之后和docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,so.......
  解决:启动docker时怎么加启动参数使之默认http访问
  vim /etc/sysconfig/docker
  把 $exec -d $other_args 改为
$exec -d --insecure-registry 172.7.15.106:5000 $other_args
  systemctl restart docker//重启docker
  docker start registry_container_id   //重启动registry容器
  

  curl http://172.7.15.106:5000/v2/_catalog    //查看私有仓库的镜像
  数 据 管 理

  1、挂载本地目录到容器

  docker run -itd -v /data:/data teng bash//-v指定挂载,本地目录:容器目录,删除容器数据不会丢
  测试:
  docker run -itd -v /data/web/:/web teng bash
docker exec -it f621cf677



  解决方式:退出容器,setenforce 0   #将selinux临时关闭,记得之后要开起来setenforce 1
或者:chcon -Rt svirt_sandbox_file_t /home/docs   #添加规则,将目录加为白名单
或者:docker run -it --privileged=true -v /test:/soft centos bash   #--privileged以特权方式挂载
  2、挂载数据卷

  我们挂载目录时可以指定容器name,不指定就系统随机生成了;
  docker run -itd --volumes-from jolly teng /bin/bash//启用,--volumes-from启用数据卷选项
  docker run -itd -v /data/:/mnt/ --name jolly bash//挂载数据卷,自定义容器name
  3、定义数据卷容器

  有时我们需要多个容器之间共享数据,就可以搭建一个专门 数据卷容器(仅共享),供其他容器挂载

  docker run -itd -v /data --name testvol teng bash   //新建,data是容器目录,非本地data
  docker run -itd --volumes-from --name=web1 testvol teng   //新建其他容器并 挂载数据卷容器
  4、数据卷的备份与恢复

  原理:(三重保护)
  其他容器/data/ 挂载----数据卷容器/data/ 挂载---宿主机的/data/
  备份容器/data/ 挂载----数据卷的/data/---用cron将data目录打包,存放至/bak下
  备份容器/bak/挂载----宿主机的/bak
  docker run -itd -v /data/ --name testvol2 teng /bin/bash   //新建数据卷容器
  docker run -itd --volumes-from testvol2 teng /bin/bash    //挂载数据卷容器,可多个
  docker run -itd -v /data/:/data/ testvol2/bin/bash   //数据卷容器挂载至本地
  docker run --volumes-from testvol2 -v /bak/:/bak/ teng tar cvf /bak/data.tar /data/
  //新建容器,挂载到数据卷容器/bak目录,然后压缩/data/目录

  docker run --volumes-from testvol2-v /data/:/data teng tar xvf /bak/data.tar

  //新建容器,挂载到数据卷容器/data目录,然后将压缩的data内容,解压至新容器

  

  ------------------------------------------------------------------------------------------------------

  当然这篇博客只属于入门级的,深入研究请参考http://blog.opskumu.com/docker.html
  
页: [1]
查看完整版本: Docker入门:概念 镜像 容器 仓库 数据管理