Docker | 核心概念科普 + 保姆级部署

目录

前言:

[一 Docker简介及部署方法](#一 Docker简介及部署方法)

[1.1 Docker简介](#1.1 Docker简介)

[1.1.1 什么是docker?](#1.1.1 什么是docker?)

[1. 轻量级虚拟化](#1. 轻量级虚拟化)

[2. 一致性](#2. 一致性)

[3. 可移植性](#3. 可移植性)

[4. 高效的资源利用:](#4. 高效的资源利用:)

[5. 易于部署和扩展:](#5. 易于部署和扩展:)

[1.1.2 docker在企业中的应用场景](#1.1.2 docker在企业中的应用场景)

[1.1.3 docker与虚拟化的对比](#1.1.3 docker与虚拟化的对比)

[1.1.4 docker的优势](#1.1.4 docker的优势)

[2 部署docker](#2 部署docker)

[2.1 容器工作方法](#2.1 容器工作方法)

[2.2 部署第一个容器](#2.2 部署第一个容器)

[2.2.1 配置软件仓库](#2.2.1 配置软件仓库)

第二部分:刷新软件缓存

[第三部分:搜索 Docker(验证仓库)](#第三部分:搜索 Docker(验证仓库))

[第四部分:正式安装 Docker](#第四部分:正式安装 Docker)

[第五部分:修改 Docker 启动配置(关键!)](#第五部分:修改 Docker 启动配置(关键!))

第六部分:加载网络内核模块

第七部分:调整系统网络参数(核心!)

[第八部分:启动 Docker 并设置开机自启](#第八部分:启动 Docker 并设置开机自启)


前言:

裸金属时代,维护时,横向拓展非常困难,重复;

2006年的虚拟化时代, 模拟硬件,安装操作系统;VMware; 里面的软件,redis,都是独立的,需要单独安装make;占用浪费; 一台主机可以部署多个操作系统, 裸金属减少,耗电量减少,低碳环保; 对于系统的依赖很严重;

企业中的能源开销。阿里一天的耗电量,服务器;是西安一周的耗电量;

容器,目录,装程序等,有的可以共用

一 Docker简介及部署方法

1.1 Docker简介

Docker之父Solomon Hykes:Docker就好比传统的货运集装箱

2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差

docker2013年首次发布,由Docker, Inc开发

1.1.1 什么是docker?

Docker是管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术

它具有以下几个重要特点和优势:

1. 轻量级虚拟化

:Docker 容器相较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省系统资源。

例如,启动一个 Docker 容器可能只需要几秒钟,而启动一个虚拟机则可能需要几分钟。

2. 一致性

:确保应用程序在不同的环境中(如开发、测试、生产)具有一致的运行表现。

无论在本地还是云端,应用的运行环境都能保持相同,减少了因环境差异导致的问题。

3. 可移植性

:可以轻松地将 Docker 容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差异。

比如,在本地开发的容器可以无缝部署到云服务器上。

4. 高效的资源利用:

多个 Docker 容器可以共享主机的操作系统内核,从而更有效地利用系统资源。

5. 易于部署和扩展:

能够快速部署新的应用实例,并且可以根据需求轻松地进行水平扩展。

总之,Docker 极大地简化了应用程序的开发、部署和管理流程,提高了开发效率和运维的便利性。它在现代软件开发和云计算领域得到了广泛的应用。

1.1.2 docker在企业中的应用场景

在企业中docker作为业务的最小载体而被广泛应用

通过docker企业可以更效率的部署应用并更节省资源

云是一种经营理念:

MS5;亚马逊;闲置的房子租出去;

阿里云就是中国云

别碰开发;

你打不了NBA你就觉得你能做开发吗

> IaaS(Infrastructure as a Service),即基础设施即服务(毛坯房)便宜
> PaaS是(Platform as a Service)即指平台即服务(装修好,没器具)
> SaaS(Software as a Service)软件运营服务是(精装修,领包入住)贵

docker: 在云业务主机上,能够快速响应并且提供服务的一个 软件的,以及软件运行环境的集合

1.1.3 docker与虚拟化的对比

安全不好,效率好

虚拟机 docker容器
操作系统 宿主机上运行虚拟机OS 共享宿主机OS
存储 镜像较大(GB 镜像小(MB)
性能 操作系统额外的cpu、内存消耗 几乎无性能损耗
移植性 笨重、与虚拟化技术耦合度高 轻量、灵活迁移
隔离性 完全隔离 安全隔离
部署 慢、分钟级 快速、秒级
运行密度 一般几十个 单机支持上千容器

1.1.4 docker的优势

对于开发人员:Build once、Run anywhere。

对于运维人员:Configure once、Run anything 配置

容器技术大大提升了IT人员的幸福指数!

AI 解决脏活累活,35岁精力有限的问题; 会让有技术的人走的远

2 部署docker

2.1 容器工作方法

2.2 部署第一个容器

官方站点:https://docs.docker.com/

国内:

2.2.1 配置软件仓库

首先删除之前的

以及删除快照

然后克隆一个

首先,我们要做的第一件事,就是给 Linux 系统加一个 "阿里云软件商店" 的地址,这样才能下载 Docker。大家跟着我一起敲这段代码,敲完之后按回车:

复制代码
#利用阿里云部署软件仓库

[root@docker-node1 ~]# cat > /etc/yum.repos.d/docker.repo << EOF

[docker]

name = docker

baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.6/x86_64/stable/

gpgcheck = 0

EOF

好,代码敲完了, 我来一行一行给大家讲清楚这段代码都在做什么:

  1. 首先看第一行,#利用阿里云部署软件仓库,这行是注释,以#开头的内容,系统是不会执行的,只是写给我们自己看的笔记,大家可以不用敲这行。

  2. 然后是[root@docker-node1 ~]#,这个部分大家也不用输入 ,这是系统自动显示的命令提示符:

    • root表示当前是超级管理员账号,权限最大;
    • ~表示当前在用户的家目录;
    • #就表示这是管理员终端,如果是普通用户,这里通常是$。
  3. 接下来是第一行真正要执行的命令:

    复制代码
    cat > /etc/yum.repos.d/docker.repo << EOF
    • cat:这个命令本来是用来查看文件内容的,但在这里配合后面的符号,是用来创建新文件的;
    • >:这是一个重定向符号,意思是 "把前面的内容,写到后面的文件里去",如果文件不存在就新建,存在就覆盖;
    • /etc/yum.repos.d/docker.repo:这是我们要创建的文件的路径和名字
      • /etc/yum.repos.d/是 RHEL/CentOS 系统固定的目录,所有 "软件商店" 的配置文件都必须放在这里,后缀也必须是.repo;
      • docker.repo是我们给这个文件起的名字;
    • << EOF:这叫 "Here Document" 语法,大白话就是告诉系统:"你听着,接下来我要输入一段内容,直到我再次输入EOF为止,这段内容都算做是这个文件里的东西"。
  4. 然后是文件里的内容第一行:[docker]

    • 这是给这个软件仓库起的唯一 ID,中括号不能丢,不然系统识别不出来。
  5. 下一行:name = docker

    • 这是给这个仓库起一个好认的名字,方便我们自己看,叫什么都行。
  6. 最关键的一行来了

    复制代码
    baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.6/x86_64/stable/
    • 这就是 Docker 安装包的阿里云下载地址
    • 这里必须重点强调:很多人报错invalid link(无效链接),99% 都是因为这行地址写错了!
      • 你的系统是 RHEL9.6,就写 9.6;是 9.5,就改 9.5;
      • x86_64是 CPU 架构,如果你是 ARM 服务器,就改成aarch64;
      • 一个字符都不能错,错了就会报无效链接!
  7. 下一行:gpgcheck = 0

    • 这是安全校验开关,=0表示关闭校验。新手先这么写,不然没导入密钥会报错,等以后熟悉了再开。
  8. 最后一行:EOF

    • 这就是结束标记,和开头的<< EOF对应,必须单独占一行,告诉系统:"内容写完了,保存吧"。

好,这一步完成后,我们可以输入 ls /etc/yum.repos.d/ 回车,能看到里面有 docker.repo 这个文件,就说明第一步成功了。


第二部分:刷新软件缓存

接下来,我们要刷新一下系统的 "软件商品目录",输入这行命令并回车:

复制代码
[root@docker-node1 ~]# dnf makecache

我来解释一下这行命令:

  • dnf:是 RHEL 8/9 系统的包管理器,相当于 App Store 的后台程序;
  • makecache:就是 "生成缓存" 的意思。
    • 大白话:去我们刚配置的阿里云地址,把那里的软件列表下载到本地,这样下次安装速度就快了。

大家看,执行的时候出现了这段红字:

正在更新 Subscription Management 软件仓库。

无法读取客户身份

本系统尚未在权利服务器中注册。

完全不用慌! 这是 RHEL 系统的官方付费订阅提示,就是红帽想让你花钱注册,这完全不影响我们使用阿里云的源安装 Docker,直接忽略这段红字就行。

等看到 "元数据缓存已建立",就说明这步成功了。


第三部分:搜索 Docker(验证仓库)

接下来,我们搜一下 Docker,看看我们的仓库是不是真的生效了,输入:

复制代码
[root@docker-node1 ~]# dnf search  docker
  • search:就是搜索命令。
  • 作用:在所有软件源里找名字带docker的软件。

大家看搜索结果,能找到 docker-ce.x86_64 : The open-source application container engine 这一行,就说明我们的仓库配置成功了!这个 docker-ce 就是我们要装的 Docker 社区免费版。


第四部分:正式安装 Docker

好,现在我们可以正式安装 Docker 了,就这一行命令,输入并回车:

复制代码
[root@docker-node1 ~]# dnf install docker-ce -y

逐词解释:

  • install:安装命令,固定写法;
  • docker-ce:我们要安装的软件包名;
  • -y:自动确认参数。
    • 安装过程中系统会问你 "确定要安装吗?",加了 -y 就相当于自动帮你按了 y 回车,一路绿灯到底,新手必加。

接下来等待安装完成,看到 "完毕!" 或者 "已安装" 的提示,就说明 Docker 装好了。


第五部分:修改 Docker 启动配置(关键!)

很多新手装完 Docker,发现容器上不了网,就是因为漏了这一步!我们来修改 Docker 的启动参数,输入:

复制代码
[root@docker-node1 ~]# vim /lib/systemd/system/docker.service
  • vim:Linux 里最常用的文本编辑器;
  • 后面的路径:这是 Docker 的系统服务配置文件

新手跟着我做 vim 操作,一步都别错:

  1. 回车进入文件后,按键盘上的 i 键,进入 "插入模式"(也就是编辑模式);
  2. 用方向键移动光标,找到以 ExecStart= 开头的那一行;
  3. 在这一行的末尾 ,加上一个空格,然后输入:--iptables=true
    • 就像这样:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true
    • 作用:强制 Docker 使用防火墙规则,不然容器上不了网;
  4. 改完之后,按一下键盘上的 Esc 键,退出编辑模式;
  5. 然后输入 :wq (注意是冒号 wq),然后按回车,就保存并退出了。

这里有个必踩的坑! 改完配置 文件,必须输入这行命令并回车:

复制代码
systemctl daemon-reload

这是告诉系统:"我改了你的服务配置,你重新加载一下",不然改的配置不生效!


第六部分:加载网络内核模块

接下来,我们要加载 Docker 必需的一个网络驱动,先输入第一行:

复制代码
[root@docker-node1 ~]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf
  • echo br_netfilter:打印 "br_netfilter" 这串字符;
  • > ...:把这串字符写入后面的文件;
  • br_netfilter:这是一个内核网络驱动,Docker 需要用它来处理容器网络;
  • 作用:告诉系统,"下次开机的时候,自动帮我加载这个驱动"。

然后输入第二行,现在立刻手动加载这个驱动(不用重启) :

复制代码
[root@docker-node1 ~]# modprobe -a br_netfilter
  • modprobe:手动加载内核模块的命令。

第七部分:调整系统网络参数(核心!)

这是让容器能上网的最核心一步,我们来修改系统的内核网络开关,输入这段代码:

修改内核参数L:

复制代码
[root@docker-node1 ~]# cat  > /etc/sysctl.d/docker.conf <<EOF

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward = 1

EOF

我来解释这三个开关:

  1. net.bridge.bridge-nf-call-iptables = 1:开启桥接网络的防火墙过滤;
  2. net.ipv4.ip_forward = 1:最重要的一个 !开启 IP 转发功能。
    • 大白话:允许 Linux 系统像路由器一样,把容器的数据包转发到外网去。这个如果是 0,容器绝对上不了网!

文件创建好后,输入这行命令让配置立刻生效(不用重启):

复制代码
[root@docker-node1 ~]# sysctl --system
  • --system:从系统配置目录加载所有配置并生效。

第八部分:启动 Docker 并设置开机自启

终于到最后一步了!我们启动激活 Docker,并让它开机自启,输入:

复制代码
[root@docker-node1 ~]# systemctl enable --now docker

逐词解释:

  • systemctl:控制系统服务的命令;
  • enable:设置为开机自启
  • --now:现在立刻 启动;
    • 不加这个的话,只有下次开机才会生效,加了就是 "现在启动,并且以后开机也自动启动";
  • docker:服务名。
  1. docker info :核心命令
    • 这是 Docker 官方提供的系统信息查询命令 ,作用是:查看当前 Docker 环境的完整运行状态、配置和资源信息

会多了桥接网卡


验证安装成功

好,全部搞定!我们来验证一下,输入:

复制代码
docker --version

能输出版本号,就说明安装成功了!

你还可以输入 docker run hello-world 跑一个测试容器,看到 "Hello from Docker!",就说明网络也完全没问题了!

相关推荐
charlie1145141912 小时前
嵌入式C++教程实战之Linux下的单片机编程(9):HAL时钟使能 —— 不开时钟,外设就是一坨睡死的硅
linux·开发语言·c++·单片机·嵌入式硬件·c
Agent产品评测局2 小时前
企业生产报工自动化落地,数据采集全流程实现方案 —— 2026制造业数字化转型深度选型指南
运维·人工智能·ai·chatgpt·自动化
以太浮标2 小时前
华为eNSP模拟器综合实验之- DHCP、DNS、HTTP和FTP服务器配置案例Client-Server
linux·服务器·windows·http·华为·信息与通信
志栋智能2 小时前
安全超自动化如何缩短平均检测与响应时间?
运维·安全·自动化
Project_Observer2 小时前
为您的项目选择最合适的Zoho Projects自动化巧能
大数据·运维·人工智能·深度学习·机器学习·自动化·编辑器
西柚小萌新2 小时前
【人工智能:Agent】--OpenClaw设计架构解析
运维·服务器·架构
摇滚侠2 小时前
Vmvare 虚拟机安装 Linux CentOS 7 操作系统 一键安装 Docker 1Panel 一键安装 MySQL Redis OpenClaw
linux·docker·centos
路溪非溪2 小时前
如何使用procfs来排查问题
linux·arm开发·驱动开发