Docker容器化技术学习笔记(1)

1. Docker安装

1.1. Docker是什么

  • 如何确保应用能够在不同的环境中运行和质量检测?并且在部署过程中出现版本配置问题,也无需重新编写代码和进行故障修复?使用容器Docker给出了一个标准化的解决方案:系统平滑移植,容器虚拟化技术

安装的时候,将原始环境一模一样的复制过来,开发人员利用Docker可以消除协作编码时“在我的机器上可以正常工作”的问题

  • Docker包含两方面的技术:
    • 镜像技术:打破代码即应用的观念,从系统环境开始,通过镜像将作业系统核心除外,运作应用所需要的系统环境,自底向上打包应用,达到应用程序跨平台的无缝衔接
    • 容器虚拟化
  • Docker是基于Go语言实现的云开源项目,做到一次镜像,处处运行。只需要一次配置好环境,换到其他主机即可一键部署,简化操作。解决了运行环境和配置问题的软件容器,方便持续继承并有助于整体发布的容器虚拟化技术

1.2. 传统虚拟机和容器的对比

  • 虚拟机:基于安装在主OS上的虚拟机管理系统,如VirtualBox和VMWare,创建虚拟机,在虚拟机上安装从OS,在从OS上中安装部署各种应用

虚拟机的缺点:资源占用多;冗余步骤多; 启动慢

  • 容器虚拟化:Linux容器(LXC),Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并且由该镜像提供支持进程所需要的全部文件,容器提供的镜像包含了应用的所有依赖项,因为在从开发到测试再到生产的整个过程中,都具有可移植性和一致性。Linux容器不是模拟一个完整的OS,而是对进程进行隔离。有了容器,就可以将软件运行所需要的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套OS,只需要软件工作所需要的库资源和设置。系统因此变得更为轻量并且保证部署在任何环境中的软件都能执行。

  • 区别之处:传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的OS,在该OS上运行所需要的应用进程;容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核也没有进行硬件虚拟;每个容器之间相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,可以区分计算资源

  • Docker的优势:

    • 更快速的应用交付和部署
    • 更便捷的升级和扩缩容
    • 更简单的系统运维
    • 更高效的计算资源利用

1.3. Docker三大组件以及工作原理

  • CentOS上的Docker安装:window上先安装一个虚拟机,并在安装Linux系统的虚拟机上运行Docker
  • 镜像: Image就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器,也相当于一个root文件系统。如官方镜像CentOS7包含了完整的一套root文件系统,相当于容器的源代码,Docker镜像文件类似于Java的类模板,而docker容器实例类似于Java中new出来的一个个实例对象
  • 容器:Container独立运行的一个或者一组应用,应用程序或者服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是镜像创建的运行实例,类似于java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行的实体。容器为镜像提供了一个标准和隔离的运行环境,每个容器都是相互隔离的。容器可以看做是一个简易版本的Linux环境和运行在其中的应用程序
  • 仓库:Repository是集中存放镜像文件的地方,类似于Maven仓库存放各种jar的地方,git仓库存放各种git项目,而DockerHub存放各种镜像模板。
  • Docker的工作原理:Docker是一个Client-Server结构的系统,Docker守护者进程在主机上,然后通过Socket连接从客户端访问,守护者进程从客户端接受命令管理运行在主机上的容器。容器是一个运行时环境
    • 用户使用Docker Client和Docker Daemon建立通信,并发送请求给后者
    • Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求
    • Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个job的形式存在
    • Job运行过程中,当需要容器镜像时,从Docker Registry中进行下载,并通过镜像管理驱动Graph Driver将下载镜像以Graph的形式存储
    • 当需要为Docker创建网络环境时,通过网路管理驱动Network Driver创建并配置Docker容器网络环境
    • 当需要限制Docker容器运行资源或执行用户指令等操作时,通过Exec driver完成
    • Libcontainer是一个独立的容器管理包,Network Driver以及Exec Driver都是通过Libcontainer来实现具体对同期进行的操作

1.4. centos7上安装Docker

docker的官方地址:https://docs.docker.com/engine/install/centos/

  1. 检查版本

    • cat /etc/redhat-release 版本7.x以上
    • uname -r
  2. 卸载旧版本的docker:官网地址上有给出uninstall的命令

  3. yum安装gcc相关:

    • yum -y install gcc
    • yum -y install gcc-c++
  4. 安装需要的软件包
    请添加图片描述

  5. 设置stable镜像仓库:为加快下载镜像速度,使用阿里云的镜像云仓库,不使用官方的

    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  6. 更新yum软件包索引:yum makecache fast

  7. 安装Docker CE: yum install docker-ce docker-ce-cli containerd.io

  8. 启动Docker:systemctl start docker

  9. 测试:

    • 查看docker的版本 docker version
    • 测试:docker run hello-world
      请添加图片描述

输出这段提示以后,HelloWorld就会停止运行,容器自动终止

  1. 卸载:
    • systemctl stop docker
    • yum remove docker-ce docker-ce-cli containerd.io
    • rm -rf /var/lib/docker
    • rm -rf /var/lib/containerd

1.5. 镜像加速器配置

  • 登录阿里云开发者平台
  • 点击控制台
  • 选择容器镜像服务
  • 获取加速地址
    根据官网给出的配置步骤即可完成加速器的配置
    请添加图片描述

1.6. Docker run的过程

Docker run命令,首先在本机中寻找该镜像,本机中有该镜像则以该镜像为模板生产容器实例运行;如果没有则取Docker Hub上查找该镜像,Hub上能够找到则下载镜像到本地并生产容器实例运行,反之返回失败错误,查不到该镜像

Docker比传统VM虚拟机快的原因:

  • Docker有着比VM更少的抽象层:不需要Hypervisior虚拟机实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU和内存利用率上docker将会在效率上有明显优势
  • docker利用的是宿主机的内核,而不需要加载OS内核:当新建一个容器时,docker不需要和VM一样重新加载一个OS内核。避免加载OS内核返回等比较费时费资源的过程,VM创建需要加载OS,返回新建过程是分钟级别的。而Docker直接利用宿主机的OS,省略了返回过程,新建一个Docker容器只需要几秒钟

2. Docker常用命令

2.1. 帮助启动类命令

  • 启动docker:systemctl start docker
  • 停止docker:systemctl stop docker
  • 重启dockersystemctl restart docker
  • 查看docker状态systemctl status docker
  • 开机启动systemctl enable docker
  • 查看docker概要信息docker info
  • 查看docker总体帮助文档docker --help
  • 查看docker命令帮助文档docker 具体命令 --help

2.2. 镜像命令

  • docker images:列出本地主机上的镜像

请添加图片描述Repository:表示镜像的仓库源 Tag:镜像的标签版本号 Image id:镜像id created:镜像创建时间 size:镜像大小

同一个仓库可以有多个TAG版本,代表这个仓库源的不同版本,使用Repository+tag来定义不同的镜像。不指定一个镜像的版本标签,只是使用Ubuntu,docker将默认使用Ubuntu:latest镜像

使用 docker images -a:列出本地所有的镜像包括历史映像层

docker images -q:只显示镜像的id

  • docker search --limit 5 镜像名:罗列出5个关于redis的镜像,默认罗列出25个镜像
    请添加图片描述其中的参数:
  1. Name:镜像名称
  2. Description:镜像说明
  3. stars:点赞数
  4. official:是否是官方的
  5. AutoMated:是否是自动构建的
  • docker pull 镜像名[:TAG]:下载镜像,没有指明tag则默认下载最新的版本latest
  • docker system df:查看镜像,容器,数据卷所占用的空间
  • docker rmi 镜像名字/镜像id:删除某个镜像
    • docker rmi -f 镜像id:强制删除
    • docker rmi -f 镜像id1 镜像id2…:删除多个镜像
    • docker rmi -f ${docker images -qa} :删除全部镜像

docker虚悬镜像

仓库名和tag都是none的镜像,称之为虚悬镜像dangling image,一般需要将其删除

2.3. 容器命令

  1. 在Docker中pull一个Ubuntu系统镜像

  2. 新建并且启动容器:docker run 【options】 image 【command】【arg…】

    • Options参数有:

      • –name=容器名:为容器指定名称,不指定则默认随机分配名字
      • -d:后台运行容器并返容器ID,也就是启动守护式容器(后台运行)
      • -i(interactive):以交互式模式运行容器,通常与-t同时使用
      • -t(tty):为容器重新分配一个伪输入终端,通常与-i同时使用,也就是启动交互式容器(前台有伪终端,等待交互)
      • -P:随机端口映射
      • -p:指定端口映射,如-p 8080:80或者-p ip地址:8080:80

      如在centos7中的docker容器进入到Ubuntu镜像中:docker run -it ubuntu /bin/bash

  3. 列出当前所有正在运行的容器:docker ps 【options】

    • options参数有:
      • -a:展示所有容器,包括已启动的和关闭的容器
      • -l:显示最近创建的容器
      • -n:显示最近n个创建的容器
      • -q:静默模式,只显示容器编号
  4. 退出容器:

    • exit:run进去容器,exit退出,容器停止
    • ctrl+p+q:run进去容器,快捷键退出,但是容器不停止
  5. 启动已经停止的容器:docker start 容器id/容器名

  6. 重启容器:docker restart 容器id/容器名

  7. 停止:docker stop 容器id/容器名

  8. 强制停止容器:docker kill 容器id/容器名

  9. 删除已经停止的容器:docker rm 容器id/容器名

  10. 强制删除容器:docker rm -f 容器id/容器名

    docker ps -a -q | xargs docker rm:管道符之前查出来的id可作为后面的参数xargs进行删除


演示守护式容器(后台服务器)

  • 查看容器日志:docker logs 容器id

  • 查看容器内运行的进程:docker top 容器id

  • 查看容器内部细节:docker inspect 容器id

  • 进入正在运行的容器并以命令行交互:

    • docker exec -it 容器id bash(/bin/bash)
    • docker attach 容器id

    使用==exec命令,是在容器中打开新的终端,并且可以启动新的进程,用exit退出容器终端不会导致容器的终止 ===

    使用attach命令,直接进入容器启动命令的终端,不会启动新的进程,用用exit退出容器终端,容器也就终止

  • 从容器内拷贝文件到主机上:docker cp 容器id:容器内路径 目的主机路径

  • 导入和导出容器:

    • docker export 容器id > 文件.tar:export导出整个容器的内容留作为一个tar文件(导出容器)
    • cat 文件名.tar | docker import - 镜像用户(类似于包名)/镜像名:镜像版本号:import从tar包中的内容创建一个新的文件系统再导入为镜像(导入容器)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从现在开始壹并超

你的鼓励,我们就是hxd

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值