• docker入门教程


    Docker是一个开源的应用容器引擎,基于Go语言开发,Docker可以打包应用及其依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的系统。
    docker相关资源:

    • Docker 官方主页: https://www.docker.com
    • Docker 官方博客: https://blog.docker.com/
    • Docker 官方文档: https://docs.docker.com/
    • Docker Hub: https://hub.docker.com

    Docker架构

    来源:菜鸟教程
    图片来源:Docker 架构

    • 镜像(Image):Docker镜像(Image),相当于时一个root文件系统。比如Ubuntu镜像就包含了完整的一套Ubuntu最小系统的root文件系统。
    • 容器(Container):独立运行的一个或一组应用,是镜像运行后的进程,镜像和容器类似于面向对象程序设计种的类和对象,镜像是静态的定义(比如类),容器时镜像运行时的实体(对象)。容器可以被创建、启动、停止、删除、暂停等。
    • 仓库(Respository):可以看成一个代码控制中心,用来保存镜像。官方在Docker Hub提供了庞大的镜像集合供使用,也可以自己上传镜像

    Docker与虚拟机的区别:

    • 容器与容器之间只是进程的隔离,虚拟机是完全的资源隔离(容器虚拟化的是操作系统,虚拟机虚拟化的是硬件)
    • 虚拟机的启动需要的时间是分钟级别,Docker启动是秒级甚至更短
    • 容器使用宿主操作系统的内核,只能运行在同一类型操作系统,虚拟机使用完全独立的内核,可以运行不同操作系统

    安装

    Docker可以运行在MAC、Windows、CentOS、Ubuntu等操作系统上,官网:https://www.docker.com/
    网上有很多安装教程,尽量在linux系统上安装使用。
    安装成功后,可以通过docker -v命令查看安装是否成功

    > docker -v
    Docker version 20.10.11, build dea9396
    
    • 1
    • 2

    Docker基本命令

    服务相关命令

    命令描述
    systemctl start docker启动docker服务
    systemctl stop docker停止docker服务
    systemctl restart docker重启docker服务
    systemctl status docker查看docker服务状态,启动中:active (running)、停止状态:inactive (dead)
    systemctl enable docker设置开机启动docker服务

    在这里插入图片描述

    镜像相关命令

    命令描述
    docker images查看本地所有的镜像
    docker search 镜像名称从 Docker Hub 查找需要的镜像
    docker pull 镜像名称[:版本号]从Docker Hub(仓库)下载指定版本镜像到本地,如果版本号未指定,则默认下载最新的版本。
    docker rmi 镜像id
    docker rmi 镜像名称[:版本号]
    根据镜像id或镜像名称+版本号(若版本号未输,默认是latest)删除指定镜像
    docker save 镜像名称:版本>路径/xxx.tar将指定镜像导出到指定路径下(文件后缀为rar)
    docker load<文件路径将指定镜像文件导入到系统中
    docker tag 原镜像名称:版本 新镜像名称:新版本
    docker tag 镜像id 新镜像名称:新版本
    标记本地镜像为新镜像名称、新版本(不会修改原有的镜像)
    docker history 镜像名称查看指定镜像的创建历史

    docker images

    命令:docker images [OPTIONS]
    描述:列出本地镜像
    输出结果字段说明:

    • REPOSITORY: 镜像名称
    • TAG:镜像版本号
    • IMAGE ID:镜像在本地的id
    • CREATED:镜像在官方被创建的日期
    • SIZE:镜像大小

    在这里插入图片描述

    docker search

    命令:docker search 镜像名称
    描述:从 Docker Hub 查找需要的镜像
    输出结果字段说明:

    • NAME: 镜像仓库源的名称
    • DESCRIPTION: 镜像的描述
    • OFFICIAL: 是否 docker 官方发布,若显示为[OK]表示是官方提供的镜像
    • STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
    • AUTOMATED: 自动构建。

    在这里插入图片描述

    docker pull

    命令:docker pull 镜像名称[:版本号]
    描述:从 Docker Hub 拉取指定的镜像到本地

    在这里插入图片描述

    docker rmi

    命令:

    • 根据镜像id删除:docker rmi 镜像id
    • 根据镜像名称和版本号(默认为latest)删除:docker rmi 镜像名称[:版本号]

    描述:rmi(remove images的缩写)删除指定的镜像
    注意:如果镜像名称一样,版本号一个是latest,一个是具体的版本号,如果具体的版本号就是最新的,则2个镜像的镜像id是一样的,这个时候使用镜像id删除会失败,这个时候就只能使用镜像名称+版本号的方式去删除指定的镜像。

    在这里插入图片描述
    在这里插入图片描述
    也可以批量删除镜像(需要跟docker images -q结合使用),命令行格式为:
    docker rmi `docker images -q redis`
    在这里插入图片描述

    docker save

    命令:docker save 镜像名称:版本>路径/xxx.tar
    描述:将指定镜像导出到指定路径下(文件后缀为rar)
    注意:文件对应的路径必须是已经存在的,路径不存在的话会失败

    在这里插入图片描述

    docker load

    命令:docker load<文件完整路径(包含文件名)
    描述:将指定镜像文件导入到系统中

    在这里插入图片描述

    docker tag

    命令:

    • 按照镜像名称和版本:docker tag 原镜像名称:版本 新镜像名称:新版本
    • 按照镜像id:docker tag 镜像id 新镜像名称:新版本
      描述:标记本地镜像为新镜像名称、新版本

    在这里插入图片描述
    从结果来看,docker tag并没有将原有的内容进行修改(IMAGE ID)一样,相当于是复制了个镜像

    docker history

    命令:docker history 镜像名称
    描述:查看指定镜像的创建历史

    在这里插入图片描述

    容器相关命令

    命令描述
    docker ps查看正在运行的容器
    docker run [option] --name=容器名称 本地镜像名称:镜像版本 [待执行命令]创建并启动容器,且自动执行待执行命令
    docker exec 参数 容器名称或容器id 待执行命令进入容器(后面退出容器,容器不会关闭)
    docker start/restart/stop/kill 容器名称或容器id启动/重启/停止/杀掉 容器
    docker pause/unpause 容器名称或容器id暂停容器运行
    docker rm 容器名称或容器id删除容器
    docker inspect 容器名称或容器id查看容器元信息
    docker top 容器名称或容器id查看容器中运行的进程信息
    docker stats 容器名称或容器id查看容器占用资源情况
    docker cp 本地路径 容器id:路径
    docker cp 容器id:路径 本地路径
    将本地路径内容拷贝到指定容器的指定路径下
    将指定容器的指定路径内容拷贝到本地指定路径
    docker logs [option] 容器名称或容器id查看指定容器的日志

    docker ps

    命令:docker ps或docker ps -a
    描述:查看正在运行的容器
    结果字段说明

    • CONTAINER ID:容器ID
    • IMAGE:镜像
    • COMMAND:创建容器时执行的命令(比如docker run时在命令末尾的内容)
    • CREATED:容器创建时间
    • STATUS:容器运行状态
    • PORTS:网络访问端口
    • NAMES:容器名称

    在这里插入图片描述

    docker run

    命令:docker run [option] --name=容器名称 镜像名称:镜像id 待执行命令
    option常用参数:

    • -i:以交互模式运行容器,通常与 -t 同时使用,使用it这2个参数后,容器创建后自动进入容器中,推出容器后,容器自动关闭。
    • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
    • -d:以守护(后台)模式运行容器,并返回容器ID。创建一个容器在后台运行,需要使用docker exec进入容器,退出后容器也不会关闭
    • –name:为创建的容器命名
      描述:创建并启动容器,并在容器中自动执行指定的一条命令

    在这里插入图片描述

    docker start/restart/stop/kill

    命令:docker start/restart/stop/kill 容器名称或容器id
    描述:启动/重启/停止/杀掉 容器

    在这里插入图片描述

    docker pause/unpause

    命令:docker pause/unpause 容器名称或容器id
    描述:暂停容器运行

    在这里插入图片描述

    docker rm

    命令:docker rm 容器名称或容器id
    选项:

    • -v:删除容器后,会去查看关联的卷(数据卷容器类型的)是否不在使用中了,如果不在使用中,则将卷同步删除
      描述:删除容器(需要停止容器再删,运行状态的会删除失败)

    在这里插入图片描述
    在这里插入图片描述

    docker inspect

    命令:docker inspect 容器名称或容器id
    描述:查看容器元信息

    在这里插入图片描述

    docker top

    命令:docker top 容器名称或容器id
    描述:查看容器中运行的进程信息
    输出结果字段说明:

    • PID:进程的进程号
    • PPID:父进程进程号
    • C、%CPU:cpu使用率
    • STIME:进程启动时的系统时间
    • TTY:进程启动时终端设备,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
    • TIME:运行进程需要的累积CPU时间
    • CMD:启动程序名称或命令

    在这里插入图片描述

    docker stats

    命令:docker stats 容器名称或容器id
    描述:查看容器占用资源情况

    在这里插入图片描述
    输入docker stats命令,回车后,出现如下界面:
    在这里插入图片描述
    之后可以Ctrl+C退出当前界面

    docker cp

    命令:docker cp 路径1 路径2
    描述:将路径1的内容复制到路径2去。如果是表示某个容器的路径,则需要是容器id:容器名称:开头
    注意:路径均为绝对路径

    在这里插入图片描述

    docker logs

    命令:docker logs [option] 容器名称或容器id
    描述:获取容器的日志
    option参数说明

    • -f:跟踪日志输出
    • –since:显示某个开始时间的所有日志
    • -t:显示时间戳
    • –tail:仅列出最新N条容器日志

    在这里插入图片描述

    docker exec

    命令:docker exec 参数 容器名称或容器id 待执行命令
    描述:在运行的容器中执行命令(exit命令退出容器后,容器不会关闭)
    参数说明:

    • -d:分离模式(在后台运行)
    • -i:保持STDIN打开
    • -t:分配一个伪终端

    在这里插入图片描述

    数据卷和数据卷容器

    思考:

    • Docker容器删除后,容器中产生的数据也会随之销毁(数据非持久化)
    • Docker容器和外部机器不能可以直接交换文件(不能直接,那就间接)
    • 容器之间想要进行数据交互(不能直接,那就间接)

    为了解决容器中的数据无法与其他机器、容器交互和持久保存的问题,Docker提供了数据卷。
    数据卷:

    • 数据卷时宿主机中的一个目录或文件
    • 当容器目录和数据卷目录绑定后,对方的修改会立即同步(即容器和数据卷数据同步更新)
    • 一个数据卷可以被多个容器同时挂载
    • 一个容器可以被挂载多个数据卷

    数据卷作用:

    • 容器数据持久化
    • 外部机器和容器间接通信
    • 容器之间数据交换

    配置数据卷

    在创建启动容器时,使用 -v参数 设置数据卷:

    docker run … -v 宿主机目录(文件):容器内目录(文件)

    注意事项:

    1. 目录必须时绝对路径
    2. 如果目录不存在,会自动创建
    3. 可以挂载多个数据卷

    在这里插入图片描述
    一个容器可以挂载多个数据卷
    在这里插入图片描述

    配置数据卷容器

    如果某个容器想与数据卷容器共享数据,除了2者的数据卷是同一个的方法外,也可以设置一个数据卷容器,然后其他容器可以跟这个数据卷容器进行挂载。
    在创建启动数据卷容器时,使用 -v参数 设置数据卷:

    docker run … -v 容器内目录(文件)路径

    在创建启动容器时,使用 –volumes-from 数据卷容器id或名称 挂载数据卷容器

    docker run … --volumes-from 数据卷容器id或名称

    在这里插入图片描述

    docker volume命令

    docker volume ls

    格式:docker volume ls [option]
    常用选项:

    • --filter dangling=true:只显示未使用中的卷

    描述:查看全部数据卷容器信息(只展示数据卷容器的卷,主机的数据卷目录、文件或关联数据卷容器的容器均不被识别)

    在这里插入图片描述
    在这里插入图片描述

    docker volume inspect

    格式:docker volume inspect 卷名称
    描述:查看卷详情

    在这里插入图片描述

    docker volume rm

    格式:docker volume rm 卷名称
    描述:删除对应的卷(如果卷还在使用中【被映射、挂载】,则删除失败)

    在这里插入图片描述

  • 相关阅读:
    JS 对象和函数
    Nginx WEB访问与Linux授权约束
    [RK3568 Android11]Wifi 连接过程
    附文献!艾美捷抗人IL-17AmAb(MT44.6)未偶联相关研究
    日语基础复习 Day 15
    React-Redux
    数据结构面试整理
    一个前端大佬的十年回顾 | 漫画前端的前世今生
    面向接口编程实践之aspnetcoreapi的抽象
    基于FFmpeg的Android播放器
  • 原文地址:https://blog.csdn.net/wenxiaoba/article/details/127494782