【Docker从入门到进阶】01.介绍 02.基础使用

1. 介绍

1.1. 什么是 Docker

Docker 是一个开源的平台,用于开发、发布和运行应用程序。它使开发者能够以更精简的方式封装应用及其依赖,做到“打包一次,到处运行”。通过 Docker,您可以创建轻量级、可移植的容器,每个容器内运行着一个应用程序及其所有依赖环境。

1.1.1. Docker 简介

Docker 提供了一种一致的应用运行环境,解决了“在我机器上正常工作”的问题。这是通过将应用程序及其所需的一切打包到容器中实现的,这样相同的容器可以在任何环境中运行。

1.1.2. Docker 的用途和优势
  • 快速应用交付和部署:通过 Docker,可以用同一个配置快速测试、发布和大规模部署应用。

  • 可移植性:无论是在本地开发环境、处理器架构不同的测试环境,还是在云端的生产环境,Docker 容器都能保持应用一致运行。

  • 资源隔离和分配:Docker 使用 Linux 内核的功能,如 cgroups 和命名空间,来独立于操作系统隔离和分配资源。

  • 高效利用系统资源:与虚拟机相比,Docker 容器使用的资源更少,能够运行更多的容器实例。

1.1.3. 容器 vs 虚拟机
  • 虚拟机:在主机操作系统上通过虚拟化软件仿真硬件运行完整的操作系统。资源开销大,启动慢,但更适合运行不同操作系统内核。

  • 容器:共享主机操作系统内核,通过隔离进程来实现资源使用控制。容器启动快,占用资源少,适合应用的轻量化和快速扩展。

1.2. Docker 的基本组成部分
1.2.1. Docker 镜像(Image)

Docker 镜像是一个只读模板,包含创建 Docker 容器的指令。镜像可以基于基础镜像进行拓展,添加新的指令来构建最终的应用程序执行环境。镜像是构建容器的基础,可以使用公共的镜像仓库,比如 Docker Hub,也可以使用私有仓库。

1.2.2. Docker 容器(Container)

Docker 容器是由镜像创建的可运行实例。容器是用户与应用程序交互的具体实现,它是独立的并提供一个隔离的运行环境。每个容器都与其他容器以及主机隔离,可作为一种本地或云端的环境部署。

1.2.3. Docker 仓库(Registry)

Docker 仓库是存储和分发镜像的平台。通过 Docker 仓库,您可以查找并下载他人共享的镜像,也可以上传自己的镜像用于共享或备份。常用的公共仓库是 Docker Hub,但根据需求可以搭建私有的 Docker 仓库。

2. 基础使用

本节将介绍Docker的基础操作,包括如何安装Docker、使用基本命令来管理镜像和容器。掌握这些内容将为您处理更复杂的Docker操作奠定基础。

2.1. 安装 Docker

Docker可在多种操作系统上安装,以下是常见系统的安装步骤:

  • Windows:使用Docker Desktop进行安装,需提前启用Hyper-V。

    1. 下载Docker Desktop安装包。
    2. 运行安装包并按照提示完成安装。
    3. 启动Docker Desktop并成功运行时,系统托盘将显示Docker图标。
  • macOS:通过Docker Desktop安装,需启用Apple Hypervisor。

    1. 下载Mac版Docker Desktop。
    2. 打开下载的dmg文件,将Docker图标拖入“应用程序”文件夹。
    3. 运行Docker应用,初次启动可能需要输入管理员密码。
  • Linux:通常通过包管理工具安装(CentOS、Ubuntu为例)。

    • 对于Ubuntu:
      sudo apt-get update
      sudo apt-get install docker-ce docker-ce-cli containerd.io
      
    • 对于CentOS:
      sudo yum install docker-ce docker-ce-cli containerd.io
      
  • 验证安装是否成功:执行以下命令以检查Docker版本:

    docker --version
    

    若显示版本信息,则安装成功。

2.2. 基本命令

掌握以下基本命令,便可轻松进行Docker的常规操作:

  • 版本信息docker version
    显示Docker客户端和服务端的版本信息。

  • 系统信息docker info
    查看Docker的具体设置信息,包含系统可用资源、已用资源等。

  • 运行容器docker run
    启动一个新的容器。

    docker run hello-world
    

    该命令从Docker Hub中拉取hello-world镜像并运行。

  • 列出容器

    • docker ps:列出当前正在运行的容器。
    • docker ps -a:列出所有容器包括已停止的。
  • 管理容器

    • 停止容器:docker stop <container_id>
    • 启动容器:docker start <container_id>
    • 重启容器:docker restart <container_id>
  • 删除容器与镜像

    • 删除容器:docker rm <container_id>
    • 删除镜像:docker rmi <image_id>
2.3. 镜像管理

镜像是Docker构建的基础,通过管理镜像,您可以控制容器的基础环境:

2.3.1. 拉取镜像

在内网环境中,通常需要通过特定的镜像源或者私有镜像仓库来获取镜像。假设已在内网搭建了私有镜像仓库:

  1. 配置镜像源:在内网中使用私有仓库时,需配置docker以访问该仓库,编辑或创建daemon.json文件:

    {"registry-mirrors": ["http://your-private-registry"]
    }
    

    然后,重启docker服务。

  2. 拉取镜像
    通过命令行下载镜像:

    docker pull <your-private-registry>/<image_name>:<tag>
    

    使用正确的仓库地址和标签来指定镜像版本。

2.3.2. 列出镜像

在下载或创建镜像后,可以查看当前系统上存储的所有镜像:

  • 执行以下命令来查看镜像列表:
    docker images
    
    此命令将显示镜像仓库名称、标签、镜像ID、创建时间及其虚拟大小。
2.3.3. 删除镜像

当不再需要某些镜像时,可以手动删除以节省磁盘空间:

  1. 查找镜像ID:首先使用docker images命令找到目标镜像的ID。
  2. 删除特定镜像
    docker rmi <image_id>
    
    如果镜像正在被某些容器使用,需先停止并删除这些容器。
2.3.4. 创建镜像(可选)

在内网环境中,您可能需要自己构建镜像:

  1. 编写Dockerfile
    创建一个Dockerfile,定义您需要的环境和软件安装。

    FROM ubuntu:latest
    RUN apt-get update && apt-get install -y <your-required-packages>
    COPY ./your-local-file /some/path
    CMD ["your-command"]
    
  2. 构建镜像
    使用以下命令构建镜像:

    docker build -t <your-image-name>:<tag> .
    

    在执行的目录中包含Dockerfile

2.3.5. 镜像保存与加载

对于内网环境中,如需在不同主机之间转移镜像而不通过镜像仓库,您可以使用保存和加载功能:

2.3.5.1. 保存镜像为文件
  • 命令docker save

    可以将镜像导出到一个文件中,以便在其他系统上重新导入。假设错误报告创建ubuntu镜像文件:

    docker save -o ubuntu_latest.tar ubuntu:latest
    
  • 用途:适用于需要将镜像转移到无网络或者不便于网络传输的环境。

2.3.5.2. 加载镜像文件
  • 命令docker load

    从tar文件中加载镜像到本地镜像仓库:

    docker load -i ubuntu_latest.tar
    
  • 用途:从转移的镜像文件中恢复镜像,此操作将镜像加载到Docker环境中,可以随时使用。

2.3.6. 导出和导入镜像

导出和导入略有不同,适用于不同场景,主要用于容器的迁移:

2.3.6.1. 导出镜像
  • 命令docker export

    如需导出一个正在运行或已停止的具体容器,而非镜像:

    docker export -o my_container.tar <container_id>
    
2.3.6.2. 导入镜像
  • 命令docker import

    将导入的tar包文件重新创建为镜像:

    cat my_container.tar | docker import - my_new_image:latest
    
2.3.7. 镜像的标记

标记(tag)操作允许您为镜像创建别名,以便于管理和引用不同版本的镜像:

  • 命令docker tag

    为现有镜像分配新标签:

    docker tag ubuntu:latest myrepo/ubuntu:optimized
    
2.3.8. 清理未使用的镜像
  • 命令docker image prune

    删除所有未被使用过的所有悬挂(dangling)镜像:

    docker image prune
    
2.3.9. 镜像的历史
  • 命令docker history

    查看镜像的创建历史和层次结构,帮助理解镜像是如何构建的:

    docker history ubuntu:latest
    
2.4. 容器管理

管理容器是理解Docker的关键之一,掌握容器的创建、启动和交互操作可以有效地利用Docker进行应用部署和维护。以下是详细的基本操作指南:

2.4.1. 创建和启动容器

使用 docker run 命令是创建和启动容器的主要方式:

  • 命令docker run

    通过该命令可以从指定镜像创建并启动一个新的容器。例如:

    docker run -d --name my_container ubuntu:latest
    
    • -d:后台运行容器。
    • --name my_container:为容器指定一个名字,方便管理和访问。
    • ubuntu:latest:使用的镜像名称和标签。
  • 启动已停止的容器

    使用 docker start 启动:

    docker start my_container
    
2.4.2. 进入容器

有时需要进入容器内部进行操作或调试,以下是主要的两种方式:

  • 执行命令行(交互式)

    使用 docker exec 启动新进程:

    docker exec -it my_container bash
    
    • -it:以交互方式启动终端。
  • 附加到终端

    使用 docker attach 连接到容器的标准输入、输出和错误输出,适用于希望与容器主程序交互的场景:

    docker attach my_container
    
    • 这种方法将使您直接连接到运行中的应用程序。
2.4.3. 查看容器日志

查看日志对于调试和监控容器运行非常重要:

  • 命令docker logs

    获取容器输出的日志信息:

    docker logs my_container
    
  • 额外选项

    • --follow (-f):实时跟踪日志输出。
    • --tail:显示末尾若干行。

    如实时查看日志尾部10行:

    docker logs -f --tail 10 my_container
    
2.4.4. 停止与删除容器

对停止和删除容器进行合理管理,可以优化资源使用:

  • 停止容器

    docker stop 安全停止容器,它将发送SIGTERM信号:

    docker stop my_container
    
  • 强制终止容器

    docker kill 强制终止执行,发送SIGKILL信号:

    docker kill my_container
    
  • 删除容器

    删除停止的容器是释放资源的好方法:

    docker rm my_container
    
    • 使用 -f 强制删除正在运行的容器。

熟练掌握这些容器管理指令将让您在Docker的世界中更加游刃有余,实现高效的容器化管理和支持。

当你在一个容器中更新软件和安装必要的插件,并希望将其复制到另一台内网机器上,你可以通过以下几个步骤来实现:

2.5. 容器创建镜像的过程
2.5.1. 通过容器创建新的镜像

在容器上操作完毕后,你需要将其变化保存为一个新的镜像,这样才能在其他机器上重现相同的环境。

  • 提交容器为镜像

    使用 docker commit 将容器的当前状态保存为一个新的镜像:

    docker commit <container_id> <new_image_name>:<tag>
    

    例子:

    docker commit my_container my_updated_image:latest
    
2.5.2. 保存镜像为文件

将创建的新镜像保存为一个可移动的文件,这样可以在其他机器上加载:

  • 保存镜像

    使用 docker save 命令:

    docker save -o my_updated_image.tar my_updated_image:latest
    

    这将生成一个 .tar 文件,包含你镜像的所有数据。

2.5.3. 将镜像文件移动到其他机器

使用任何适合的手段,将生成的.tar文件传输到目标内网机器上,例如:

  • 使用USB驱动器或其他物理介质。
  • 通过内网文件共享服务(如Samba、NFS等)。
  • 使用安全拷贝工具(如 scp 若在内网有SSH可用)。
2.5.4. 在新机器上加载镜像

在接收.tar文件的内网机器上,使用 docker load 命令来恢复你的镜像:

  • 加载镜像

    docker load -i my_updated_image.tar
    

    这将在新机器上将镜像加载到Docker中,并且可以通过 docker images 检查确认该镜像是否存在。

2.5.5. 运行新镜像的容器

在新机器上,从加载的镜像启动一个新的容器。

  • 启动容器

    docker run -d --name new_container my_updated_image:latest
    

这样,您就可以在新的内网环境中使用相同的更新镜像和配置进行操作了。

通过这些步骤,您可以安全高效地在内网环境中部署和共享更新后的Docker镜像,无需依赖外部网络。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件设计师(软考学习)

数据库技术 数据库基础知识 1. 数据库中的简单属性、多值属性、复合属性、派生属性简单属性&#xff1a;指不能够再分解成更小部分的属性&#xff0c;通常是数据表中的一个列。例如学生表中的“学号”、“姓名”等均为简单属性。 多值属性&#xff1a;指一个属性可以有多个值…

【网络原理】面试高频考点!!TCP协议“三次握手,四次挥手”,保姆级详解,建议收藏!

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 通过上篇文章&#xff0c;我们可以得知TCP通过 “确认应答” 和 “超时重传”机制相辅相成&#xff0c;共同构建了 TCP的“可靠传输机制”。而为了保障建立通信和断开通信的可靠性…

解决磁盘负载不均——ElasticSearch 分片分配和路由设置

ES 分片分配&#xff08;Shard Allocation&#xff09;时间点&#xff1a; 初始恢复&#xff08;Initial Recovery&#xff09;副本分配&#xff08;Replica Allocation&#xff09;重平衡&#xff08;Rebalance&#xff09;节点添加或移除 小结&#xff1a; 准备移除节点时&a…

CAN转WiFi模块在仓库系统中应用

CAN转WiFi模块在仓库系统中应用 我们的LCWLAN设备在实际使用中以裸板的形式放在客户的智能总线控制器中&#xff0c;客户的智能总线刀片灯&#xff0c;柔性灯货架&#xff0c;柔性感应钢网柜以及智能电子料架等设备都是接到总线控制器中&#xff0c;然后总控制器通过CAN总线和…

Qt-QSpacerItem布局相关控件(45)

目录 描述 属性 使用 控件小结 描述 使⽤布局管理器的时候,可能需要在控件之间,添加⼀段空⽩.就可以使⽤ QSpacerItem 来表⽰ 属性 width宽度height⾼度hData⽔平⽅向的 sizePolicy • QSizePolicy::Ignored : 忽略控件的尺⼨&#xff0c;不对布局产⽣影响。 • QSizePol…

免费高可用软件

高可用软件是指那些能够提供高可用性、高可靠性的软件&#xff0c;它们在各种应用场景下都能确保系统的稳定运行。以下是四款免费的高可用软件&#xff0c;它们在不同领域都表现出色&#xff0c;能够满足各种高可用性需求。 一、PanguHA PanguHA是一款专为Windows平台设计的双…

贪心算法c++

贪心算法C概述 一、贪心算法的基本概念 贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;又名贪婪法&#xff0c;是一种解决优化问题的常用算法。其基本思想是在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决…

网络通信——OSPF协议(基础篇)

这里基础是因为没有讲解OSPF中的具体算法过程&#xff0c;以及其中很多小细节。后续会更新。 目录 一.OSPF的基础信息 二.认识OSPF中的Router ID 三.OSPF中的三张表 四.OSPF中的度量方法&#xff08;计算开销值&#xff09; 五. OSPF选举DR和BDR&#xff08;就是这个区域…

音视频入门基础:FLV专题(9)——Script Tag简介

一、SCRIPTDATA 根据《video_file_format_spec_v10_1.pdf》第75页到76页&#xff0c;如果某个Tag的Tag header中的TagType值为18&#xff0c;表示该Tag为Script Tag&#xff08;脚本Tag&#xff0c;又称Data Tag、SCRIPTDATA tag&#xff09;。这时如果Filter的值不为1表示未加…

【Android】Jetpack组件之LifeCycle

引言 Lifecycle组件是Android Jetpack架构组件之一&#xff0c;它提供了一种方法来管理Android组件&#xff08;如Activity、Fragment和服务&#xff09;的生命周期。Lifecycle组件帮助你执行与生命周期相关联的操作&#xff0c;确保在适当的时间发生适当的事情&#xff0c;例…

深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)

前言 前几天在看论文&#xff0c;打算复现&#xff0c;论文用到了LSTM&#xff0c;故这一篇文章是小编学LSTM模型的学习笔记&#xff1b;LSTM感觉很复杂&#xff0c;但是结合代码构建神经网络&#xff0c;又感觉还行&#xff1b;本次学习的案例数据来源于GitHub&#xff0c;在…

越差越好?为什么简单反而赢了,这背后究竟有什么秘诀?

你有没有发现,软件界里那些最成功的产品,往往并不是最复杂、最强大的?我们用的很多东西,看起来功能普通,甚至有些粗糙,但就是这样简陋的设计,反而成了市场上的赢家。 也许你玩过Flappy Bird这个游戏:它的设计非常简单,玩家只需要点击屏幕让小鸟飞行,避开管道障碍。游…

Llama 3.2 智能代理开发教程

构建研究代理可能很复杂&#xff0c;但使用 LangChain 和 Ollama&#xff0c;它会变得更加简单和模块化。 在本教程中&#xff0c;我们将向你展示如何基于Llama 3.2创建一个研究代理&#xff0c;该代理可以路由查询、执行网络搜索并使用工作流和 LLM 的组合生成详细响应。最后…

出栈入栈次序匹配

学习栈的过程中&#xff0c;我们一定见过下面两题&#xff0c;在当时我们可能费尽心思才找出不可能的一个出栈序列&#xff0c;但是如果进栈元素很多&#xff0c;那么找出出栈序列时4&#xff0c;头发就要掉光了&#xff01;那么我们是否可以实现一串代码&#xff0c;来帮助我们…

MySQL 篇-深入了解视图、SQL 优化(主键优化、order by 优化、group by 优化、update 优化等)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 SQL 优化 1.1 SQL 优化 - 插入数据 1.2 SQL 优化 - 主键优化 1.2.1 页分裂 1.2.2 页合并 1.2.3 主键设计原则 1.3 SQL 优化 - order by 优化 1.3.1 单字段排序 1.…

重学SpringBoot3-集成Redis(五)之布隆过滤器

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;五&#xff09;之布隆过滤器 1. 什么是布隆过滤器&#xff1f;基本概念适用场景 2. 使用 Redis 实现布隆过滤器项目依赖Redis 配置…

【python实操】python小程序之对象的属性操作

引言 python小程序之对象的属性操作 文章目录 引言一、对象的属性操作1.1 题目1.2 代码1.3 代码解释 二、思考2.1 添加属性2.2 获取属性 一、对象的属性操作 1.1 题目 给对象添加属性 1.2 代码 class Cat:# 在缩进中书写⽅法def eat(self):# self 会⾃动出现,暂不管print(f…

【前端开发入门】前端开发环境配置

目录 引言一、Vscode编辑器安装1. 软件下载2. 软件安装3. 插件安装 二、Nodejs环境安装及版本控制1. 安装内容2. 使用nvm安装2.1 软件下载并安装2.2 nvm基本指令2.3 nvm下载过慢导致超时解决 三、git安装及配置1. 软件下载2. 软件安装3. 基础配置 四、总结 引言 本系列教程旨在…

知识图谱入门——5:Neo4j Desktop安装和使用手册(小白向:Cypher 查询语言:逐步教程!Neo4j 优缺点分析)

Neo4j简介 Neo4j 是一个基于图结构的 NoSQL 数据库&#xff0c;专门用于存储、查询和管理图形数据。它的核心思想是使用节点、关系和属性来描述数据。图数据库非常适合那些需要处理复杂关系的数据集&#xff0c;如社交网络、推荐系统、知识图谱等领域。 与传统的关系型数据库…

【韩顺平Java笔记】第7章:面向对象编程(基础部分)【227-261】

文章目录 227. 重载介绍228. 重载快速入门229. 重载使用细节230. 重载课堂练习1231. 232. 重载课堂练习2,3233. 可变参数使用233.1 基本概念233.2 基本语法233.3 快速入门案例 234. 可变参数细节235. 可变参数练习236. 作用域基本使用237. 作用域使用细节1238. 作用域使用细节2…