zoukankan      html  css  js  c++  java
  • docker 实践(一)

    docker 简介

    容器虚拟化,比传统的虚拟化轻量
    2013年出现,发展非常迅猛
    Redhat在6.5版本开始支持docker
    使用go语言开发,基于apache2.0协议
    开源软件,项目代码在github维护
     
    容器虚拟化和传统虚拟化比较
    Docker的优势
     
    启动非常快,秒级实现
    资源利用率很高,一台机器可以跑上千个docker容器
    更快的交付和部署,一次创建和配置后,可以在任意地方运行
    内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率
        易迁移,平台依赖性不强
     
     
    Docker核心概念
     
    镜像,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
    容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
    仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库(dockerpool.com)
     
     
     docker 安装
     
    Docker 安装
    centos6 上安装
    yum install -y epel-release
    yum install -y docker-io
    centos7 上安装
    yum install -y docker
    启动docker
     /etc/init.d/docker start
     
    systemctl start docker.service
     
    Docker 镜像管理
     
    docker pull  centos   //从docker.com获取centos镜像
    docker images  //查看本地都有哪些镜像
    docker tag centos weifeng123  //为centos镜像设置标签为weifeng123,再使用docker images查看会多出来一行,改行的image id和centos的一样
    docker search [image-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时,则会彻底删除整个镜像,连通所有标签一同删除
     
     
     Docker 基于已有镜像的容器创建镜像
     
    docker ps -a  查看容器
    docker start container_id 启动容器
    docker exec -it container_id /bin/bash 进入容器
    yum install -y net-tools wget (可使用ifconfig,wget命令)
     
    运行docker run后,进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像
    docker commit 创建更改过的镜像
    docker commit -m "change somth"  -a "somebody info"  container_id (通过docker ps -a获取id) 新镜像名字
    例如:  docker commit -m "install httpd" -a "Weifeng" 2c74d574293f weifeng/centos
    这个命令有点像svn的提交,-m 加一些改动信息,-a 指定作者相关信息  2c74d这一串为容器id,再后面为新镜像的名字
     
     
    Docker 基于本地模板导入创建镜像
     
    模块获取,可以直接在网上下载一个模块  http://openvz.org/Download/templates/precreated 可惜速度并不快,若我们下载了一个centos的模板 centos-5-x86.tar.gz 那么导入该镜像的命令为:
    cat centos-5-x86.tar.gz |docker import - centos-5-x86 (导入下载的模块镜像)
    把现有镜像,导出为一个文件:
    docker save -o weifeng-centos.tar weifeng/centos (镜像导出到tar文件)
    我们还可以用该文件恢复本地镜像:
    docker load --input weifeng-centos.tar  或者
    docker load < weifeng-centos.tar (恢复后没有tag, docker tag contain_id centos-with-net:weifenglinux)
    docker push image_name  //可以把自己的镜像传到dockerhub官方网站上去,但前提是需要先注册一个用户,后续如果有需求再研究吧
     
     
    Docker 容器管理
     
    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 exec 可以进入容器)
    比如:docker run -d centos  bash -c "while :; do echo "123"; sleep 1; done "
    docker run --name web -itd centos bash // --name 给容器自定义名字
    docker run --rm -it centos bash -c "sleep 30" //--rm 可以让容器退出后直接删除,在这里命令执行完容器就会退出,不能和-d一起使用    
     
    docker logs 可以获取到容器的运行历史信息,用法如下
    docker logs  container_id  
    docker attach 可以进入一个后台运行的容器,比如
    docker attach  container_id    //但是attach命令不算好用,比如我们想要退出终端,就得exit了,这样容器也就退出了,还有一种方法
    docker exec -i -t container_id  bash  //可以临时打开一个虚拟终端,并且exit后,容器依然运行着
    docker rm  container_id  //container_id是ps的时候查看到的,这样就可以把所有container删除,如果是运行的容器,可以加-f,强制删除
    docker export  container_id  > file.tar  // 导出容器,可以迁移到其他机器上,需要导入 (容器导出为镜像文件)
    cat file.tar |docker import - weifeng_test   //这样会生成aming_test的镜像 (文件恢复为镜像,需启动成为容器)
     
     
     Docker 仓库管理
     
    docker pull registry   //下载registry 镜像,registry为docker官方提供的一个镜像,我们可以用它来创建本地的docker私有仓库。
    docker run -d -p 5000:5000 registry   //以registry镜像启动容器,监听5000端口
    curl 127.0.0.1:5000  //可以访问它
    下面我们来把其中一个镜像上传到私有仓库
    docker tag weifeng_test 172.7.15.106:5000/centos //标记一下tag,必须要带有私有仓库的ip:port (这里ip为宿主机ip)
     
    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.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。解决该问题的方法为:
     
    vi /etc/init.d/docker  
    把 $exec -d $other_args 改为
    $exec -d --insecure-registry 172.7.15.106:5000 $other_args
    然后重启docker
    service docker restart
    再启动registry容器
    docker start  registry_container_id
     
    docker push 172.7.15.106:5000/centos  
    curl http://172.7.15.106:5000/v1/search   //可以查看私有仓库里面的所有镜像
     
     
    Docker 数据管理
     
     
    1. 挂载本地的目录到容器里
    docker run -tid -v /data/:/data1 weifeng123 bash //-v 用来指定挂载目录,:前面的/data/为本地目录,:后面的/data1/为容器里的目录, weifeng123 为镜像名称。
     
    2. 挂载数据卷
    其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如上面我们没有指定,它就生成了一个名字为loving_kowalevski,这个名字可以使用命令 docker ps  看最右侧一列
    docker run -itd --volumes-from loving_kowalevski weifeng/centos bash
    这样,我们使用weifeng/centos镜像创建了新的容器,并且使用了 loving_kowalevski  容器的数据卷
     
    3. 定义数据卷容器
    有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。
    首先建立数据卷容器
    docker run -itd -v /data/ --name testvol weifeng/centos  bash  //注意这里的/data/是容器的/data目录,并非本地的/data/目录。 与宿主机data目录没有关系
    然后让其他容器挂载该数据卷
    docker run -itd  --volumes-from testvol weifeng bash
     
    Docker 数据管理 - 数据卷的备份与恢复
     
    备份
    mkdir /vol_data_backup
    docker run --volumes-from testvol -v  /vol_data_backup/:/backup weifeng/centos tar cvf /backup/data.tar /data/
    说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/vol_data_backup/目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/vol_data_backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。
    恢复
    思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。
    新建数据卷容器:docker run -itd -v /data/ --name testvol2 weifeng/centos bash
    挂载数据卷新建容器,并解包:docker run --volumes-from testvol2  -v /vol_data_backup/:/backup weifeng/centos tar xvf /backup/data.tar
     
     
     
     
     
  • 相关阅读:
    K8s 使用 nfs-client-provisioner
    MySQL IF CASE 例子
    Nginx 限速
    Python 元组操作
    Python if, while,for,continue,break,三目运算符
    Centos7 安装 pyenv
    MySQL 查看大事务
    Tomcat 修改日志路径及日志分割
    游戏攻略 美少女万华镜5
    自建远程桌面过程 vnc + frp
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/7448860.html
Copyright © 2011-2022 走看看