Docker-简介、基本操作

news/2024/6/3 16:36:07 标签: docker, 容器, 运维

目录

Docker理解

1、Docker本质

2、Docker与虚拟机的区别

3、Docker和JVM虚拟化的区别

4、容器、镜像的理解

5、Docker架构

Docker客户端

Docker服务器

Docker镜像

Docker容器

镜像仓库

Docker基本操作

1、Docker镜像仓库

镜像仓库分类

镜像仓库命令

docker%20login-toc" style="margin-left:120px;">docker login

docker%20pull-toc" style="margin-left:120px;">docker pull

docker%20push-toc" style="margin-left:120px;">docker push

docker%20search-toc" style="margin-left:120px;">docker search

docker%20logout-toc" style="margin-left:120px;">docker logout

2、Docker镜像操作

docker%20images-toc" style="margin-left:80px;">docker images

docker%20image%C2%A0inspect-toc" style="margin-left:80px;">docker image inspect

docker%20tag-toc" style="margin-left:80px;">docker tag

docker%20rmi-toc" style="margin-left:80px;">docker rmi

docker%20build-toc" style="margin-left:80px;">docker build

docker%20save-toc" style="margin-left:80px;">docker save

docker%20load-toc" style="margin-left:80px;">docker load

docker%20history-toc" style="margin-left:80px;">docker history

docker%20import-toc" style="margin-left:80px;">docker import

docker%20image%20prune-toc" style="margin-left:80px;">docker image prune

去 DockerHub 搜索并拉取一个 Nginx 镜像,打包后删除镜像,重新加载 .tar 文件

DockerHub搜索 Nginx 镜像

docker%20pull%E5%91%BD%E4%BB%A4%E6%8B%89%E5%8F%96%E9%95%9C%E5%83%8F-toc" style="margin-left:120px;">利用docker pull命令拉取镜像

docker%20save%E5%91%BD%E4%BB%A4%E5%B0%86%20Nginx%3Alatest%E6%89%93%E5%8C%85%E4%B8%BA%E4%B8%80%E4%B8%AA%20Nginx.tar%20%E5%8C%85%C2%A0-toc" style="margin-left:120px;">利用docker save命令将 Nginx:latest打包为一个 Nginx.tar 包 

docker%20rmi%20%E5%88%A0%E9%99%A4%E6%9C%AC%E5%9C%B0%E7%9A%84%20Nginx%3Alatest-toc" style="margin-left:120px;">利用docker rmi 删除本地的 Nginx:latest

docker%20load%20%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%20Nginx.tar%E6%96%87%E4%BB%B6%C2%A0-toc" style="margin-left:120px;">利用docker load 重新加载 Nginx.tar文件 

3、Docker容器操作

docker%20run-toc" style="margin-left:80px;">docker run

docker%20ps-toc" style="margin-left:80px;">docker ps

docker%20logs-toc" style="margin-left:80px;">docker logs

docker%20exec-toc" style="margin-left:80px;">docker exec

docker%C2%A0rm-toc" style="margin-left:80px;">docker rm

4、数据卷

数据卷解决了什么问题

数据卷操作

创建一个数据卷,查看数据卷在宿主机的目录位置,实现挂载数据卷,最后修改容器内容

docker%20run%E5%9C%A8%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20-v%20%E5%8F%82%E6%95%B0%E6%9D%A5%E6%8C%82%E8%BD%BD%E4%B8%80%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%8D%B7%E5%88%B0%E6%9F%90%E4%B8%AA%E5%AE%B9%E5%99%A8%E7%9B%AE%E5%BD%95-toc" style="margin-left:120px;">使用docker run在运行容器的时候,可以通过 -v 参数来挂载一个数据卷到某个容器目录

查看数据卷

查看数据卷的详细信息


Docker理解

1、Docker本质

Docker本质其实是LXC之类的增强版,它本身不是容器,而是容器的易用工具。容器是Linux内核中的技术,Docker只是把这种技术在使用上普及了。

docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。

我们可以看到docker可以屏蔽环境差异,也就是说,只要你的程序打包到了docker中,那么无论运行在什么环境下程序的行为都是一致的,真正实现了“build once, run everywhere”。

2、Docker与虚拟机的区别

Docker传统虚拟机
底层系统进程操作系统中的操作系统
性能体积小、启动速度快、性能好,接近原生虚拟机体积大、启动速度慢、性能一般
磁盘占用一般为MB一般为GB
启动速度秒级分钟级
隔离策略CGroupsHypervisor
高可用策略弹性、负载、动态备份、容灾、迁移

3、Docker和JVM虚拟化的区别

JVMDocker容器
性能JVM需要占用一定的CPU和内存基本没有损失
虚拟层面基于JVM虚拟化,更加上层基于操作系统,更加通用
代码无关一个特定代码的执行平台,它是运行时才存在的,只能支撑特定代码的执行,并且必须是在jvm进程内

模拟了一整个操作系统,它是静态存在的,可以支撑任何相同平台的应用程序

主机隔离性jvm不隔离主机通过命令空间实现隔离

4、容器、镜像的理解

容器就像一个打包工具,打包的不仅是你的程序,也包括运行环境。就好比你把你的开发主机和开发程序完全复制了一份,别人拿到后就不需要搭建环境,也不需要根据环境进行调试,直接就可以运行了。

镜像像是一个包含了OS文件系统和应用的对象,类似虚拟机的模板(比如Window10镜像)。如果你是一个开发 者,可以把镜像看成面向对象编程中的只读类(read-only Class)。

容器和镜像几乎一模一样,唯一的区别是镜像是只读的,而容器上面有一个可读写层。所以容器=镜像+读写层。

5、Docker架构

Docker客户端

是用户和docker交互的一种方式。它用来接收用户指令并且和docker的守护进程进行通信。

Docker服务器

Docker daemon运行在Docker host上,负责创建、运行、监控容器,构建、存储镜像。默认配置下,Docker daemon默认只能响应来自本地Host的客户端请求

Docker镜像

Docker 镜像是用于创建Docker容器的模板。可将Docker镜像看成只读模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。通过它可以创建Docker容器

Docker容器

Docker容器就是Docker镜像的运行实例,容器是独立运行的一个或一组应用。容器可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。可以把容器看做是一个简易版的linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

镜像仓库

Registry是存放Docker镜像的仓库,Registry分私有和公有两种。

Docker基本操作

1、Docker镜像仓库

镜像仓库(Docker Registry)具备存储、管理和分发镜像的功能,镜像是Docker运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心。

镜像仓库管理多个Registry,Registry通过命名来区分。每个Registry包含一个或多个镜像,镜像通过镜像名称和标签来区分。

镜像仓库分类

公有仓库:像阿里云、dockerhub等放到公有网络上,不用登录就可以下载镜像,供大家使用

私有仓库:不对外开放,往往位于私有网络,只有内部人员可以使用

镜像仓库命令

查看所有命令

docker --help

docker%20login">docker login

登录到一个Docker镜像仓库

docker%20pull">docker pull

从镜像仓库中拉取或者更新指定镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

docker%20push">docker push

将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

docker push [OPTIONS] NAME[:TAG]

docker%20search">docker search

从Docker Hub查找镜像

docker search [OPTIONS] TERM

docker%20logout">docker logout

登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub

docker logout [SERVER]

2、Docker镜像操作

docker%20images">docker images

查看镜像

docker images [OPTIONS] [REPOSITORY[:TAG]]

docker%20image%C2%A0inspect">docker image inspect

查看镜像详细信息

docker image inspect [OPTIONS] IMAGE [IMAGE...]

docker%20tag">docker tag

标记本地镜像,用于推送镜像仓库

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

docker%20rmi">docker rmi

删除本地镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]

关键参数:

        -f:强制删除

        --no-prune:不移除该镜像的过程镜像,默认移除

docker%20build">docker build

通过dockerfile制作镜像

docker%20save">docker save

将指定镜像保存成tar归档文件

docker save [OPTIONS] IMAGE [IMAGE...]

关键参数:

        -o:输出到的文件

docker%20load">docker load

导入使用docker save命令导出的镜像 

docker load [OPTIONS]

关键参数:

        --input,-i:指定导入的文件,代替STDIN

        --quiet,-q:精简输出信息

docker%20history">docker history

查看镜像历史

docker history [OPTIONS] IMAGE

关键参数:

        -H,--human:大小和日期采用人容易读的格式展现

        --no-trunc:显示全部信息,不要隔断

        -q,--quiet:只显示镜像id信息

docker%20import">docker import

从归档文件docker export中创建镜像

docker%20image%20prune">docker image prune

删除不使用的镜像

docker image prune [OPTIONS]

关键参数:

        -a,--all:删除全部不使用的镜像

        --filter filter:指定过滤条件

        -f,--force:不提示是否删除

去 DockerHub 搜索并拉取一个 Nginx 镜像,打包后删除镜像,重新加载 .tar 文件

DockerHub搜索 Nginx 镜像

查看 Nginx 镜像的帮助文档信息

docker%20pull%E5%91%BD%E4%BB%A4%E6%8B%89%E5%8F%96%E9%95%9C%E5%83%8F">利用docker pull命令拉取镜像

docker pull nginx

没有指定版本时就为最新版本

查看镜像

docker%20save%E5%91%BD%E4%BB%A4%E5%B0%86%20Nginx%3Alatest%E6%89%93%E5%8C%85%E4%B8%BA%E4%B8%80%E4%B8%AA%20Nginx.tar%20%E5%8C%85%C2%A0">利用docker save命令将 Nginx:latest打包为一个 Nginx.tar 包 

docker%20rmi%20%E5%88%A0%E9%99%A4%E6%9C%AC%E5%9C%B0%E7%9A%84%20Nginx%3Alatest">利用docker rmi 删除本地的 Nginx:latest

docker%20load%20%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%20Nginx.tar%E6%96%87%E4%BB%B6%C2%A0">利用docker load 重新加载 Nginx.tar文件 

3、Docker容器操作

可以通过docker ps查看容器状态

docker%20run">docker run

创建一个新的容器并运行一个命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

关键参数:

        -d:后台运行容器,并返回容器ID

        -i:以交互模式运行容器,通常与-t同时使用

        -P:随机端口映射,容器内部端口随即映射到主机的端口

        -p:指定端口映射,格式为:主机(宿主)端口:容器端口

        -t:为容器重新分配一个伪输入终端,通常与-i同时使用

        --name="nginx-lb":为容器制定一个名称

        -h "mars":指定容器的hostname;

        -e username="ritchie":设置环境变量

        -m:设置容器使用内存最大值

        --network="bridge":指定容器的网络连接类型

        --link=[]:添加链接到另一个容器

        --volume,-v:绑定一个卷

        --rm:shell退出的时候自动删除容器

例如:

docker run -d -p 8081:80 nginx:1.23.4

docker%20ps">docker ps

查看容器运行状态

关键参数:

        -a:查看所有状态的容器

        -f:根据条件过滤显示的内容

        --format:指定返回值的模版文件,如json或者table

        -l:显示latest的容器

        -n:列出最近创建的n个容器

        --no-trunc:不阶段输出

        -q:静默模式,只显示容器编号

        -s:显示总的文件大小

docker%20logs">docker logs

查看容器日志信息

-f:持续查看容器信息

docker%20exec">docker exec

进入容器

docker exec -it mynginx bash

进入mynginx的容器里,

docker%C2%A0rm">docker rm

删除容器(不能删除运行中的容器

-f:强制删除

4、数据卷

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁

数据卷解决了什么问题

容器与数据(容器内文件)耦合所引发的问题:容器内数据修改困难:修改时需进入容器内操作,操作复杂不方便;数据不可复用:容器内的修改对外不可见,也就是说每新建一个容器均需执行一次相关操作;升级维护困难:升级容器时会删除旧容器,而数据存储在容器内,也就是说容器升级时数据会跟随旧容器一同被删除。

数据卷操作

数据卷操作的基本语法:

docker volume [COMMAND]

相关参数:

create:创建数据卷

ls:查看所有数据卷

rm:删除指定数据卷

inspect:查看某个数据卷的详情

prune:清楚数据卷

  • 在执行docker run命令时,使用-v 数据卷:容器内目录 可以完成数据卷挂载
  • 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

创建一个数据卷,查看数据卷在宿主机的目录位置,实现挂载数据卷,最后修改容器内容

docker%20run%E5%9C%A8%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20-v%20%E5%8F%82%E6%95%B0%E6%9D%A5%E6%8C%82%E8%BD%BD%E4%B8%80%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%8D%B7%E5%88%B0%E6%9F%90%E4%B8%AA%E5%AE%B9%E5%99%A8%E7%9B%AE%E5%BD%95">使用docker run在运行容器的时候,可以通过 -v 参数来挂载一个数据卷到某个容器目录

其中 -v 后面的 html 是我们刚刚创建的数据卷(如果没创建会自动创建),而后面的 /user/share/nginx/html 是对应容器中的目录地址 

查看数据卷

查看数据卷的详细信息

vim 打开后可以看到 index.html 并修改标题数据

网页访问


http://www.niftyadmin.cn/n/5220971.html

相关文章

Shell脚本:Linux Shell脚本学习指南(第三部分Shell高级)一

第三部分:Shell高级(一) 这一章讲解 Shell 脚本编程的进阶内容,主要涉及重定向、文件描述符、管道和过滤器、子 Shell、信号等。 本章会使用到一些底层的编程知识,有C语言和 C 编程经验的程序员阅读起来将会更加轻松。…

【Mysql】【DB】【sql】提高数据库搜索性能的经验

【背景】 项目需要,经常给金融机构做数字化项目,涉及到各类复杂的查询,今天就我认为最重要的影响性能的数据库查询经验以及解决方案做一个分享。 【常见查询设计中最影响性能的方面】 最影响性能的是联表,且联表方面&#xff0…

JVM——垃圾回收器(Serial,SerialOld,ParNew,CMS,Parallel Scavenge,Parallel Old)

目录 1.垃圾回收器的组合关系1.年轻代-Serial垃圾回收器2.老年代-SerialOld垃圾回收器3.年轻代-ParNew垃圾回收器4.老年代- CMS(Concurrent Mark Sweep)垃圾回收器CMS执行步骤:CMS垃圾回收器存在的问题缺点:CMS垃圾回收器存在的问题 – 线程资源争抢问题…

lv11 嵌入式开发 UART实验 11

目录 1 UART帧格式详解 1.1 UART简介 1.2 通信基础 - 并行和串行 1.3 通信基础 - 单工和双工 1.4 通信基础 - 波特率 1.5 UART帧格式 2 Exynos4412下的UART控制器 2.1 引脚功能设置 2.2 阅读芯片手册 3 UART寄存器详解 3.1 引脚寄存器 3.2 串口寄存器概览 3.3 ULC…

【LeetCode】69. x的平方根

69. x的平方根 难度:简单 题目 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 **注意:**不允许使用任何内置指数函数和算符,例如…

C++面经每日一更

C的面向对象主要体现在哪些方面: 面向对象是一种编程思想,把一切东西看成是一个个对象,把这些对象拥有的属性变量和操作这些属性变量函数打包成一个类来表示。 面向对象的三大特性是:封装、继承、多态。 封装:将数据和…

Mysql锁实战详细分析

1.mysql回表查询 在这里提起主要是用于说明mysql数据和索引的结构,有助于理解后续加锁过程中的一些问题。 mysql索引结构和表数据结构是相互独立的,根据索引查询,只能找到索引列和主键聚簇索引。如果select语句中不包含索引列,m…

医学影像PACS源码:PACS系统的基础知识(DICOM、HL7、SWF)

1、PACS PACS是Picture Archiving and Communication Systems首字母缩写,全称为影像储存和传输系统,涉及放射医学、计算机技术、通讯技术及数字图像技术等,是医院信息系统的重要组成部分,是将数字医疗设备(如X线、CT、MRI、超声、…