Docker详解及使用

文章目录

    • 为什么要用docker
    • 为什么会出现容器
    • Docker 是什么
    • 容器是什么
    • 虚拟化是什么
    • Docker 和 虚拟化的区别
    • Docker 容器有几种在状态
    • 什么是仓库
    • 什么是镜像
    • 什么是容器
    • 仓库、镜像、容器的关系
    • 常用的 Docker 命令
    • 如何把主机的东西拷贝到容器内部
    • 如何让容器随着 Docker 服务启动而自动启动
    • 如何指定容器的端口映射
    • 如何查看官方镜像服务的默认端口是什么
    • 如何修改容器的端口映射
    • 如何指定容器的目录映射
    • 如何修改容器的目录映射
    • 同⼀个宿主机中多个Docker容器之间如何通信?多个宿主机中Docker容器之间如何通信

为什么要用docker

使用 Docker 可以提高开发效率、简化部署流程、提高资源利用率,并且有利于构建现代化的应用架构。因此,许多组织和开发团队选择使用 Docker 来构建、交付和运行他们的应用程序。
使用 Docker 可以为开发人员、运维团队和企业带来多方面的好处:

  1. 跨平台一致性: Docker 容器提供了一种轻量级、可移植的环境,使得应用程序可以在不同的平台上以一致的方式运行。开发人员可以在其本地开发环境中构建和测试容器,然后将其部署到生产环境中,而无需担心环境的差异性导致的兼容性问题。
  2. 快速部署: Docker 容器可以快速启动和停止,几乎没有启动延迟,因此可以大大缩短应用程序的部署时间。开发人员和运维团队可以更快地将新版本的应用程序部署到生产环境中,从而提高交付速度和敏捷性
    一条命令即可将容器启动,而容器启动时一般会将服务或应用一并启动
  3. 资源利用率高: Docker 容器共享主机操作系统的内核,并且可以在同一台主机上运行多个容器,因此可以更有效地利用服务器资源。与传统的虚拟化技术相比,Docker 容器更加轻量级,启动和停止更快,并且更加节省资源。
  4. 环境隔离: 每个 Docker 容器都是独立的、互相隔离的,因此可以避免容器之间的相互干扰和冲突。这使得开发人员可以在同一台主机上运行多个应用程序,而无需担心应用程序之间的依赖关系和冲突。
  5. 持续集成和持续部署(CI/CD): Docker 容器可以与持续集成和持续部署工具(如 Jenkins、GitLab CI 等)集成,从而实现自动化的构建、测试、部署和监控流程。这可以大大提高交付速度和质量,并且降低人为错误的风险。
  6. 微服务架构: Docker 容器可以作为微服务架构的基础,每个容器可以包含一个独立的服务或功能模块。通过将应用程序拆分为多个小型、松耦合的容器,可以实现更灵活、可扩展和可维护的应用程序架构。
  7. 版本控制和协作:Docker 镜像可以存储在仓库中,并且支持版本控制,使得团队成员可以轻松地共享和协作。每个镜像都有唯一的标识符,确保了镜像的版本管理。
  8. 灵活性:Docker 提供了对各种不同类型的应用和服务的支持,可以轻松构建、部署和扩展各种类型的应用程序,从传统的 Web 应用到分布式微服务架构。
  9. 生态系统:Docker 生态系统非常庞大,有大量的官方和社区维护的镜像和工具,可以大大简化开发和部署过程。

为什么会出现容器

为了解决单机部署应用和虚拟化的局限性而诞生

Docker 是什么

是实现容器技术的一种工具
是一个开源的应用容器引擎
使用 C/S 架构模式,通过远程API 来管理
可以打包一个应用及依赖包到一个轻量级、可移植的容器中

容器是什么

对应用软件和依赖包进行标准打包
应用或服务之间相互隔离,但又共享一个 OS
可以打包运行在不同的系统上

虚拟化是什么

可以理解成虚拟机技术
一个主机可以部署多个虚拟机,每个虚拟机又可以部署多个应用
对于主机来说,虚拟机就是一个普通文件
虚拟化的缺点是什么
● 资源占用多:每个虚拟机都是完整的操作系统,需要给它分配大量系统资源
● 冗余步骤多:一个完整的操作系统,一些系统级别的步骤无法避免,比如用户登录
● 启动慢:启动操作系统需要多久,启动虚拟机就要多久

Docker 和 虚拟化的区别

虚拟机:我们传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有⾃⼰的操作系统,虚拟机⼀旦被开启,预分配给他
的资源将全部被占⽤。,每⼀个虚拟机包括应⽤,必要的⼆进制和库,以及⼀个完整的⽤户操作系统。
Docker:容器技术是和我们的宿主机共享硬件资源及操作系统可以实现资源的动态分配。
容器包含应⽤和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在⽤户空间以分离的进程运⾏。
在这里插入图片描述

  1. docker启动快速属于秒级别。虚拟机通常需要⼏分钟去启动。
  2. docker需要的资源更少,docker在操作系统级别进⾏虚拟化,docker容器和内核交互,⼏乎没有性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。;
  3. docker更轻量,docker的架构可以共⽤⼀个内核与共享应⽤程序库,所占内存极⼩。同样的硬件环境,Docker运⾏的镜像数远多于虚拟机数量。对系统的利⽤率⾮常⾼
  4. 与虚拟机相⽐,docker隔离性更弱,docker属于进程之间的隔离,虚拟机可实现系统级别隔离;
  5. 安全性: docker的安全性也更弱。Docker的租户root和宿主机root等同,⼀旦容器内的⽤户从普通⽤户权限提升为root权限,它就直接具备了宿主机的root权限,进⽽可进⾏⽆限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机
    利⽤如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种隔离技术可以防⽌虚拟机突破和彼此交互,⽽容器⾄今还没有任何形式的硬件隔离,这使得容器容易受到攻击。
  6. 可管理性:docker的集中化管理⼯具还不算成熟。各种虚拟化技术都有成熟的管理⼯具,例如VMware vCenter提供完备的虚拟机管理能⼒。
  7. ⾼可⽤和可恢复性:docker对业务的⾼可⽤⽀持是通过快速重新部署实现的。虚拟化具备负载均衡,⾼可⽤,容错,迁移和数据保护等经过⽣产实践检验的成熟保障机制,VMware可承诺虚拟机99.999%⾼可⽤,保证业务连续性。
  8. 快速创建、删除:虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了⽆论是开发、测试、部署都可以节约⼤量时间。
  9. 交付、部署:虚拟机可以通过镜像实现环境交付的⼀致性,但镜像分发⽆法体系化;Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署;

Docker 容器有几种在状态

starting 运行状态
Exited 退出状态
Paused 暂停状态
healthy 健康状态
unhealthy 非健康状态

什么是仓库

存放镜像文件的地方,比如 DockerHub,可以将自己的镜像上传上去
不同镜像可以有不同的标签
主机可以从仓库下载镜像

什么是镜像

创建容器的模板
同一个镜像可以创建多个不同的容器

什么是容器

通过镜像生成的运行实例
不同容器之间是相互隔离,独立运行的
通常一个容器就是一个应用或一个服务,也是我们常说的微服务

仓库、镜像、容器的关系

仓库存放镜像,主机通过仓库下载镜像,通过镜像创建容器

常用的 Docker 命令

docker pull 拉取镜像
docker create 创建容器
docker rm 删除容器
docker ps 列出正在运行的容器列表
docker ps -a 查看所有容器,包括停止的
docker run 创建容器并运行指定命令
docker start 启动容器
docker stop 停止运行容器
docker restart 重启容器
docker rm 删除容器
docker exec 容器执行指定命令
docker rmi 删除镜像
停止和重启容器:
停止容器:docker stop ContainerID(镜像运行的id号)
重启容器:docker restart ContainerID
启动容器:docker start ContainerID
移出容器:docker rm ContainerID
强制停止:docker kill ContainerID
帮助命令
docker version
docker info
docker --help

如何把主机的东西拷贝到容器内部

通过 docker cp 命令即可,还能把容器内部内容拷贝到主机
进入容器的方法有哪些
通过 docker exec 进入容器内部

如何让容器随着 Docker 服务启动而自动启动

创建容器时,加上 --restart=always 参数
创建容器后,通过修改容器配置文件的 RestartPolicy 参数值
创建容器后,使用 docker update 命令更新容器的 --restart 参数值

如何指定容器的端口映射

创建容器时,通过 -p 来指定端口映射
创建容器后,通过修改容器的配置文件来指定端口映射

如何查看官方镜像服务的默认端口是什么

可以通过 docker inspect 查看镜像信息,然后找到端口映射一栏
也可以先用该镜像创建一个容器并运行,通过 docker ps 查看运行端口是什么

如何修改容器的端口映射

删除容器,重新创建容器,并指定端口映射
通过容器配置文件修改端口映射
通过 docker commit 将容器构建为一个全新的镜像,然后再通过该镜像创建新的容器,并指定端口映射

如何指定容器的目录映射

创建容器时,通过 -v 来指定目录映射
创建容器后,通过修改容器的配置文件来指定目录映射

如何修改容器的目录映射

删除容器,重新创建容器,并指定目录映射
通过容器配置文件修改目录映射
通过 docker commit 将容器构建为一个全新的镜像,然后再通过该镜像创建新的容器,并指定目录映射

同⼀个宿主机中多个Docker容器之间如何通信?多个宿主机中Docker容器之间如何通信

这⾥同主机不同容器之间通信主要使⽤Docker桥接(Bridge)模式。
不同主机的容器之间的通信可以借助于 pipework 这个⼯具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双缸黑白箭来袭,3月5日亮相,胡斯瓦纳发布全新车系。

根据国外最新消息,Husqvarna准备在下个月就是3月5日发布全新车系,前段时间刚曝光的新款的401,这突然就来了双缸版本的黑白箭了,之前的401/701全部都是单缸,这也是首台胡斯瓦纳黑白箭的双缸车型。 外观方面仍然采用现代…

自学嵌入式困难吗?

自学嵌入式困难吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#xff01…

阿里云服务器租用价格,2024年新版活动报价明细表

2024年阿里云服务器租用价格表更新,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

产品经理学习-产品运营《社群搭建》

什么是社群 有主题:成员有共同的需求,目标或价值观有组织:有文档的群体结构,是有一群人协作而成的有规则:有门槛和规则玩法 社交、社区、社群的区别 社交: 多数的社交是单点对单点的社交以沉淀关系为目的…

代码随想录算法训练营DAY21 | 二叉树 (9)

一、LeetCode 669 修建二叉搜索树 题目链接:669.修建二叉搜索树https://leetcode.cn/problems/trim-a-binary-search-tree/description/ 思路:递归三部曲-定参数、返回值-定终止条件-定单层递归逻辑 class Solution {public TreeNode trimBST(TreeNode …

沁恒CH32V30X学习笔记09---使用TIM 外部时钟1模式实现硬件计数

TIM 外部时钟1使用 定时器时钟 通过框图可知;外部时钟1模式下仅仅只有通道1 和通道2 可以输入脉冲 简单示例教程 void TIM1_ETRClockMode1_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);TIM_CounterModeConfig(TIM1, TIM_CounterMode_Up)

SwiftUI 更自然地向自定义视图传递参数的“另类”方式

概览 在 SwiftUI 中,正是自定义视图让我们的 App 变得与众不同!然而,除了传统的视图接口定义方式以外,我们其实还可以有更“银杏化”的选择。 如上图所示:对于 SubView 子视图所需的参数我们一开始并没有操之过急&…

MySQL的备份与恢复案例

新建数据库 数据库备份,数据库为school,素材如下1.创建student和score表CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address…

可视化视频监控平台EasyCVR如何配置服务参数以免getbaseconfig接口信息泄露?

可视化云监控平台/安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,平台支持高清视频的接入和传输、分发,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集…

Codeforces Beta Round 15 C. Industrial Nim Nim,1~n的异或和

Problem - 15C - Codeforces 目录 Nim游戏: 1~n的异或和: 代码: Nim游戏: n个石头堆,谁最后没得取谁败 我用的异或思考法,对所有堆异或。开局异或和为0的败 最后全是0,异或完也是0. //最…

强化学习(没想好叫什么)

on policy(同策略学习) ①:数据来源:同策略学习方法使用当前正在执行的政策产生的数据来更新该策略。意味着用于训练的数据必须是由当前撤了选择的行为所产生的。 ②实时学习:由于它使用当前策略的数据,因…

如何在Excel中冻结行或列标题?这里提供两种方法

随着数据的增长,许多Excel工作表可能会变得很大,因此冻结行和列标题或冻结窗格非常有用,以便在滚动工作表时将标题锁定到位。在Excel中,可以冻结行标题和列标题,也可以只冻结一个。这不会影响将要打印的单元格。列标题…

Halcon中打开摄像机

(带货广告:需要该套测试设备或者工业相机的及其相关产品的,请私聊我) 1、相机说明 使用Basler相机, 2、打开Halcon助手 3、检测相机 4、连接摄像机和采集画面 5、自动生成代码 生成代码后,保存工程到本…

力扣题目训练(16)

2024年2月9日力扣题目训练 2024年2月9日力扣题目训练530. 二叉搜索树的最小绝对差541. 反转字符串 II543. 二叉树的直径238. 除自身以外数组的乘积240. 搜索二维矩阵 II124. 二叉树中的最大路径和 2024年2月9日力扣题目训练 2024年2月9日第十六天编程训练,今天主要…

机器学习入门--门控循环单元(GRU)原理与实践

GRU模型 随着深度学习领域的快速发展,循环神经网络(RNN)已成为自然语言处理(NLP)等领域中常用的模型之一。但是,在RNN中,如果时间步数较大,会导致梯度消失或爆炸的问题,…

公寓报修|公寓报修管理系统|基于springboot公寓报修管理系统设计与实现(源码+数据库+文档)

公寓报修管理系统目录 目录 基于springboot公寓报修管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、住户管理 2、房间管理 3、维修人员管理 4、维修分类管理 5、物品信息管理 6、维修申请管理管理 四、数据库设计 1、实体ER图 五、核心代码 六、…

Vue3快速上手(九)计算属性computed

一、应用场景 vue3里强调尽量让<template>,也就是模版&#xff0c;变得更加简单。所以涉及到转换、计算等操作的&#xff0c;还是建议在<script>标签里进行。如此我们可以用到computed。 二、实际用法 2.1 示例1 一个简单的加法计算 <template><div …

6.2 数据库

本节介绍Android的数据库存储方式--SQLite的使用方法&#xff0c;包括&#xff1a;SQLite用到了哪些SQL语法&#xff0c;如何使用数据库管理操纵SQLitem&#xff0c;如何使用数据库帮助器简化数据库操作&#xff0c;以及如何利用SQLite改进登录页面的记住密码功能。 6.2.1 SQ…

深度学习——概念引入

深度学习 深度学习简介深度学习分类根据网络结构划分&#xff1a;循环神经网络卷积神经网络 根据学习方式划分&#xff1a;监督学习无监督学习半监督学习 根据应用领域划分&#xff1a;计算机视觉自然语言处理语音识别生物信息学 深度学习简介 深度学习&#xff08;Deep Learni…

将Windows电脑右下角的“中”字或“英”字输入法状态隐藏的方法

本文介绍在Windows 11操作系统中&#xff0c;将任务栏右下角的语言栏的“中”、“英”标识加以隐藏、消除的一种或许可行的方法。 最近换了新电脑&#xff0c;终于用上了Windows 11操作系统。但是&#xff0c;默认状态下&#xff0c;在任务栏最右侧&#xff0c;也就是屏幕右下角…