栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker的初步应用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker的初步应用

Docker简介 为什么要Docker

​ 开发和运维的交互流程存在重大问题,通过Docker的镜像技术,打包开发运行代码的所有运行环境,将整个镜像交给运维上线,就不会出现交互流程出现问题,代码不能上线测试。

一句话总结:解决了运行环境和配置问题的软件容器,
方便做持续集成并有助于整体发布的容器虚拟化技术。一次镜像,处处运行

容器和虚拟机比较

​ 传统虚拟机缺点:资源占用多,启动速度慢,冗余步骤多。

​ Linux容器化技术:将某一个软件运行所需要的全部资源打包到一个隔离的容器中。容器和虚拟机不同,容器不需要捆绑一整套的操作系统

​ Docker容器化技术: 是直接复用本地的操作系统,而传统的虚拟机则是在硬件层面实现虚拟化。和传统虚拟机的相比,Docker容器化技术,启动速度更快,占用体积小。

Docker为什么比虚拟机快
  • Docker有比虚拟机更少的抽象层,不需要像虚拟机一样虚拟硬件资源,会直接复用宿主机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
  • docker利用的是宿主机的内核,而不需要加载操作系统OS内核
    • 当Docker启动一个容器时,不需要启动再次加载操作系统内核,会直接复用,进而避免某些耗时的资源加载过程。当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
Docker能干嘛

基于容器化技术、开发/运维新一代Devops工程师。能快速的搭建节点。

更高效的系统资源利用, 更快速的应用交付和部署。。。。。

Docker的基本组成 三大要素
  • 镜像:Docker镜像是一个模板,可以通过这个镜像来创建多个容器。它相当于Java中的类,而容器相当于Java中的对象。容器是镜像的具体实现。

  • 容器:Docker利用容器运行一个个的应用。容器是利用镜像创建的运行实例。容器给镜像提供了一个标准的隔离和运行的环境。每个容器都是相互隔离的。可以看成一个小型的Linux系统,只加载容器中应用必要的Linux环境

  • 仓库:

    • ​ 就是放镜像的地方,打包好的镜像放在仓库中,类似于Maven的中央仓库存放Jar包。官方提供了官方的Docker仓库,是Docker Hub。
    • 仓库分为私有仓库,共有仓库。
    • 最大的公开仓库是 Docker Hub(https://hub.docker.com/),国内有阿里云、网易云提供的公有仓库。
Docker平台架构图解(入门图解)

运行docker run 命令时,会先在本地仓库查找镜像,本地仓库没有再去远程仓库中查找,远程仓库还没有就会报错。

Docker工作原理

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。相当于系统中运行了一个服务。

小总结:

需要正确的理解仓库/镜像/容器这几个概念:

  • ​ Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。
  • ​ image文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
  • Docker每个容器都是一个小型的Linux系统
去哪下载

官网:docker官网:http://www.docker.com

仓库:Docker Hub官网: https://hub.docker.com/

Docker安装 前提说明

Docker依赖于Linux内核环境,所以Docker只能在已经运行的Linux上运行。

Docker安装步骤
  • 确保是CentOS7以上的版本。

  • 执行命令卸载旧版本Docker,如果yum报告这些依赖都没有安装,则进行下一步。

yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine
  • yum安装gcc相关

  • yum -y install gcc
    yum -y install gcc-c++
    
  • 设置Docker拉取镜像的仓库

    sudo yum install -y yum-utils
     sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 更新yum软件包索引

yum makecache fast
  • 安装 Docker Engine

     sudo yum install docker-ce docker-ce-cli containerd.io
    
  • 配置阿里云镜像加速(加快镜像拉取速度)

    进入阿里云的控制中心

    https://home.console.aliyun.com/home/dashboard/ProductAndService

  • 执行shell命令

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": [“..........”] #你自己的阿里云加速器地址
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    安装完成。

  • 通过运行hello-world来检测是否正确安装

  •  sudo docker run hello-world
    

有这个界面代表正确安装完成

卸载Docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
Docker命令 帮助启动类命令 启动Docker
 systemctl start docker
查看Docker状态
systemctl status docker
重启docker:
systemctl restart docker
开机自启Docker
systemctl enable docker
停止Docker
systemctl stop docker
查看Docker的概要信息
docker info
查看Docker总体帮助文档
docker --help
查看Docker命令帮助文档
docker 具体命令 --help
镜像命令 列出本地主机上的镜像
docker images -options
  • -options :
    • -q :只显示镜像ID。
    • -a: -a :列出本地所有的镜像(含历史映像层)

  • REPOSITORY:镜像的名字
  • TAG:镜像的版本(lastest :代表最新版)
  • IMAGE ID :镜像的唯一标识
  • CREATED:镜像的创建时间
  • SIZE:镜像的大小
拉取镜像
docker pull 镜像名:版本 #(版本可以忽略不写,不写默认就是最新版)
搜索镜像
docker search 镜像名 #可以从仓库中检索镜像
  • ​ -option
    • –ilmit :只要列出N个镜像,默认为25个

  • NAME :镜像名字
  • DESCRIPTION :有关镜像的描述
  • STARTS:点赞的数量
  • OFFICIAL:是不是官方提供的镜像
  • AUTOMATED : 是否自动构建
查看镜像/容器/数据卷所占的空间
docer system df

删除镜像
docker rmi  -f 镜像ID #删除单个镜像

docker rmi -f 镜像名1:TAG 镜像名2:TAG  #删除多个

docker rmi -f $(docker images -qa) #删除所有镜像
  • -options
    • -f 强制删除,不需要提醒
面试题:谈谈docker虚悬镜像是什么?
答:就是仓库名 和TAG标签为none的镜像就是虚悬镜像

容器命令

有镜像才能创建容器,这是根本前提,所以我们需要从中央仓库拉取一个镜像(这里拉取Ubuntu镜像为例)

docker pull ubuntu #默认使用最新版
新建+启动容器
docker run [-option] 镜像名:TAG  [Command]

  • -Option

    • –name:指定容器启动的名字

    • -d:守护式运行,也就是后台运行。

    • -i : 以交互式运行容器,通常和-t一起使用。

    • -t:为容器分配一个输入终端。通常和-i搭配使用

    • -P:随机端口映射,大写P

    • -p:指定端口映射,小写P

查看容器
docker ps [-OPTIONS] #不加-a默认显示正在运行的容器

  • OPTIONS
    • -a : 展示所有容器(正在运行,运行过的容器都算)
    • -l:展示最新创建的容器
    • -n : 展示 指定个数的容器
    • -q:只显示容器ID
退出容器
exit  #第一种
ctrl+p+q # 第二种

区别:

exit:退出容器后,容器不会再运行

ctrl+p+q:退出容器后,容器还会运行

启动容器(不是新建)
docker start [options] 容器ID

  • option
    • -i :交互式启动

重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID
强制停止容器
docker kill 容器ID
删除容器
docker rm 容器ID #删除单个容器
docker rm 容器ID 容器ID #删除多个容器
docker rm ¥(docker ps -qa) #删除全部容器
docker ps -a -q | xargs docker rm #删除多个容器
启动守护式容器(后台服务器)
  • ​ 像Redis,Mysql这种只需要在后台运行的,我们不需要创建交互式的容器,所以我们创建一个守护式容器
docker run -d 镜像ID 

redis 前后台启动演示case

  1. ​ 前台交互式启动
docker run -it redis:6.0.9

2、后台守护式运行

docker run -d redis:6.0.9

查看容器日志
docker logs 容器ID

查看容器内运行的进程(容器是个小型Linux)
docker top 容器ID

查看容器内部细节
docker inspect 容器ID

进入正在运行的容器并以命令行交互
docker exec [OPTIONS] 容器ID /bin/bash

使用exec进入容器内部以后使用exit退出容器时,容器不会停止。

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

导入和导出容器
  • 导出容器的内容留作为一个tar归档文件
docker export 容器ID > 文件名.tar
  • 从tar包中的内容创建一个新的文件系统再导入为镜像
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

导入的镜像为虚悬镜像

Docker镜像 镜像是什么
是一种轻量、可以独立运行的软件包。我们把应用程序和配置依赖打包形成一个可以支付的运行环境。这个运行环境就是镜像文件。
只有通过这个镜像文件才能创建容器。
UnionFS(联合文件系统)
  1. ​ Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
镜像分层
  1. ​ 以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载

Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloaderkernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KFS8fItd-1650980660579)(…/…/AppData/Roaming/Typora/typora-user-images/image-20220426210939761.png)]

平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M??

对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

镜像的理解
  1. 当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

  2. 所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

Docker镜像commit操作案例 docker commit提交容器副本使之成为一个新的镜像
docker commit [options] 容器ID 要提交本地的仓库

  • option:
    • -a:作者
    • -m:提交信息
Docker将本地镜像发布到云(这里是阿里云)

利用docker commit 生成镜像
创建镜像仓库

根据阿里云给的步骤进行。


提交成功

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/837132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号