【Docker】01-Centos安装、简单使用

参考教程:
https://www.bilibili.com/video/BV1Qa4y1t7YH/?p=5&spm_id_from=pageDriver&vd_source=4964ba5015a16eb57d0ac13401b0fe77

什么是Docker?

Docker是一种开源的容器化平台,用于构建、打包、部署和运行应用程序。它通过使用容器来实现应用程序的隔离和轻量级虚拟化,使应用程序能够在不同的环境中以一致的方式运行。

容器是一种轻量级的虚拟化技术,它将应用程序及其所有依赖项(如库、运行时环境等)打包到一个独立的可执行单元中,称为容器。每个容器都是相互隔离的,可以在同一台主机上同时运行多个容器,而它们之间不会相互干扰。这种隔离性使得容器可以在不同的操作系统、服务器或云平台上运行,而无需担心环境差异或依赖冲突的问题。

Docker的优势

Docker 的优势主要体现在以下几个方面:

  1. 快速部署和扩展:Docker 可以快速创建、启动和停止容器,使应用程序的部署变得非常高效。容器化应用程序可以在几秒钟内启动,相比于传统的虚拟机,启动时间更短。此外,Docker 还支持自动化的扩展,可以根据负载情况自动调整容器的数量,提供更好的可伸缩性。

  2. 资源利用率高:Docker 利用操作系统级别的虚拟化技术,可以在同一台主机上运行多个容器,且容器之间相互隔离。这种轻量级的虚拟化方式使得容器的资源占用更少,相比于传统虚拟机,可以更高效地利用服务器的资源。

  3. 环境一致性:Docker 提供了一种标准化的容器化环境,使应用程序可以在不同的环境中以一致的方式运行。开发人员可以在本地开发环境中构建和测试容器,然后将其部署到生产环境中,无需担心环境差异导致的问题。这种环境一致性有助于减少开发、测试和部署过程中的错误和不一致性。

  4. 简化依赖管理:Docker 将应用程序及其依赖项打包到一个独立的容器中,可以确保应用程序所需的所有依赖项都被正确安装和配置。这简化了应用程序的依赖管理,避免了依赖冲突和版本不一致的问题。

  5. 持续集成和持续部署:Docker 可以与持续集成和持续部署工具集成,如 Jenkins、GitLab CI、Travis CI 等。通过使用容器化的构建和部署流程,可以实现自动化的测试、构建和部署,提高交付速度和质量。

总的来说,Docker 提供了一种轻量级、快速、可移植和可扩展的应用程序交付和部署解决方案。它简化了应用程序的部署和管理过程,提高了开发和运维的效率,同时提供了更好的资源利用率和环境一致性。

Docker与虚拟机的区别

在这里插入图片描述
在这里插入图片描述
比较上面两张图,我们发现虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨量。Docker是不携带操作系统的,所以Docker的应用就非常的轻巧。另外在调用宿主机的CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用Hypervisor去虚拟化内存,整个调用过程是虚拟内存>虚拟物理内存>真正物理内存,但是Docker是利用Docker Engine去调用宿主的的资源,这时候过程是虚拟内存>真正物理内存。

Docker的核心

在这里插入图片描述

  • 镜像:一个镜像代表一个应用环境,他是一个只读的文件,如 mysql镜像,tomcat镜像,nginx镜像等
  • 容器:镜像每次运行之后就是产生一个容器,就是正在运行的镜像,特点就是可读可写
  • 仓库:用来存放镜像的位置,类似于maven仓库也是镜像下载和上传的位置
  • dockerFile: docker生成镜像配置文件用来书写自定义镜像的一些配置
  • tar:一个对镜像打包的文件,日后可以还原成镜像

什么是镜像

  • 镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的富案件,它包含运行某个软件所需的所有内容,包括代码、运行时所需的库、环境变量和配置文件。
  • 为什么镜像这么大?
    docker在管理所有镜像的时候,是有一个层级结构的,镜像的内部会依赖多个层级,在拉取新的镜像时,如果已经存在需要的层级依赖,则不需要重新再拉一次所存在的层级依赖。
    这个所谓的层级依赖,叫UnionFS(联合文件系统)

Union文件系统是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。这种文件系统特性:就是一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

  • docker镜像原理
    docker的镜像实际是由一层一层的文件系统组成
  • boots(boot le system)主要包含bootoader和kemnel,bootoader主要是引导加载kernel,Linux刚启动时会加载ots文件系统。在doker请像的最底层就是boots。这一层与Linux/Unix 系统是一样的,包含bt加载器bootloader)和内核kerne)。当bt加载完后,整个内核就都在内存中了,此时内存的使用权已由bootis转交给内核,此时会卸载bootfs。
  • roots(rootfile system),在boots之上,包含的就是典型的iux系统中的/dev,/prot,/bin,/et等标准的目录和文件。rootis就是各种不同的操作系统发行版,比如Ubuntu/Centos等等。
  • 我们平时安装进虚拟机的entos都有1到几个GB,为什么docker这里才20MB?对于一个精简的OS,roots可以很小,只需要包括最基本的命令,工具,和程序库就可以了,因为底层直接使用Ho的Kemnal,自己只需要提供rotfs就行了。由此可见不同的lnux发行版,他们的botis是一致的,rootis会有差别,因此不同的发行版可以共用bootfs
  • 为什么docker镜像采用分层结构
    资源共享

比如:有多个镜像都是从相同的base镜像构津而来的,那么宿主机只需在磁盘中保存一份base镜像。同时内存中也只需要加载一份base镜像。就可以为所有容器服务了。而且镜像的每一层都可以被共享。Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称为容器层,容器层之下都叫镜像层。

安装Docker(centos 7.x环境)

1、卸载已经安转的docker(如果是新环境则不需要)

sudo yum remove docker \docker-client \docker-client-latest docker-common \docker-latest \docker-latest-logrotate \docker-logrotate  \docker-engine \

2、安装yum源

sudo yum install -y yum-utils
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker

sudo yum install docker-ce docker-ce-cli containerd.io

4、安装完毕

  • 启动docker
    sudo systemctl start docker
  • 查看启动状态
    `sudo systemctl status docker``
  • 关闭docker
    sudo systemctl stop docker
  • 测试docker安装
    sudo docker run hello-world

配置Docker阿里云镜像加速服务

在这里插入图片描述
1、配置镜像地址

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://tz3lwh5e.mirror.aliyuncs.com"]
}
EOF

2、重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

3、查看是否配置成功
docker info

image 镜像命令

  • 查看本机存在的镜像
    docker images
  • 搜索镜像
    docker search [镜像名]

如果发现运行这个命令报错了:
Error response from daemon: Get "https://index.docker.io/v1/search?q=nginx&n=25": dial tcp: lookup index.docker.io on 192.168.43.1:53: read udp 192.168.188.131:60570->192.168.43.1:53: i/o timeout
说明是DNS的配置有问题,可以通过以下的方式解决:
1、修改 resolv.conf文件里的域名(你本机的DNS或者是其他的DNS)
vi /etc/resolv.conf
内容:
search localdomain
nameserver 192.168.43.1 #你本机的DNS
nameserver 8.8.8.8 #其他DNS
2、让resolv.conf只读,不可修改,否则重启网络之后,修改的内容会被覆盖掉
chattr +i /etc/resolv.conf
3、重启网络
systemctl restart network

  • 拉取镜像
    docker pull [镜像名]
  • 删除镜像
    docker rmi [镜像名]
    -f 强制删除

容器命令

  • 运行容器
    docker run [镜像名]
    --name 别名为容器起一个名字
    -d 启动守护式容器(在后台启动容器)
    -p 映射端口号:原始端口号指定端口号启动
    例如:
    docker run -it --name myTomcat -p 8888:8080 tomcat
    docker run -d --name myTomcat -P tomcat

  • 查看运行的容器
    docker ps
    -a 正在运行的和历史运行过的容器
    -q 静默模式,只显示容器编号

  • 停止|关闭|重启容器
    docker start 容器名字或者容器id ---------- 开启容器
    docker restart 容器名或者容器id ---------- 重启容器
    docker stop 容器名或者容器id ---------- 正常停止容器运行
    docker kill 容器名或者容器id ---------- 立即停止容器运行

  • 删除容器
    docker rm -f 容器id或容器名
    docker rm -f $(docker ps -aq) ---------- 删除所有容器

  • 查看容器内进程
    docker top 容器id或容器名 ---------- 查看容器内的进程

  • 查看容器内部细节
    docker inspect 容器id ---------- 查看容器内部细节

  • 查看容器的运行日志
    docker logs [OPTIONS] 容器id或容器名 ---------- 查看容器日志
    -t 加入时间戳
    -f 跟随最新的日志打印
    --tail 数字 显示最后多少条

容器内数据交互

centos —> docker(引擎) —> nginx(容器内部)

  • 进入容器内部
    docker exec [options] 容器id 容器内命令 ---------- 进入容器执行命令
    -i 以交互模式运行容器,通常与 -t 一起使用
    -t 分配一个伪终端

  • 容器内安装软件
    apt-get update
    apt-get install 安装包名称

  • 退出容器
    exit

  • 将容器打包为新的镜像
    docket commit -a="作者" -m="描述信息 容器id 目标镜像名称:TAG"

  • 从容器中复制文件到宿主机目录中
    docker cp 容器id:容器内资源路径 宿主机目录路径

  • 设置容器和宿主机共享目录
    docker run -it -v /宿主机的路径:/容器内的路径:ro(只读) 镜像名 ------------ 宿主机的目录不存在就会创建
    注意:宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
    运行docker inspect 容器id 命令 检查json串里有没有以下内容,如果有则证明卷挂载成功

"Mounts": [{"Type": "bind","Source": "/root/home","Destination": "/uer/share/nginx/html","Mode": "","RW": true,"Propagation": "rprivate"}],
  • 打包镜像
    docker save 镜像名 -o 名称.tar

  • 载入镜像
    docker load -i 名称.tar

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

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

相关文章

Java面向对象

目录 1. 对象简介 2. this关键字 3. 构造器&#xff08;构造方法&#xff09; 4. 封装性 5. 实体类JavaBean 6. 静态&#xff08;static&#xff09; 7. 工具类 8. 继承 9. 权限修饰符 10. 方法重写 11. this和super的用法总结&#xff1a; 12. 多态 13. final关键…

Midjourney学习(二)参数的基础

prompt的组成 prompt 可以由三部分组成&#xff0c; 第一部分是垫图部分&#xff0c;也就是一张网络图片 第二部分是文本描述内容 第三部分则是参数 参数列表 --aspect <value> 或者 --ar <value> 控制画面的比例&#xff0c;横竖比例 --version <value> -…

centos安装MySQL 解压版完整教程(按步骤傻瓜式安装

一、卸载系统自带的 Mariadb 查看&#xff1a; rpm -qa|grep mariadb 卸载&#xff1a; rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 二、卸载 etc 目录下的 my.cnf 文件 rm -rf /etc/my.cnf 三、检查MySQL是否存在 有则先删除 #卸载mysql服务以及删除所有mysql目录 #没…

day-05 TCP半关闭 ----- DNS ----- 套接字的选项

一、优雅的断开套接字连接 之前套接字的断开都是单方面的。 &#xff08;一&#xff09;基于TCP的半关闭 Linux的close函数和windows的closesocket函数意味着完全断开连接。完全断开不仅不能发送数据&#xff0c;从而也不能接收数据。在某些情况下&#xff0c;通信双方的某一方…

【CSS左右上角斜标签】CSS实现左右上角飘带功能,左右上角斜标签(附源码)

文章目录 写在前面涉及知识点实现效果1、实现过程1.1左上角飘带Html代码Css代码效果 1.2右上角飘带Html代码Css代码效果 2、源码分享2.1 百度网盘2.2 123网盘2.3 邮箱留言 总结 写在前面 其实在公司页面开发过程就遇到过&#xff0c;需要在方块右上角展示一个斜的文字或者告警…

windows系统配置tcp最大连接数

打开注册表 运行->regedit HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目录下 增加一个MaxUserPort&#xff08;默认值是5000&#xff0c;端口范围是1025至5000&#xff09;MaxUserPort设置为65534&#xff08;需重启服务器&#xff09; 执行dos命令&…

第三方软件检测机构有哪些资质,2023年软件测评公司推荐

软件第三方测试报告 伴随着软件行业的蓬勃发展&#xff0c;软件测试也迎来了热潮&#xff0c;但是国内的软件测试行业存在着测试入行门槛低、测试投入少、测试人员专业性不足等问题&#xff0c;这些问题不但会阻碍软件测试行业的良性发展&#xff0c;而且难以保证软件产品的质…

算法---二叉树中的最大路径和

题目 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root &…

Linux通信--构建进程通信System-V 消息队列|信号量

文章目录 目录 一、消息队列 二、信号量 1.互斥 2.信号量 一、消息队列 消息队列提供了从一个进程向另一个进程发送数据块的方法每个数据块都被认为是有一个类型&#xff0c;接收者进程接收的数据块可以有不同的类型值IPC资源必须删除&#xff0c;不会随进程自动清楚&#…

系统架构设计高级技能 · 大数据架构设计理论与实践

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;二&#xff09;【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

【Java从0到1学习】13 Java IO流

1. 流 1.1 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中&#xff0c;管道是一条不间断的字节流&#xff0c;用来实现程序或进程间的通信&#xff0c;或读写外围设备、外部文件等。 一个流&#xff0c;必有源端和目的端&#xff0c;它们可以是计算机内存的…

【全面讲解】CPU缓存一致性:从理论到实战(上)

本文从 CPU、缓存、内存屏障、CAS到原子操作&#xff0c;再到无锁实践&#xff0c;逐一详细介绍。 01存储体系结构 速度快的存储硬件成本高、容量小&#xff0c;速度慢的成本低、容量大。为了权衡成本和速度&#xff0c;计算机存储分了很多层次&#xff0c;扬长避短&#xff…

4.5 TCP优化

TCP 三次握手的性能提升 三次握手的过程在一个 HTTP 请求的平均时间占比 10% 以上&#xff0c;所以要正确使用三次握手的中参数&#xff0c;需要先用netstat命令查看是哪个握手阶段出了问题&#xff0c;主动发起连接的客户端优化相对简单些&#xff0c;而服务端需要监听端口&a…

Omni Recover for Mac(专业的iPhone数据恢复软件)

Omni Recover for Mac是一款专业的Mac数据恢复软件&#xff0c;能够帮助用户快速找回被误删除、格式化、病毒攻击等原因造成的文件和数据&#xff0c;包括图片、视频、音频、文档、邮件、应用程序等。同时&#xff0c;Omni Recover for Mac还具有数据备份和清理功能&#xff0c…

如何写一个外设驱动?

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

【单片机】UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡、1-WIRE、Ethernet等常见通信方式

在单片机开发中&#xff0c;UART、I2C、RS485等普遍在用&#xff0c;这里做一个简单的介绍 UART通用异步收发器 UART口指的是一种物理接口形式(硬件)。 UART是异步&#xff08;指不使用时钟同步&#xff0c;依靠帧长进行判断&#xff09;&#xff0c;全双工&#xff08;收发…

【面试专题】Spring篇①

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;Java面试专题 目录 1.你知道 Spring 框架中有哪些重要的模块吗&#xff1f; 2. 谈谈你对 IOC 的认识。 3. 谈谈你对 AOP 的认识。 4.在实际写代码时&#xff0c;有没有用到过 AOP&#xff1f;用…

iOS开发Swift-1-Xcode创建项目

1.创建项目 双击Xcode App&#xff0c;选择Create a new Xcode project。 选择创建一个iOS普通的App项目。选择Single View App&#xff0c;点击Next。 填写项目名&#xff0c;组织名称等&#xff0c;点击next。 选择好文件的存储路径&#xff0c;点击create。 2.为前端添加组件…

学习笔记|认识数码管|控制原理|数码管实现0-9的显示|段码跟位码|STC32G单片机视频开发教程(冲哥)|第九集:数码管静态显示

文章目录 1.认识数码管2.控制原理十进制转换为任意进制其它进制转十进制 3.数码管实现0-9的显示1.用数组定义0-9的内码段码跟位码的区别2.尝试用延时实现0-9的循环显示3.用按键控制数字的加或者减。 总结课后练习&#xff1a; 1.认识数码管 数码管按段数可分为七段数码管和八段…

leetcode189. 轮转数组

题目&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例&#xff1a; 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2…