首页 > 其他分享 >02 Docker核心技术

02 Docker核心技术

时间:2023-05-02 10:22:09浏览次数:43  
标签:02 容器 nginx 核心技术 宿主机 -- 镜像 Docker docker

第二章:Docker核心技术

目录

Docker的核心技术内容很多,我们学习则从以下四个方面来介绍Docker的核心技术镜像容器数据网络

一、Docker镜像管理

1 镜像简介

Docker镜像是什么?镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。通过镜像可以创建一个或多个容器。

2 搜索、查看、获取

  • 搜索镜像

    #作用
    	搜索Docker Hub(镜像仓库)上的镜像
    #命令格式:
    	docker search [镜像名称]  # 简单的搜索命令
    #命令演示:
    	$ docker search ubuntu
    #NAME:名称
    #DESCRIPTION:基本功能描述
    #STARS:下载次数
    #OFFICIAL:官方
    #AUTOMATED:自动的运行
    

  • 获取镜像

    #作用:
    下载远程仓库(如Docker Hub)中的镜像
    
    #命令格式:
    docker pull [镜像名称]
    
    #命令演示:
    $ docker pull ubuntu
    $ docker pull nginx
    
    #注释:
    #获取的镜像在哪里? 在/var/lib/docker 目录下
    
    #由于权限的原因我们需要切换root用户,那我们首先要重设置root用户的密码:
    $ sudo passwd root
    #这样就可以设置root用户的密码了。
    #之后就可以自由的切换到root用户了
    :~$ su
    #输入root用户的密码即可。
    
    #当然,如果想从root用户切换回一般用户,则可使用 su val(一般用户名) 或者直接输入exit退出,返回普通用户
    su yangyi
    
    #操作下面的文件可以查看相关的镜像信息
    :~$ sudo cat /var/lib/docker/image/overlay2/repositories.json
    

    查看镜像:docker images,与/var/lib/docker/image/overlay2/repositories.json相对应。

  • 查看镜像

    #作用:
    	列出本地镜像
    	
    #命令格式:
    docker images [镜像名称]  # 查看指定名字的镜像内容  
    docker image ls [镜像名称]  # []代表可选
    
    #命令演示:
    $ docker images  # 查看本机所有的镜像
    $ docker images ls  # 查看本机所有的镜像
    #镜像的ID唯一标识了镜像,如果ID相同,说明是同一镜像。TAG信息来区分不同发行版本,如果不指定具体标记,默认使用latest标记信息
    
    #docker images -a 列出所有的本地的images(包括已删除的镜像记录)
    
    #REPOSITORY:镜像的名称
    #TAG :镜像的版本标签
    #IMAGE ID:镜像id
    #CREATED:镜像是什么时候创建的【别人传到仓库的时间】
    #SIZE:大小
    

3 重命名、删除

  • 镜像重命名

    #作用:
    对本地镜像的NAME、TAG进行重命名,并新产生一个命名后镜像【并不会生成一个新的镜像】
    	
    #命令格式:
    docker tag [老镜像名称]:[老镜像版本][新镜像名称]:[新镜像版本]
    
    #命令演示:
    $ docker tag nginx:latest panda-nginx:v1.0
    

  • 删除镜像

    #作用:
    	将本地的一个或多个镜像删除
    	
    #命令格式:
    docker rmi [命令参数][镜像ID]
    docker rmi [命令参数][镜像名称]:[镜像版本]
    docker image rm [命令参数][镜像]
    
    #命令演示:
    $docker rmi 3fa822599e10  # 可通过 docker rmi 3fa822599e10 123456789删除多个镜像
    $docker rmi mysql:latest
    
    #注意:
    如果一个image_id存在多个名称,那么应该使用 名称:版本 的格式删除镜像
    
    #命令参数(OPTIONS):
    	-f, --force  # 强制删除
    

    如果名称不同,ID不同,则不能根据ID进行删除,需要根据名称删除。

4 镜像导入、导出

  • 导出镜像

    将已经下载好的镜像,导出到本地,以备后用。

    #作用:
    将本地的一个或多个镜像打包保存成本地tar文件
    
    #命令格式:
    docker save [命令参数][导出镜像名称][本地镜像镜像]
    
    #命令参数(OPTIONS):
    -o, --output string 指定写入的文件名和路径
    
    #导出镜像【打包到本地目录】
    :~$ docker save -o ubuntu_test.tar ubuntu
    

  • 导入镜像

    #作用:
    将save命令打包的镜像导入本地镜像库中
    	
    #导入镜像命令格式:
    $ docker load [命令参数][被导入镜像压缩文件的名称]
    $ docker load < [被导入镜像压缩文件的名称]
    $ docker load --input [被导入镜像压缩文件的名称]
    
    #命令参数(OPTIONS):
    -i, --input string 指定要打入的文件,如没有指定,默认是STDIN
    
    #为了更好的演示效果,我们先将nginx的镜像删除掉
    docker rmi ubuntu:latest
    
    #导入镜像文件:
    $ docker load < ubuntu_test.tar
    # 或者
    $ docker load --input ubuntu_test.tar
    
    #注意:
    如果发现导入的时候没有权限需要使用chmod命令修改镜像文件的权限
    

    虽然导出的时候进行了重命名,但是镜像原来叫什么名字,现在还叫什么名字。

5 镜像历史、详细信息、创建

  • 查看镜像历史

    #作用:
    查看本地一个镜像的历史(历史分层)信息
    	
    #查看镜像命令格式:
    docker history [镜像名称]:[镜像版本]
    docker history [镜像ID]
    
    #我们获取到一个镜像,想知道他默认启动了哪些命令或者都封装了哪些系统层,那么我们可以使用docker history这条命令来获取我们想要的信息
    
    $ docker history sswang-nginx:v1.0
    
    #IMAGE:编号
    #CREATED:创建的
    #CREATED BY :基于那些命令创建的
    #SIZE:大小
    #COMMENT:评论
    

  • 镜像详细信息

    #作用:
    查看本地一个或多个镜像的详细信息
    
    #命令格式:
    $ docker image inspect [命令参数] [镜像名称]:[镜像版本]  # 或者省略image
    $ docker inspect [命令参数] [镜像ID]
    
    #查看镜像详细信息:
    $ docker inspect ubuntu
    

  • 根据模板创建镜像

    #登录系统模板镜像网站:
    #https://download.openvz.org/template/precreated/
    #找到一个镜像模板进行下载,比如说ubuntu-16.04-x86_64.tar.gz,地址为:
    #https://download.openvz.org/template/precreated/ubuntu-16.04-x86_64.tar.gz
    
    #命令格式:
    cat 模板文件名.tar | docker import - [自定义镜像名]  # 读取内容,通过管道符,导入docker自定义镜像中
    
    #演示效果:
    $ cat ubuntu-16.04-x86_64.tar.gz | docker import - ubuntu-mini  # ubuntu-mini自定义的镜像名称
    

6 小结

二、Docker容器管理

docker容器技术指Docker是一个由GO语言写的程序运行的“容器”(Linux containers,LXCs)

containers的中文解释是集装箱。

Docker则实现了一种应用程序级别的隔离,它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器"上来。

1 容器简介

  1. 容器是什么?

    容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行。

    Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例,容器具备一定的生命周期。

    另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。

    我们就可以理解容器就是被封装起来的进程操作;只不过现在的进程可以简单也可以复杂,复杂的话可以运行1个操作系统,简单的话可以运行1个回显字符串。

  2. 容器和虚拟机的相同点

    • 容器和虚拟机一样,都会对物理硬件资源进行共享使用。

    • 容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。

    • 容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样。

    • 同虚拟机一样,容器创建后,会存储在宿主机上: linux上于/var/lib/docker/containers

  3. 容器与虚拟机的不同点?

    注意:容器并不是虚拟机,但它们有很多相似的地方

    • 虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。
    • 容器是轻量级的,虚拟机是重量级的。
    • 首先容器不需要额外的资源来管理,虚拟机额外更多的性能消耗;
    • 其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了。
    • 也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。

    虚拟机的生命周期:

    Docker容器的生命周期:

2 容器查看、创建、启动

  • 查看容器

    #作用
    显示docker容器列表
    
    #命令格式:
    docker ps  # 查看正在运行的容器
    
    #命令演示:
    $ docker ps
    
    #CONTAINER ID 容器ID
    #IMAGE 基于那个镜像
    #COMMAND 运行镜像使用了哪些命令?
    #CREATED多久前创建时间
    #STATUS 开启还是关闭
    #PORTS端口号
    #NAMES容器名称默认是随机的,【需要自己指定容器名称】
    
    #注意:
    管理docker容器可以通过名称,也可以通过ID
    ps是显示正在运行的容器, -a是显示所有运行过的容器,包括已经不运行的容器
    

  • 创建待启动容器

    #作用:
    	利用镜像创建出一个Created 状态的待启动容器
    	
    #命令格式:
    docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    docker create [参数命令] 依赖镜像 [容器内命令] [命令参数]
    
    #命令参数(OPTIONS):查看更多
    -t, --tty 分配一个伪TTY,也就是分配虚拟终端
    -i, --interactive 即使没有连接,也要保持STDIN打开
    --name 为容器起名,如果没有指定将会随机产生一个名称
    
    #命令参数(COMMAND\ARG):
    COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
    ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    
    #创建容器(附上ls命令和a参数)
    docker create -it --name ubuntu-1 ubuntu ls -a  # 这里直接将容器启动的命令都写了?
    

  • 启动容器

    启动容器的三种方式:

    1. 启动待启动或已关闭容器
    2. 基于镜像新建一个容器并启动
    3. 守护进程方式启动docker
    #作用:
    	将一个或多个处于创建状态或关闭状态的容器启动起来
    	
    #命令格式:
    docker start [容器名称]或[容器ID]
    
    #命令参数(OPTIONS):
    -a, --attach 将当前shell的 STDOUT/STDERR 连接到容器上【标准输出和标准错误】
    -i, --interactive 将当前shell的 STDIN连接到容器上【标准输入】
    
    #启动上面创建的容器
    docker start -a ubuntu-panda
    

    启动完docker,执行完一大堆命令,就推出了,那么如何让它不退出呢?

  • 创建新容器并启动

    #作用:
    	利用镜像创建并启动一个容器
    	
    #命令格式:
        docker run [命令参数] [镜像名称][执行的命令]
        命令参数(OPTIONS):
        -t, --tty 分配一个伪TTY,也就是分配虚拟终端
        -i, --interactive 即使没有连接,也要保持STDIN打开
        --name 为容器起名,如果没有指定将会随机产生一个名称
        -d, --detach 在后台运行容器并打印出容器ID
        --rm 当容器退出运行后,自动删除容器
    
    #启动一个镜像输出内容并删除容器【将是创建一个镜像对象,执行完一步操作,就把容器退出了】
    $ docker run --rm --name nginx1 nginx /bin/echo "hello docker"
    
    #注意:
    docker run 其实 是两个命令的集合体 docker create + docker start
    

  • 守护进程方式启动容器【常用的方式】

    更多的时候,需要让Docker容器在后台以守护形式运行。此时可以通过添加-d参数来实现。

    #命令格式:
    docker run -d [image_name] command ...  # -d让容器在后台运行,并且打印出容器ID
    
    #守护进程方式启动容器:
    $ docker run -d --name nginx01 nginx
    

    问题:这里以守护进程方式启动,但还是容器退出了?

    Docker容器后台运行,就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令(比如运行top,ping),就是会自动退出的。

    此处,使用nginx即可创建正常运行的容器。

3 暂停、取消暂停、重启

  • 容器暂停

    #作用:
    	暂停一个或多个处于运行状态的容器
    	
    #命令格式:
    docker pause [容器名称]或[容器ID]
    	
    #暂停容器
    docker pause b8837790abb6
    

  • 重启

    #作用:
    重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
    该命令相当于stop和start命令的结合
    
    #命令格式:
    docker restart [容器名称]或[容器ID]
    #命令参数(OPTIONS):
    -t, --time int 重启前,等待的时间,单位秒(默认 10s)
    
    #恢复容器
    docker restart -t 20 b8837790abb6
    

4 容器关闭、终止、删除

  • 关闭容器

    在生产中,我们会以为临时情况,要关闭某些容器,我们使用stop命令来关闭某个容器。

    #作用:
    延迟关闭一个或多个处于暂停状态或者运行状态的容器【不是立即执行的,如果处理完,会立即完,如果没有处理完,会处理完之后删除】
    
    #命令格式:
    docker stop [容器名称]或[容器ID]
    
    #关闭容器:
    $ docker stop b8837790abb6
    

  • 终止容器

    #作用:
    	强制并立即关闭一个或多个处于暂停状态或者运行状态的容器
    #命令格式:
    docker kill [容器名称]或[容器ID]
    #终止容器
    $ docker kill 8005c40a1d16
    

  • 删除容器

    删除容器有三种方法:

    • 正常删除--删除已关闭的;
    • 强制删除--删除正在运行的;
    • 强制批量删除--删除全部的容器
    • 正常删除容器

      #作用:
      删除一个或者多个容器
      	
      #命令格式:
      $ docker rm [容器名称]或[容器ID]
      
      #删除已关闭的容器:
      $ docker rm nginx01
      

      Error response from daemon: You cannot remove a running container c7f5e7fe5aca00e0cb987d486dab3502ac93d7180016cfae9ddcc64e56149fc9. Stop the container before attempting removal or force remove

      错误响应守护进程:你不能删除一个容器 c7f5e7fe5aca00e0cb987d486dab3502ac93d7180016cfae9ddcc64e56149fc9运行。在尝试拆卸或强制拆卸之前,先停止容器。

    • 强制删除正在运行的容器

      #作用:
      强制删除一个或者多个容器
      
      #命令格式:
      docker rm -f [容器名称]或[容器ID]
      
      #删除正在运行的容器
      $ docker rm -f nginx01
      

    • 批量关闭容器【不建议使用】

      标签:02,容器,nginx,核心技术,宿主机,--,镜像,Docker,docker
      From: https://www.cnblogs.com/yangyi215/p/17367395.html

相关文章

  • 01 Docker基础
    第一章Docker基础目录第一章Docker基础一、Docker简介1Docker是什么?2为什么使用Docker?3Docker的架构与结构4官方资料5Docker特点5.1优点5.2缺点二、Docker快速入门1Docker历程2官方要求3Docker安装4Docker加速器5Docker其它简介5.1Docker的基本命令格式5.2删除Do......
  • ubuntu20安装docker、redis、mysql及部署net6应用
    一、更新系统软件包索引sudoaptupdate二、安装dockersudoaptinstalldocker.io三、在docker中安装Mysql拉取mysql镜像dockerpullmysql:latest查看镜像dockerpullmysql:latest运行容器dockerrun-itd-p3306:3306-eMYSQL_RO......
  • 2023年05月编程语言流行度排名
    点击查看最新编程语言流行度排名(每月更新)2023年05月编程语言流行度排名编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么流行编程......
  • 2023年05月IDE流行度最新排名
    点击查看最新IDE流行度最新排名(每月更新)2023年05月IDE流行度最新排名顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends如果您相信集体智慧,TopIDE索引可以帮助您决定在软件开发项目中使用......
  • 2023年05月在线IDE流行度最新排名
    点击查看最新在线IDE流行度最新排名(每月更新)2023年05月在线IDE流行度最新排名TOP在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends如果您相信集体智慧,那么TOPODE索引可以帮助您决定在......
  • 2023年05月数据库流行度最新排名
    点击查看最新数据库流行度最新排名(每月更新)2023年05月数据库流行度最新排名TOPDB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么TOP......
  • Dockerfile基础命令及简单应用
    Dockerfile从dockercommit的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解......
  • 2023.5.1 总结
    CF选做。CF1820E/CF1819C首先,若树是一个链,那么就直接这样:考虑在链上挂一些支链。若支链长度仅为1,那么很可做。如果支链长度大于1,无解。手玩一下即可。......
  • 每日总结2023-05-01
    今天继续学习了Android中的kotlin语言初始Java语言mportjava.util.ArrayList;importjava.util.List;publicclassRepository{privatestaticfinalRepositoryINSTANCE=null;privateList<User>users=null;publicstaticRepositorygetInstan......
  • CSP2023-03
    第一题 直接满分了:#include<iostream>usingnamespacestd;constintN=1e6;intn,a,b;intpanduan(intx1,inty1,intx2,inty2,inta,intb){intc,k;if(x2<0||y2<0||x1>a||y1>b)return0;//在外侧else{......