Docker 入门详解

初识docker

  • 容器技术:可实现虚拟机虚拟化,docker是众多容器中的佼佼者。
  • 虚拟化:
    • 传统虚拟化技术可通过硬件模拟实现,也可通过操作系统软件实现。
    • 容器技术可实现远超传统虚拟机的轻量级虚拟化,“新一代的虚拟化技术”。
  • 容器云:基于容器打造的云平台。
  • dotCloud公司(Docker Inc)开源基于Go语言实现的容器项目-docker。开源项目地址:https://github.com/docker

关键字

  • Build, Ship and Run Any App, Anywhere
    • 通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的“一次封装,到处运行”。
  • Linux Container(LXC):Linux容器技术
  • DevOps:开发和运维
  • LAMP:Linux + Apache + MySQL + PHP

使用Docker的好处

  • 通过容器来打包应用、解耦应用和运行平台,方便服务器迁移。
  • 在DevOps应用中的优势:
    • 更快速的交互和部署
    • 更高效的资源利用
    • 更轻松的迁移和扩展
    • 更简单的更新管理
  • 与传统虚拟机比较:
    • 启动与停止更快
    • 对系统的资源需求很少,除了运行容器中的应用程序之外基本不消耗额外的系统资源
    • 通过类似Git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新
    • 通过Dockerfile支持灵活的自动化创建和部署机制,以提高工作效率,标准化流程。

虚拟化(virtualization)技术

在计算机领域,指的是计算虚拟化或服务器虚拟化。
在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各个实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,是用户可以用比原本的组态更好的方式来应用这些资源。
虚拟化技术往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统的资源利用率,并且带来降低成本、方便管理和容错容灾的好处。

虚拟化技术的分类

  • 基于硬件的虚拟化
    • 不多见,如网卡中的单根多IO虚拟化(SR-IOV)
  • 基于软件的虚拟化

    • 完全虚拟化

      虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无须进行修改。如IBM p和z系列的虚拟化、VMware Workstation、VirtualBox、QEMU等。

    • 硬件辅助虚拟化

      利用硬件(主要是CPU)辅助支持处理敏感指令来实现完全虚拟化的功能,客户操作系统无须修改。如VMware Workstation、Xen、KVM。

    • 部分虚拟化

      只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。

    • 超虚拟化

      部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改,如早期的Xen。

    • 操作系统级虚拟化

      内核通过创建多个虚拟的操作系统实例来隔离不同的进程。容器技术属于这个范畴。

核心概念

  • 镜像:image

    docker 镜像类似于虚拟机镜像,是只读的模板,镜像是docker容器的基础。

  • 容器:container

    docker容器类似一个轻量级的沙箱,docker利用容器来运行和隔离应用,容器是从镜像创建的应用实例。

  • 仓库:repository

    docker仓库是指某一类镜像的存放地,多个镜像以tag标签来区分。docker仓库服务器是存放docker仓库的地方。

使用docker镜像

  • 搜索镜像:docker search --filter=is-official=true elasticsearch

    Usage:  docker search \[OPTIONS] TERM
    Search Docker Hub for images
    Options:
      -f, --filter filter   Filter output based on conditions provided
          --format string   Pretty-print search using a Go template
          --limit int       Max number of search results
          --no-trunc        Don't truncate output
  • 拉取镜像:docker pull

    Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    Download an image from a registry
    Aliases:
      docker image pull, docker pull
    Options:
      -a, --all-tags                Download all tagged images in the repository
          --disable-content-trust   Skip image verification (default true)
          --platform string         Set platform if server is multi-platform capable
      -q, --quiet                   Suppress verbose output
  • 查看镜像信息

    • 本地镜像列表查看:docker imagesdocker image ls
    • 使用tag命令添加镜像标签:docker tag image:latest myimages:latest
    • 查看镜像的详细信息:docker inspect image:tag
    • 产看镜像历史:docker history image:tag
  • 删除或清理镜像

    • 使用标签删除镜像:docker rmi image:tag
    • 使用镜像id删除镜像:docker rmi image_id
    • 清理镜像:docker image prune
  • 创建镜像

    • 基于已有容器创建:docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    • 基于本地模板导入:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
    • 基于Dockerfile创建: docker buildx build [OPTIONS] PATH | URL | -
  • 保存或加载镜像

    • 存出镜像:docker save [OPTIONS] IMAGE [IMAGE...]
    • 载入镜像:docker load [OPTIONS]
  • 上传镜像:docker push [OPTIONS] NAME[:TAG]

    
    docker push [OPTIONS] NAME[:TAG]
    Upload an image to a registry
    Aliases:
      docker image push, docker push
    Options:
      -a, --all-tags                Push all tags of an image to the repository
          --disable-content-trust   Skip image signing (default true)
      -q, --quiet                   Suppress verbose output

操作docker容器

容器是镜像的一个运行实例,镜像是静态的文件,而容器带有运行时的可写文件层

  • 创建容器
  • 新建容器:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    docker create 创建的容器处于停止状态,可以使用docker start 来启动。
  • 启动容器:docker start [OPTIONS] CONTAINER [CONTAINER...]
  • 新建并启动容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 守护态运行容器:docker run -d
  • 查看容器的输出日志:docker logs [OPTIONS] CONTAINER
  • 停止容器
  • 暂停容器:docker pause CONTAINER [CONTAINER...]
  • 终止容器:docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • 重启容器:docker restart [OPTIONS] CONTAINER [CONTAINER...]
  • 进入容器:

    • attach命令:docker attach [OPTIONS] CONTAINER
    • exec命令:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • 删除容器:docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • 导入导出容器:

    • 导出容器:docker export [OPTIONS] CONTAINER
    • 导入容器:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
  • 查看容器

    • 查看容器详情:docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
    • 查看容器内进程信息:docker top CONTAINER [ps OPTIONS]
    • 查看统计信息:“
  • 容器复制文件:docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH – 查看变更:docker diff CONTAINER
  • 查看端口映射:docker port CONTAINER [PRIVATE_PORT[/PROTO]]
  • 更新配置:docker update [OPTIONS] CONTAINER [CONTAINER...]

docker仓库

  • 仓库与注册服务器
    • 仓库(repository):集中存放某类镜像的地方,可分为公共仓库和私有仓库
    • 注册服务器(registry):注册服务器可以有多个仓库,每个仓库下面可以有多个镜像。仓库可以被认为是一个具体的项目或目录

docker数据管理

  • 使用docker时往往需要将数据持久化或者多个容器间共享数据,这就必须对容器的数据进行管理。
  • 容器中数据管理的两种方式:
    • 数据卷(data volumes):容器内数据直接映射到本地主机环境
    • 数据卷容器(data volume containers):使用特定的容器维护数据卷

数据卷

  • 数据卷是可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux的mount行为。
    • 容器卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便
    • 对容器卷内数据的修改会立马生效,无论是容器内操作还是本地操作
    • 对容器卷的更新不会影响影响,解耦应用和数据
    • 卷会一直存在,直到没有容器使用,可以安全地卸载它
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论

古乃特

Java Developer

不积跬步无以至千里~

最新文章

Docker 入门详解

2024年2月29日

Docker 入门详解 初识docker...

Linux使用记录

2024年2月29日

Linux 25.8K 开源的 Linu...

gRPC框架学习记录

2024年2月29日

gRPC首次使用问题 报错信息1: 造成...

多线程间ThreadLocal数据传递

2024年2月29日

多线程编程ThreadLocal数据传递...

世界,您好!

2023年9月13日

欢迎使用WordPress。这是您的第一...

All Rights Reserved. 版权所有 © 2024 古乃特

黔ICP备2024019367号
0
希望看到您的想法,请您发表评论x
滚动至顶部