01、Docker入门

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

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什么是容器
        一个容器就相当于一个虚拟机

注2docker用途目前有三大类
        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是两个参数-iinteractive容器具有交互功能-t容器将提供伪终端
          --name指定生成的容器的名字允许空如果不指定会自动生成

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

 

7.6 启动容器(重点)

    $ docker start 容器ID/name
     
     注2docker 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命令

     获取容器的hostnamedocker 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

以上就是今天的分享

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker