当前位置:   article > 正文

Docker容器介绍

Docker容器介绍

1. Docker是什么


   Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs),它是完整的一套容器管理系统 
   Docker提供了一组命令,让用户更加方便直接地使用容器技术,而无需要过多关心底层内核技术

   注1:什么是容器
        一个容器就相当于一个虚拟机

   注2:docker用途,目前有三大类
        1.提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
        2.提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容
        3.组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构


2. Docker与虚拟化
   传统来看,虚拟化既可以通过硬件模拟来实现,也可以通过操作系统软件来实现 而容器技术则更为优雅,
   它充分利用了操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化 因此,有人甚至把它称为
   “新一代的虚拟化”技术,并将基于容器打造的云平台亲切地称为“容器云”毫无疑问, 
   Docker 正是众多容器技术中的佼佼者,是容器技术发展过程中耀眼的一抹亮色


   注1:images/Docker 和常见的虚拟机方式的不同之处.png

   注2:Docker和一个正常的虚拟机有何区别?
        当前,Docker内部使用的是Linux容器技术(LXC),这是运行在与它的宿主机器同样的操作系统上。
        这准许它可以和宿主机器共享许多系统资源。它也会使用AuFS作为文件系统,也为你管理网络。

3. Docker虚拟化的好处
   好处一:应用部署方便

   举个简单的例子,假设用户试图基于最常见的 LAMP (Linux+Apache+MySQL+PHP )组
   合来构建网站 按照传统的做法,首先需要安装 Apache MySQL PHP 以及它们各自运
   行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大
   量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追踪,意
   味着更多的时间代价和不可控的风险 可以想象,如果应用数目变多,事情会变得更加难以处理

   更为可怕的是, 旦需要服务器迁移(例如从阿里云迁移到腾讯云),往往需要对每个
   应用都进行重新部署和调试 这些琐碎而无趣的“体力活”,极大地降低了用户的工作效率
   究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致

   Docker 提供了一种更为聪明的方式,通过容器来打包应用、解藕应用和运行平台
   这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器
   是否是同一类型的平台 这无疑将帮助我们节约大量的宝贵时间,并降低部署过程出现问题的风险 

   好处二:服务器同等配置,性能更优,利用率更高
   让我们假设你有一个容器镜像(image)容量是1GB,如果你想用一个完整的虚拟机来装载,
   你得需要容量的大小是1GB乘上你需要虚拟机的数量。但使用Linux容器虚拟化技术(LXC)和AuFS,你可以共享1GB容量,
   如果你需要1000个容器,假设他们都运行在同样的系统影像上,你仍然可以用稍微比1GB多一点的空间来给容器系统
   因此,借助经过全面调优的容器系统,你就可以在同一硬件上拥有数量比使用Xen虚拟机或KVM虚拟机多出四到六倍的服务器应用实例。

   实际案例:以springcloud微服务为例
             7个服务-7台linux服务器
             7个服务-1台linux服务器-docker-7个镜像


4. 核心概念
   Docker大部分的操作都围绕着它的三大核心概念: 镜像、容器和仓库(本章只用到镜像/容器,仓库在后面课程介绍)
   1.镜像
     Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板
     例如,一个镜像可以包含一个基本的操作系统环境(例如:ubuntu16.04),可以把它称为一个 ubuntu16.04 镜像

   2.容器
     1.Docker 容器类似于一个轻量级的沙箱, Docker利用容器来运行和隔离应用  
     2.容器是从镜像创建的应用运行实例 它可以启动、开始、停止 删除,而这些容器都是彼此相互隔离、互不可见的
     3.可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等)
       以及运行在其中的应用程序打包而成的盒子

   3.仓库
     Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。
  
     注1:Docker 仓库和仓库注册服务器( Registry)的区别
          分际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库 每个仓库集中存放某一类镜像,
          例如存放 Ubuntu 操作系统镜像的仓库,其中可能包括 16.04 18 04 等不同版本的镜像,它则被称Ubuntu仓库

          详情见:images/Docker仓库和仓库注册服务器.png


5. Ubuntu16.04安装docker(在线方式)
   ## 1.卸载可能存在的旧版本
   apt-get remove docker docker-engine docker-ce docker.io

   ## 2.更新apt包索引
   apt-get update

   ## 3.安装以下包以使apt可以通过HTTPS使用存储库(repository)
   apt-get install -y apt-transport-https ca-certificates curl software-properties-common

   ## 4.添加Docker官方的GPG密钥
   curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
   ## 成功后应该显示OK
  
   ## 5.设置stable存储库
   add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  
   ## 6.再更新一下apt包索引
   apt-get update

   ## 7.安装最新版本的Docker CE
   apt-get install -y docker-ce

   ## 8.验证
   ## 8.1查看docker服务是否启动
   systemctl status docker
   ## 或如下命令
   service docker status

   ## 8.2若未启动,则启动docker服务
   systemctl start docker
   ## 或如下命令
   service docker start

   ## 8.3经典的hello world
   docker run hello-world  
   ## 输入以上命令后,窗口有输出,表示docker安装成功  
    
   注1:linux内核版本要求
        docker 目前支持的最低 ubuntu 版本为 14.04 LTS ,但实际上从稳定性上考虑,推荐使用
        16.04或18.0.4 LTS 版本,并且系统内核越新越好,以支持 Docker 最新的特性

        内核版本信息检查
        uname -a 或 cat /proc/version

   注2:查看docker的版本,第二个命令是详细查看
        docker --version 或 docker info

   注3:如果安装了sysv-rc-conf,也可以通过sysv-rc-conf查看docker的状态、并里德启动和关闭操作


6. 镜像
   Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默认镜像仓库下载
  (默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,使用自定义的镜像仓库

   镜像相关操作


附录一:英文
Registry: 登录;域名注册局;注册局;注册表项;注册机构
pull:拉


附录二:如何卸载原先安装的 docker
1.打开Terminal,执行下面命令:
  sudo apt-get purge docker-ce

2.删除Docker安装目录
  sudo rm -rf /var/lib/docker

3.验证是否删除成功
  docker info 
  
  bash: /usr/bin/docker: No such file or directory

  我们可以看到已经无法找到 docker 安装目录,证明 卸载成功  

  1. 1.配置加速器
  2.      国内从Docker Hub下载镜像速度很慢,我们可以配置阿里云专属加速器来解决
  3.      1.浏览器访问并登陆阿里云(淘宝或支付宝帐号登陆也可以)
  4.        https://www.aliyun.com/
  5.    
  6.      2.登陆后,进入阿里云“控制台”,搜索“容器镜像服务”,然后点击菜单:“镜像中心”-->“镜像加速器”
  7.        最后,将容器右边的“加速器地址”复制下来即可
  8.        https://axkeesse.mirror.aliyuncs.com
  9.      3.设置容器镜像服务的密码(可选)
  10.        容器镜像服务(Container Registry)提供多地域镜像托管能力,稳定的国内外镜像构建服务,便捷的镜像授权功能,
  11.        方便用户进行镜像全生命周期管理。在开通流程中,您需要设置独立于账号密码的Registry登录密码,便于镜像的上传、下载。
  12.        注1:此步骤为可选,如果需要使用阿里云来管理你的镜像 ,此步骤必须设置
  13.      4.修改docker相关配置
  14.        linux输入命令,
  15.        vim /etc/docker/daemon.json
  16.        添加下面内容(地址替换成上面的加速器地址):
  17.        {
  18.          "registry-mirrors":["https://axkeesse.mirror.aliyuncs.com"]
  19.        }
  20.      5.重新加载daemon
  21.        systemctl daemon-reload
  22.      6.重启docker
  23.        systemctl restart docker 
  24.    2.搜索镜像
  25.      docker search 镜像名称
  26.      例如:docker search mysql
  27.    3.下载镜像
  28.      docker pull 镜像名
  29.      例如, 获取一个 Ubuntu 16.04 系统的基础镜像可以使用如下的命令
  30.      ## 未指定版本一般会使用latest(最新的)版本
  31.      docker pull ubuntu 
  32.      ## 或者直接指定版本
  33.      docker pull ubuntu:16.04
  34.      docker pull ubuntu:18.04
  35.    4.查看宿主机上的镜像
  36.      docker images
  37.      注1:查看image位置
  38.           ## /var/lib/docker为docker默认安装目录
  39.           cd /var/lib/docker/containers 
  40.           ls
  41.    5.删除镜像
  42.      docker rmi 镜像ID/标签
  43.      例如:
  44.      docker rmi 2ca708c1c9cc
  45.      docker rmi ubuntu:latest 或 docker rmi ubuntu:16.04
  46.      注1:如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像。或者强制删除镜像
  47.           docker rmi -f ubuntu:16.04 
  48.           -f, -force: 强制删除镜像, 即使有容器依赖它
  49.           注意, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,
  50.           先删除依赖该镜像的所有容器, 再来删除镜像
  51.    ## 下面的内容后续再讲
  52.    6.保存镜像
  53.      docker commit -m="description about images" --author="author" {container_id}  {repository/images_name:tag}
  54.    7.推送镜像到代码仓库(以阿里云docker平台为例)
  55.      docker login --username=your_username registry.cn-beijing.aliyuncs.com
  56.      docker tag [ImageId] registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
  57.      docker push registry.cn-beijing.aliyuncs.com/[命名空间]/[仓库名称]:[镜像版本号]
  58.    8.使用Dockerfile创建新的镜像(注意:末尾有一个点,表示当前路径)
  59.      docker build -t "repository/images_name:tag" .  
  60.    
  61. 7. Docker容器
  62.    容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,
  63.    镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态
  64.    如何理解:类->实例,镜像->容器
  65.    常用操作
  66.    1.启动、停止、重启容器命令
  67.      docker start 容器ID或name
  68.      docker stop 容器ID或name
  69.      docker restart 容器ID或name 
  70.    2.查看当前运行的容器
  71.      docker ps
  72.    3.查看所有容器
  73.      docker ps -a
  74.    4.删除容器
  75.      docker rm 容器ID
  76.      注1:主要支持的选项包括
  77.           -f, --force=false 是否强行终止并删除一个运行中的容器
  78.           -1, --link=false :删除容器的连接 ,但保留容器;
  79.           -v, --volumes=false :删除容器挂载的数据卷
  80.      注2:删除容器,还可以参考附录三,可根据条件删除
  81.    5.创建容器(重点)
  82.      docker create -it ubuntu:latest 
  83.      docker create -it --name tomcat01 ubuntu:latest
  84.      注1:命令说明
  85.           create:关键字
  86.           ubuntu:latest:即镜像名字:版本(或镜像ID),将使用指定镜像创建容器。另外,Docker会检查本地是否存在指定的镜像,
  87.                          不存在就从公有仓库下载
  88.           -it:是两个参数,-i:interactive容器具有交互功能,-t:容器将提供伪终端
  89.           --name:指定生成的容器的名字,允许空,如果不指定会自动生成
  90.      注2:此时,通过如下命令,可以查看到刚刚创建的容器
  91.           docker ps - a
  92.      注3:create命令新建的容器处于停止状态,可以使用start命令来启动它
  93.           docker start 容器ID
  94.      注4:docker容器状态可参考“images/docker容器状态转换图.png”(重点~~~重点~~~重点~~~)
  95.    6.启动容器(重点)
  96.      docker start 容器ID/name
  97.  
  98.      注1:更多的时候,需要让 Docker 容器在后台以守护态( Daemonized )形式运行 此时,可以通过添加-d参数来实现
  99.           docker start -d 容器ID/name
  100.      注2:docker ps 查看已启动容器,注意:此时容器状态为UP
  101.    7.进入容器(重点)
  102.      docker exec -it 容器ID/容器NAME /bin/bash
  103.      ## 简写
  104.      docker exec -it 容器ID/容器NAME bash
  105.   
  106.      注1:只有在容器启动的时候即UP状态才能进入容器终端
  107.    8.创建\启动\进入容器(run=create+start)
  108.      ## 新建->启动->进入容器
  109.      docker run -it ubuntu:latest /bin/bash
  110.      ## 指定了端口号
  111.      docker run -it -p 7001:8001 ubuntu:latest /bin/bash 
  112.      ## 使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口     
  113.      docker run -it -P --name tomcat03 ubuntu:latest /bin/bash
  114.      ## 此命令没有进入容器,可以之后再进入
  115.      docker run -it -d --name webapp ubuntu:16.04
  116.      docker exec -it webapp /bin/bash  
  117.      参数说明:
  118.      -p:端口映射80为宿主端口,8080为容器端口
  119.      -P: 注意是大写P,使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口
  120.      -d:后台运行模式
  121.      --name:容器的名字
  122.    9.退出容器
  123.      退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】
  124.      如果不想继续运行:按【ctrl+d】或输入exit
  125.    10.宿主机和docker容器之间复制文件(重点)
  126.       docker cp 宿主机绝对路径  容器id:路径
  127.                
  128. 8. 查看Docker容器内部信息
  129.    1.进入容器内部获取信息
  130.      docker exec -it 容器ID/容器NAME /bin/bash
  131.      如果此时已进入容器内部,可分别执行hostname、ip addr、env这三个命令可以获取相关信息
  132.      hostname
  133.      ip addr
  134.      env
  135.    2.在宿主机,执行docker exec命令
  136.      获取容器的hostname:docker exec tomcat001 hostname
  137.      获取容器ip地址:docker exec tomcat001 ip addr
  138.      获取容器环境变量:docker exec tomcat001 env
  139.    3.在宿主机,使用docker inspect命令
  140.      推荐使用docker inspect来获取信息,这个命令会返回一个json字符串,里面以key-value的格式准备了该容器相关的信息,
  141.      内容十分丰富,可以一次性取得全部内容,也可以返回指定key对应的信息
  142.      docker inspect 容器ID/容器NAME
  143.      如果我们只对其中的一些感兴趣,例如hostname、ip地址、环境变量,该如何查看呢
  144.      查看数据所在节点,根据节点位置编写命令,例如:
  145.      hostname位于Config.Hostname这个节点位置,所以执行命令docker inspect -f {{.Config.Hostname}} tomcat001即可获取到hostname  


附录三:关于删除容器
方法一:
#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,
sudo docker ps -a|grep Exited|awk '{print $1}'
#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器
sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`


方法二: 
#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
sudo docker rm $(sudo docker ps -a -q)

方法三:
#根据容器的状态,删除Exited状态的容器
sudo docker rm $(sudo docker ps -qf status=exited)

方法四:
#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
sudo docker container prune  (推荐)

附录四:docker常用命令(不断补充中)
1.docker查看容器的cpu占用率
  docker stats

阿里源更换

  1. sudo vim /etc/apt/sources.list
  2. deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
  3. deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
  4. deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
  5. deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
  6. deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
  7. deb http://mirrors.aliyun.com/ubuntu/ xenial universe
  8. deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
  9. deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
  10. deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
  11. deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
  12. deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
  13. deb http://archive.canonical.com/ubuntu xenial partner
  14. deb-src http://archive.canonical.com/ubuntu xenial partner
  15. deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
  16. deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
  17. deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
  18. deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/215092
推荐阅读
相关标签
  

闽ICP备14008679号