目录

1、Docker是什么

2、Docker与虚拟化

3、Docker虚拟化的好处

好处一:应用部署方便

好处二:服务器同等配置,性能更优,利用率更高

4、核心概念

 5、CentOS7 安装docker(在线方式)

6、镜像

7、Docker容器

8、查看Docker容器内部信息

8.1 进入容器内部获取信息

8.2 在宿主机,执行docker exec命令

8.3 在宿主机,使用docker inspect命令


前置条件:需要掌握Linux及常用命令!!!下面是Docker思维导图

 

1、Docker是什么

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

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

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

 

2、Docker与虚拟化

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

 

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大部分的操作都围绕着它的三大核心概念: 镜像、容器和仓库(本章只用到镜像/容器,仓库在后面介绍)

注册服务器 -> 仓库(CentOS/RedHat) -> 镜像 -> 容器(一台虚拟机)

4.1.镜像

Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板
例如,一个镜像可以包含一个基本的操作系统环境(例如:CentOS7),可以把它称为一个 CentOS7 镜像

4.2.容器

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

4.3.仓库

Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。

 注1Docker 仓库和仓库注册服务器( Registry)的区别
          分际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库 每个仓库集中存放某一类镜像,
          例如存放 CentOS 操作系统镜像的仓库,其中可能了很多不同版本的镜像,它则被称CentOS仓库

 5、CentOS7 安装docker(在线方式)

Docker支持运行CentOS版本:CentOS 7.X

CentOS的安装我也发了资源包

5.1.内核版本信息检查

 $ uname -r

5.2 卸载可能存在的旧版本

   $ yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

注:旧版本的docker叫做docker或者docker-engine,如果有安装,先卸载其以及其依赖,新版本的docker叫做docker-ce

   docker-ce(社区版,免费)
   docker-ee(专业版,收费)

5.3 安装必要的系统工具

 $ yum install -y yum-utils device-mapper-persistent-data lvm2

注:安装依赖软件(yum-utils提供yum-config-manager包,用来管理yum配置文件;lv2和device-mapper-persistent-data为dockerdevicemapper存储设备的必须依赖)

5.4 添加docker-ce安装源

$ yum-config-manager --add-repo 

https://download.docker.com/linux/centos/docker-ce.repo

默认开启的是stable稳定版仓库,如果想要安装test测试版或者是边缘版本可使用如下命令开启相关模式,关闭的话只需要将--enable参数换成--disable(可选)

$ yum-config-manager --enable docker-ce-edge
$ yum-config-manager --enable docker-ce-test

5.5 更新yum缓存

$ yum makecache fast

5.6 安装docker-CE

$ yum -y install docker-ce

注:
   1)默认安装的是最新版本的稳定版
   2)查看版本列表请使用如下命令:
   
   $ yum list docker-ce --showduplicates | sort -r

   3)如果要安装特定版本的docker-CE请使用如下命令格式:
  
   $ yum install docker-ce-<VERSION STRING>

5.7 验证

     5.7.1 查看docker服务是否启动

     $ systemctl status docker   //查看运行状态

     5.7.2 启停服务

     $ systemctl start docker    //启动
     $ systemctl stop docker     //停止
     $ systemclt restart docker  //重启

     5.7.2 运行第一个容器(经典的hello world)

     $ docker run hello-world

     输入以上命令后,窗口有输出,表示docker安装成功

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

6、镜像

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

6.1 配置加速器
     国内从Docker Hub下载镜像速度很慢,我们可以配置阿里云专属加速器来解决

    6.1.1 浏览器访问并登陆阿里云(淘宝或支付宝帐号登陆也可以)
       https://www.aliyun.com/
   
     6.1.2 登陆后,进入阿里云“控制台”,搜索“容器镜像服务”,然后点击菜单:“镜像中心”-->“镜像加速器”最后,将容器右边的“加速器地址”复制下来即可
       https://7tamylwv.mirror.aliyuncs.com(这里是我的加速器地址)

     6.1.3 设置容器镜像服务的密码(可选)
       容器镜像服务(Container Registry)提供多地域镜像托管能力,稳定的国内外镜像构建服务,便捷的镜像授权功能,方便用户进行镜像全生命周期管理。在开通流程中,您需要设置独立于账号密码的Registry登录密码,便于镜像的上传、下载。
       注1:此步骤为可选,如果需要使用阿里云来管理你的镜像 ,此步骤必须设置

     6.1.4 修改docker相关配置
       $ mkdir -p /etc/docker
       添加下面内容(地址替换成上面的加速器地址):
       $ tee /etc/docker/daemon.json <<-'EOF'
       {
           "registry-mirrors": ["我的阿里云专属加速器地址"]
       }
       EOF
       注:在这里可以先将registry-mirrors换成自己的阿里云专属加速器地址后,在复制到工具里面去执行(方便)

     6.1.5 重新加载daemon
       $ systemctl daemon-reload

     6.1.6 重启docker
       $ systemctl restart docker 

6.2 搜索镜像

$ docker search 镜像名称
例如:docker search mysql

 6.3 下载镜像

$ docker pull 镜像名

     例如, 获取一个 centos 系统的基础镜像可以使用如下的命令
     ## 未指定版本一般会使用latest(最新的)版本
     $ docker pull centos
     ## 或者直接指定版本
     $ docker pull centos:版本号

6.4 查看宿主机上的镜像

$ docker images

     注1:查看image位置
          ## /var/lib/docker为docker默认安装目录
          cd /var/lib/docker/containers 
          ls

6.5 删除镜像

$ docker rmi 镜像ID/标签
     例如:
     $ docker rmi 2ca708c1c9cc
     $ docker rmi centos:latest 或 docker rmi centos:版本号

     注1:如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像。或者强制删除镜像
          $ docker rmi -f centos:版本号 
          -f, -force: 强制删除镜像, 即使有容器依赖它
          注意, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,先删除依赖该镜像的所有容器, 再来删除镜像

7、Docker容器

容器是Docker的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态

如何理解:类->实例,镜像->容器

7.1 启动、停止、重启容器命令

     $ docker start 容器ID或name
     $ docker stop 容器ID或name
     $ docker restart 容器ID或name 

7.2 查看当前运行的容器

$ docker ps

7.3 查看所有容器

$ docker ps -a

7.4 删除容器

$ docker rm 容器ID/容器NAME

     注1:主要支持的选项包括
          -f, --force=false 是否强行终止并删除一个运行中的容器
          -1, --link=false :删除容器的连接 ,但保留容器;
          -v, --volumes=false :删除容器挂载的数据卷
     注2:删除容器,还可以参考附录三,可根据条件删除

7.5 创建容器(重点)

$ docker create -it centos:latest 
$ docker create -it --name tomcat01 centos:latest

    注1:命令说明
          create:关键字
          centos:latest:即镜像名字:版本(或镜像ID),将使用指定镜像创建容器。另外,Docker会检查本地是否存在指定的镜像,
                         不存在就从公有仓库下载
          -it:是两个参数,-i:interactive容器具有交互功能,-t:容器将提供伪终端
          --name:指定生成的容器的名字,允许空,如果不指定会自动生成

     注2:此时,通过如下命令,可以查看到刚刚创建的容器
          $ docker ps - a
     注3:create命令新建的容器处于停止状态,可以使用start命令来启动它
          $ docker start 容器ID
     注4:docker容器状态可参考“images/docker容器状态转换图.png”(重点~~~重点~~~重点~~~)

 

7.6 启动容器(重点)

    $ docker start 容器ID/name
     
     注2:docker ps 查看已启动容器,注意:此时容器状态为UP

7.7 进入容器(重点)

    $ docker exec -it 容器ID/容器NAME /bin/bash
     ## 简写
     $ docker exec -it 容器ID/容器NAME bash

7.8 创建\启动\进入容器(run=create+start)

     ## 新建->启动->进入容器
     $ docker run -it centos:latest /bin/bash

     ## 指定了端口号
     $ docker run -it -p 7001:8001 centos:latest /bin/bash 

     ## 使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口     
     $ docker run -it -P --name tomcat03 centos:latest /bin/bash

     ## 此命令没有进入容器,可以之后再进入

     更多的时候,需要让 Docker 容器在后台以守护态( Daemonized )形式运行 此时,可以通过添加-d参数来实现:
     $ docker run -it -d --name webapp centos:latest 
     $ docker exec -it webapp /bin/bash  

     参数说明:
     -p:端口映射,格式为:主机(宿主)端口:容器端口
     -P: 注意是大写P,使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口
     -d:后台运行模式
     --name:容器的名字

7.9 退出容器

退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】
如果不想继续运行:按【ctrl+d】或输入exit

7.10 宿主机和docker容器之间复制文件

$ docker cp 宿主机绝对路径  

容器id:路径

8、查看Docker容器内部信息

8.1 进入容器内部获取信息

docker exec -it 容器ID/容器NAME /bin/bash
如果此时已进入容器内部,可分别执行hostname、ip addr、env这三个命令可以获取相关信息
     hostname
     ip addr
     env

8.2 在宿主机,执行docker exec命令

     获取容器的hostname:docker exec 容器ID/容器NAME hostname
     获取容器ip地址:docker exec 容器ID/容器NAME ip addr
     获取容器环境变量:docker exec 容器ID/容器NAME env

8.3 在宿主机,使用docker inspect命令

推荐使用docker inspect来获取信息,这个命令会返回一个json字符串,里面以key-value的格式准备了该容器相关的信息,内容十分丰富,可以一次性取得全部内容,也可以返回指定key对应的信息

docker inspect 容器ID/容器NAME

如果我们只对其中的一些感兴趣,例如hostname、ip地址、环境变量,该如何查看呢
查看数据所在节点,根据节点位置编写命令,例如:
hostname位于Config.Hostname这个节点位置,所以执行命令docker inspect -f {{.Config.Hostname}} tomcat001即可获取到hostname  

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

附录二:如何卸载原先安装的 docker
1.移除docker:
  $ yum remove docker-ce

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

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

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

附录三:关于删除容器
方法一:
#显示所有的容器,过滤出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

以上就是今天的分享!!!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐