Docker: 改变容器化世界的革命性技术

目录

1.1什么是虚拟化

1.2什么是Docker

1.3容器与虚拟机的比较

1.4Docker组建

2、Docker安装

2.2设置ustc的镜像

2.3Docker的启动与停止

3、docker常用命令

3.1镜像

3.2容器相关命令


1.1什么是虚拟化

在计算机中,虚拟化(Vitualization)是一种资源管理技术,是将计算机的各种实体资源,比如服务器、网络、内存及存储等,予以抽象,转换后呈现出来,打破实体结构间的不可分割的障碍,使用户可以比原来的组态更好的方式来用用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或者物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(VIP)、桌面虚拟化、服务虚拟化、虚拟机等。

1.2什么是Docker

Docker是一个开源项目,诞生于2013年初,最初是doCloud公司内部的一个业余项目。它基于Google公司退出的Go语言实现的。项目后来加入了Linux基金会,遵循了Apache2.0协议。

 

为什么选择Docker

  • 更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件的存储速度,都是比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

  • 更快速的启动事件

传统的虚拟机技术启动应用服务往往虚拟需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级。甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间

  • 一致的运行环境

开发环境中一个常见的问题是环境的一致性问题,由于开发环境、测试环境、生产环境不一致,导致有些Bug并未在开发过程中被发现,而Docker的镜像提供了除了内核外完整的运行时环境,确保了应用运行环境的一致性,从而不会再出现[这段代码在我的机器上运行没有问题]这类的问题!

  • 持续交付和部署

对于开发和运维(DevOps)人员来说,最希望的就是一次创建或者配置,可以在任意地方正常运行。

使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像的构建,并且结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速的部署该镜像,甚至结合持续部署系统进行自动部署。

而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运维所需条件,帮助更好的生产环境部署该镜像。

  • 更轻松的迁移

    由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机还是虚拟机、公有云。私有云。甚至是笔记本,其运行结果是一致性的。因此用户可以很轻松的将在一个平台上运行的应用,迁移到另外一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况

  • 更轻松的维护和扩展

Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更加的容易,也使得应用的维护更新变得更加简单,基于基础镜像进一步扩展镜像也变得非常简单,此外,Docker团队各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境中使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

1.3容器与虚拟机的比较

下面的图片Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统的方式则是在硬件层面实现的。

与传统的虚拟机相比,Docker优势体现在启动速度快、占用体积小

特性容器虚拟机
启动秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生弱于
系统支持量单机支持上千个容器一般为几十个

1.4Docker组建

1.4.1Docker服务器与客户端

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker也提供了一个命令行工具Docker以及一整套RESful API。亦可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到另外一台宿主机的远程Docker守护进程

1.4.2Docker镜像与容器

镜像是架构Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步的构建出来的:例如:

  • 添加一个文件;

  • 执行一个命令;

  • 打开一个窗口;

也可以将镜像当做容器的“源代码”。镜像体积很小,非常“便携”,抑郁分享、存储和更新。

Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。

和集装箱一样,Docker在执行上述操作时,并不会关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。

Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Refistry,然后下载到另一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中,像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。

1.4.3Registry(注册中心)

Docker用Registry来保存用户构建的镜像。Registry分为共有和私有两种。Docker公司运行公共的Refistry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并且保存自己的镜像(在Docker HUb 下载镜像巨慢,可以自己构建私有的Registry)。

2、Docker安装

Docker官方建议在ubuntu1中安装,因为Dock而是基于Ubuntu发布的,而且一般Docker出现问题Ubuntu是最先更新或者打补丁的,在很多版本的center os中是不支持更新最新的一些补丁包的。

1、yum包更新到最新

yum update 

2、安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemappper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2

3、设置yum源为阿里云

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安装docker

yum install -y docker-ce

5、查看是否安装成功

[root@centos7 ~]# docker -v
Docker version 24.0.2, build cb74dfc

2.2设置ustc的镜像

ustc是老牌的linux镜像服务提供者了,还在遥远的utuntu5.04版本的时候就在用,ustc的docker镜像加速器速度很快。ustc docker mirrror的优势之一就是不需要注册,是真正的公共服务。

http://lug.ustc.edu/wiki/mirrors/help/docker

编辑该文件

[root@centos7 ~]# mkdir -p /etc/docker/
[root@centos7 ~]# vim /etc/docker/daemon.json

在文件中输入如下内容

{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}

2.3Docker的启动与停止

启动docker:

systemctl start docker

停止docker:

systemctl stop docker.socket 

查看docker运行状态

systemctl status docker

设置docker开机自启:

systemctl enable docker

3、docker常用命令

3.1镜像

查看镜像:

docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

搜索镜像:

docker search php

拉取镜像:

docker pull centos:7

删除镜像:

docker rmi 镜像id

3.2容器相关命令

3.2.1查看容器

查看正在运行的容器:

[root@centos7 ~]# docker ps

查看所有容器:

[root@centos7 ~]# docker ps -a

3.2.2创建与启动容器

创建容器命令

docker run

-i:表示运行容器

-t:表示容器启动后会进入其命令行,加入这两个参数后,容器创建爱你就能登录进去。即分配一个伪终端。

--name:为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者为映射到宿主机上的目录),可以使用多个v做多个目录或者文件映射。

注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上一个-d参数,则会创建一个守护式容器在后台运行(这样创建容器后就不会自动登录容器,如果只加-i,-t两个参数,创建后就会自动进入到容器中)。

-p:表示端口映射,前者是宿主主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

1、交互式方式创建容器

docker run -it --name=mycentos centos:7 /bin/bash

2、守护式方式创建容器

docker run -di --name=mycentos2 centos:7

登录容器:

docker exec  -it mycentos2 /bin/bash

停止容器:

docker stop f7f6b0dbd985

启动容器

docker start mycentos2
mycentos2
​

3.2.3容器的文件操作

将宿主机中的文件拷贝到容器中:

docker cp anaconda-ks.cfg mycentos2:/usr/local
Successfully copied 3.58kB to mycentos2:/usr/local

进入mycentos容器中进行查看:

docker exec  -it mycentos2 /bin/bash
​
ls
anaconda-post.log

将容器中的文件拷贝到宿主机中

docker cp mycentos2:/usr/local/anaconda-ks.cfg anaconda-ks2.cfg
Successfully copied 3.58kB to /root/anaconda-ks2.cfg

3.2.4目录挂载

创建一个新的容器:

[root@centos7 ~]# docker run  -di -v /usr/local/mydata/:/usr/local/mydata --name=mycentos3 centos:7
cd0247073e3ff747fd68ada87a26e432f77446b069bea84cbe94109f63a69182

在该目录下创建文件:

vim /usr/local/mydata/test
写入内容:abcddd

进入mycentos中查看:

docker exec  -it mycentos3 /bin/bash
cd /usr/local/mydata/
cat test
abcddd

3.2.5查看容器IP地址

查看容器的全部信息:

docker inspect mycentos3

查看指定信息:

docker rm cd0247073e3f
cd0247073e3f

删除某容器:

docker rm cd0247073e3f
cd0247073e3f

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

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

相关文章

如何从一个仪表盘管理多个WordPress网站?

您是否正在寻找一种管理多个WordPress网站的简单方法? 监控多个网站并使其保持更新可能非常耗时。 幸运的是,有几种 WordPress 管理工具可以让您从单个仪表板管理多个 WordPress 网站变得非常容易。这将帮助您节省大量时间,同时使所有 Word…

赋能智能智造-RK3568智能主板助力机器人产业高速发展

机器人作为现代制造业的重要一环,正在以惊人的速度推动着生产效率和智能化水平的提升,它们在生产线上的准确操作和高效工作,为企业带来了巨大的竞争优势。关于工业机器人的编程和控制技术,在过去几年中已经有了很多发展和新的应用…

Coggle 30 Days of ML(23年7月)任务九:学会Bert基础,transformer库基础使用

Coggle 30 Days of ML(23年7月)任务九:学会Bert基础,transformer库基础使用 任务九:学会Bert基础,transformer库基础使用 说明:在这个任务中,你将学习Bert模型的基础知识&#xff…

【安全】Xsslabs(1~13)基于白盒测试浅析

目录 环境 关卡 level 1 level 2 level 3 level 4 level 5 level 6 level 7 level 8 扩展 level 9 level 10 level 11 level 12 level 13 总结 环境 PHP:php7.3.4nts 中间件:Nginx1.15.11 工具:Hackbar 关卡 level …

计网简答题

答案不保证正确性,仅供参考。 1.有如图所示的以太网,每个交换机的名字及接口号、主机的名字及MAC地址都标明在图中。网络初启动时,两个交换机的转发表都为空,接着先后进行以下MAC帧传输:H1→H5,H3→H2&…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试【2】

上一篇 SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试_hkNaruto的博客-CSDN博客 虚拟机时间,一天后获得结果 由于ssh版本太低,采用nc把文件拷贝出来 结果 SPEC CFP2006 Result Copyright 2006-2023 Standard Performance Evaluation Corporatio…

vue3+cesium项目搭建

前言 最近需要在一个Vue3的项目中使用到cesium,对于一个cesium没有太多了解的人来说,还是比较麻烦的,本篇博文就将自己在这个过程踩的坑记录下来,有需要的可以看一下 1、vuecesium框架搭建 2、项目运行起来后,球体不…

IP协议【图解TCP/IP(笔记九)】

文章目录 IP即网际协议IP相当于OSI参考模型的第3层网络层与数据链路层的关系 IP基础知识IP地址属于网络层地址路由控制■ 发送数据至最终目标地址■ 路由控制表 数据链路的抽象化IP属于面向无连接型 IP即网际协议 TCP/IP的心脏是互联网层。这一层主要由IP(Internet…

【MySQL系列】在Centos7环境安装MySQL

「前言」文章内容大致是在Centos7环境安装MySQL,演示安装的版本为5.7 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 浮生梦,三生渺渺, 因缘无踪,虽堪恋,何必…

uniapp 微信小程序导航功能(从地址列表内点击某一个地址)

效果图&#xff1a; <template><view class"user"><view class"list"><view class"title">地址列表</view><view class"title-label"><view>名称</view><view>距离&#xff…

如何做好大客户管理?一文讲清方法、策略、案例

《连线》杂志创始人凯文凯利&#xff08;Kevin Kelly&#xff09;在《技术元素》一书中写道&#xff1a;“数量不是目的&#xff0c;质量才是根本&#xff0c;重视1%的超级用户才是提高效率的关键。” 根据“二八定律”&#xff0c;通常20%的大客户会带来80%的项目和收益。这点…

react 利用antd-mobile实现楼层效果

首先是js模块 import React, { useEffect, useRef, useState } from react import { SideBar } from antd-mobile import ./louceng.css import { useThrottleFn } from ahooksconst items [{ key: 1, title: 第一项, text: <div>12313212313第一项12313212313第一项1…

Python 运算符(一)

文章目录 前言什么是运算符&#xff1f;Python算术运算符Python比较运算符Python赋值运算符Python位运算符 前言 Python 运算符是用于执行各种运算的符号。Python 支持各种类型的运算符&#xff0c;包括算术运算符、比较运算符、逻辑运算符等。在使用 Python 进行编程时&#…

qt 闹钟实现

实现一个闹钟 自定义时间 按下开始后 开始计时&#xff0c;结束计时会播报语音 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> #include <QTimerEvent> #include <QDateTime> #include <QTime> #include …

【LittleXi】 N-gram模型(C++实现)

LittleXi N-gram模型&#xff08;C实现&#xff09;马尔科夫性 (独立性假设)代码实现英文训练版本中文训练版本 训练效果 N-gram模型&#xff08;C实现&#xff09; 定义&#xff1a;通俗地讲&#xff0c;就是利用前文的单词&#xff0c;来推算下一个最大概率出现的单词 马尔…

springboot超市进销存系统

本次设计任务是要设计一个超市进销存系统&#xff0c;通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括&#xff1a;首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、 商品信息管理、采购信…

Elasticsearch 8.8.1安装及启动

华为云的镜像去下载 ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?CN&OD logstash: https://mirrors.huaweicloud.com/logstash/?CN&OD kibana: https://mirrors.huaweicloud.com/kibana/?CN&OD 原文链接&#xff1a;https://blog.csdn.ne…

2022前端趋势报告(下)

前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 一、前言 本文内容来自于《St…

RocketMQ5.0消息消费<二> _ 消息队列负载均衡机制

RocketMQ5.0消息消费&#xff1c;二&#xff1e; _ 消息队列负载均衡机制 一、消费队列负载均衡概览 RocketMQ默认一个主题下有4个消费队列&#xff0c;集群模式下同一消费组内要求每个消费队列在同一时刻只能被一个消费者消费。那么集群模式下多个消费者是如何负载主题的多个…

阿里云绑定域名

在阿里云安全组与宝塔安全放开8081端口 server {listen 8081;server_name www.whxyyds.top;charset utf-8;location / {root /home/ruoyi/projects/ruoyi-ui;try_files $uri $uri/ /index.html;index index.html index.htm;}location /prod-api/ {proxy_set_header …