新沂市建设局网站,ui设计流程培训网站,宁波企业如何建网站,做网站需要多少兆专线前置了解#xff1a;
X86 高并发#xff1a;基于 x86 架构的处理器#xff0c;在高负载下处理大量并发请求的能力。ARM #xff1a;使用 ARM 架构处理器的移动设备#xff0c;具有低功耗和高性能的特点。
操作系统#xff1a;
CentOS#xff1a;基于 Red Hat Enterprise…前置了解
X86 高并发基于 x86 架构的处理器在高负载下处理大量并发请求的能力。ARM 使用 ARM 架构处理器的移动设备具有低功耗和高性能的特点。
操作系统
CentOS基于 Red Hat Enterprise Linux 的免费开源操作系统适合企业级应用和服务器。Ubuntu基于 Debian 的免费开源操作系统用户友好广泛应用于个人电脑、服务器和云计算平台。
一、LXC
1. LXC 是什么
LXCLinuX Containers是一种操作系统层虚拟化技术为 Linux 内核容器功能的一个用户空间接口。
它将应用软件系统打包成一个软件容器Container内含应用软件本身的代码以及所需要的操作系统核心和库。透过统一的名字空间和共享 API 来分配不同软件容器的可用硬件资源创造出应用程序的独立沙箱运行环境使得 Linux 用户可以容易地创建和管理系统或应用容器。
尽管 LXC 极大地简化了容器技术的使用但比起直接通过内核调用来使用容器技术其复杂程度其实并没有多大降低因为我们必须要学会 LXC 的一组命令工具且由于内核的创建都是通过命令来实现的通过批量命令实现数据迁移并不容易。
其隔离性也没有虚拟机那么强大。后来就出现了 Docker所以从一定程度上来说Docker 就是 LXC 的增强版。
2. LXC 容器操作
Ubuntu 上安装 LXC如下:检查及卸载如需
systemctl status lxc
lxc-stop -n xxx # 停止所有运行的容器
lxc-destroy -n xxx # 删除所有容器
apt-get purge --auto-remove lxc lxc-templates
systemctl status lxc # 确保服务已卸载安装 LXC
sudo apt install lxc lxc-templates bridge-utils -ysystemctl status lxc # 检查服务是否正常LXC的常用命令说明如下
① 检查系统支持性lxc-checkconfig
② 创建指定模板容器lxc-create -n NAME -t TEMPLATE_NAME [--template-options]
③ 启动容器lxc-start -n NAME -d
④ 列出容器lxc-ls -f-f 参数显示容器得详细信息
⑤ 查看容器信息lxc-info -n NAME
⑥ 进入容器lxc-attach --nameNAME [--COMMAND]
⑦ 停止容器lxc-stop -n NAME
⑧ 删除容器lxc-destroy -n NAME
实战如下
# 1. 检查运行状态
rootVM-8-10-ubuntu:~$ systemctl status lxc
● lxc.service - LXC Container Initialization and Autoboot CodeLoaded: loaded (/lib/systemd/system/lxc.service; enabled; vendor preset: enabled)Active: active (exited) since Fri 2025-07-11 15:28:38 CST; 3min 34s agoDocs: man:lxc-autostartman:lxcProcess: 2423230 ExecStartPre/usr/lib/x86_64-linux-gnu/lxc/lxc-apparmor-load (codeexited, status0/SUCCESS)Process: 2423235 ExecStart/usr/lib/x86_64-linux-gnu/lxc/lxc-containers start (codeexited, status0/SUCCESS)Main PID: 2423235 (codeexited, status0/SUCCESS)CPU: 24ms# 2. 查看可用模板
rootVM-8-10-ubuntu:/home/lighthouse# ls /usr/share/lxc/templates/
lxc-alpine lxc-centos lxc-fedora lxc-oci lxc-plamo lxc-sparclinux lxc-voidlinux
lxc-altlinux lxc-cirros lxc-fedora-legacy lxc-openmandriva lxc-pld lxc-sshd
lxc-archlinux lxc-debian lxc-gentoo lxc-opensuse lxc-sabayon lxc-ubuntu
lxc-busybox lxc-download lxc-local lxc-oracle lxc-slackware lxc-ubuntu-cloud# 3. 创建容器
lxc-create -n lxchost1 -t ubuntu -- -r xenial -a amd64 # Ubuntu上创建Ubuntu容器
lxc-create -n centos7 --templatedownload -- --distcentos --release7 --archamd64 # Ubuntu上创建CentOS容器# 4. 查看创建结果
rootVM-8-10-ubuntu:/home/lighthouse# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
lxchost1 STOPPED 0 - - - false # 5. 启动容器
rootVM-8-10-ubuntu:/home/lighthouse# lxc-start -n lxchost1 -d
rootVM-8-10-ubuntu:/home/lighthouse# lxc-info -n lxchost1
Name: lxchost1
State: RUNNING
PID: 2455869
Link: vethNx0mnETX bytes: 726 bytesRX bytes: 1.41 KiBTotal bytes: 2.12 KiB# 6. 使用 ssh 进入容器
rootVM-8-10-ubuntu:/home/lighthouse# ssh ubuntuip
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
ubuntu1.12.51.69s password: # 密码是当前 系统密码# 7. 在容器中执行常用命令
ip addr # 查看网络信息
df -h # 查看磁盘挂载情况
ps -ef # 查看进程信息
ubuntuVM-8-10-ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 340M 1.1M 339M 1% /run
/dev/vda2 69G 23G 44G 35% /
tmpfs 1.7G 24K 1.7G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 340M 4.0K 340M 1% /run/user/1002
tmpfs 340M 4.0K 340M 1% /run/user/1001
tmpfs 1.7G 0 1.7G 0% /run/qemu
tmpfs 340M 4.0K 340M 1% /run/user/1000# 8. 从宿主机向容器中发送命令
rootVM-8-10-ubuntu:/home/lighthouse# lxc-attach -n lxchost1 --clear-env -- echo Hello LXC
Hello LXC# 9. 停止 删除容器
rootVM-8-10-ubuntu:/home/lighthouse# lxc-stop -n lxchost1
rootVM-8-10-ubuntu:/home/lighthouse# lxc-destroy -n lxchost1通过LXC学习容器的创建与管理体会容器化技术的基本原理。了解Docker不是唯一的容器实现方式Docker在0.9版本起引入了自家的 libcontainer而如今大部分Docker使用的都是libcontainer而非LXC。
二、Docker 是什么
1. Docker 是什么
Docker 本质其实是 LXC 之类的增强版它本身不是容器而是容器的易用工具。
容器是 Linux 内核中的技术Docker 只是把这种技术在使用上简易普及了。Docker 在早期的版本其核心就是 LXC 的二次封装发行版。Docker 作为容器技术的一个实现或者说让容器技术普及开来的最成功的实现。Docker 是基于 Go 语言实现的一个开源项目它的主要目标是“BuildShip and Run Any APPAnywhere”即通过对组件的封装、分发、部署、运行等生命周期的管理使得用户的应用及其运行环境能够做到“一次封装到处运行”。早期 Docker 利用 LXC 做容器管理引擎但在创建容器时不再使用 模板 去安装生成而是通过 镜像技术把一个操作系统用户空间所需要使用到的组件事先编排好并整体打包成一个文件image 文件镜像文件集中放在一个仓库中。当需要创建容器时Docker 调用 LXC 的工具 lxc-create但不再通过 lxc 的模板去安装而是连接到镜像服务器上下载匹配的镜像文件而后基于镜像启动容器。
所以Docker 极大地简化了容器的使用难度。以后我们创建启动容器只需要一个命令docker-rundocker-stop 就可以启动停止一个容器了。
2. Docker 的引擎迭代
Docker 早期是基于 LXC 容器管理引擎实现。当后来成熟之后Docker 自建了一个容器引擎叫 libcontainer。后来 CNCF 的介入Docker 又研发了一个工业化标准的容器引擎 runC。目前所使用的新版 Docker所使用的容器引擎就是 RunC。
3. 虚拟机 Vs Docker
虚拟机在硬件层之上在操作系统层就开始进行隔离。虚拟机通过伪造一个硬件的抽象接口把操作系统嫁接到硬件上。
容器也是一种虚拟化的实现技术它在操作系统之上进行环境隔离每个容器可以有自己的一套工具和库但是它们共享操作系统的内核特性虚拟机Docker磁盘占用几个 GB 到几十个 GB几十 MB 到 几百 MBCPU 内存占用虚拟操作系统非常占用 CPU 和内存需要通过虚拟层调用占用率高Docker 引擎占用资源极低直接作用于硬件资源占用少虚拟化层级硬件层之上模拟完整操作系统操作系统层之上隔离进程环境安装管理需要专门的运维技术安装、管理方便内核共享不共享每个 VM 有自己的 OS 内核共享宿主机的内核启动速度较慢需要启动完整的操作系统极快秒级甚至毫秒级资源消耗高每个 VM 占用内存和磁盘空间大低轻量级共享资源隔离性强完全隔离安全性高系统级别相对弱依赖于命名空间和控制组进程级别可移植性一般镜像体积大迁移复杂高容器镜像小便于部署适用场景多租户、安全要求高的环境快速部署、微服务、CI/CDdocker 不需要虚拟内核所以启动可以更快相当于 windows 的开机时间省去了游戏厅 vs 手机游戏
虚拟机 游戏厅里的街机每台机器都自带电源、屏幕、主板……虽然功能全但笨重、耗电。Docker 容器 手机上的模拟器游戏所有游戏共享手机系统资源只需装个 App 就能玩小巧方便启动快。
️ 建房子 vs 搭积木
虚拟机 每次盖一栋新楼地基、水电、装修都要从头开始费时费力。Docker 容器 在一个大楼里隔出不同的房间共享基础设施只改内部布置快速灵活。
┌───────────────┬──────────────────────────────┐ ┌───────────────┬──────────────────────────────┐
│ 层级 │ 虚拟机 (VM) │ │ 层级 │ 容器 (Docker) │
├───────────────┼──────────────────────────────┤ ├───────────────┼──────────────────────────────┤
│ 应用程序 │ 各自独立的应用 │ │ 应用程序 │ 各自独立的应用 │
│ 操作系统 │ 各自独立的操作系统 │ │ 容器引擎 │ Docker Engine │
│ Hypervisor │ 虚拟化层监控器 │ │ 操作系统 │ 共享同一个 Linux 内核 │
│ 物理硬件 │ 物理服务器 │ │ 物理硬件 │ 物理服务器 │
└───────────────┴──────────────────────────────┘ └───────────────┴──────────────────────────────┘Docker 为什么比虚拟机资源 利用率高启动快耦合低
Docker 有比虚拟机更少的抽象层。Docker 不需要 Hypervisor 实现 硬件资源虚拟化运行在 Docker 容器上的程序直接使用的是实际物理机的硬件资源。因此在 CPU、内存利用率上 Docker 将会在效率上有明显的优势。Docker 利用的是宿主机的内核而不需要 Guest OS节省了 Guest OS 占用的资源。Docker 不需要 Guest OS创建一个容器时不需要和虚拟机一样重新加载一个操作系统内核。从而避免引寻、加载操作系统内核返回时耗时耗资源的过程当新建一个虚拟机时虚拟机软件需要加载 Guest OS返回新建过程是分钟级别的。而新建一个 Docker 容器只需要几秒钟。
Docker 和 JVM 虚拟化的区别特性JVMDocker 容器性能Jvm 需要占用一定的 CPU 和内存基本没有损失虚拟层面基于 JVM 虚拟机更加上层基于操作系统更加通用代码无关性一个特定代码的执行平台它是运行时才存在的只能支撑特定代码的执行并且必须是在 jvm 进程内模拟了一整个操作系统它是静态存在的可以支撑任何代码相同平台的应用程序主机隔离性jvm 不隔离主机通过命名空间实现隔离4. 关于 Docker
4.1 Docker 版本
Docker 发展过程中衍生了以下版本目前我们学习和使用提到的版本是 docker-ce。
lxc上文中提到lxc 是最早的 linux 容器技术早期版本的 docker 直接使用 lxc 来实现容器的底层功能。虽然使用者相对较少但 lxc 项目仍在持续开发演进中。libcontainerdocker 从 0.9 版本开始自行开发了 libcontainer 模块来作为 lxc 的替代品实现容器底层特性并在 1.10 版本彻底去除了 lxc。在 1.11 版本拆分出 runc 后libcontainer 也随之成为了 runc 的核心功能模块runc 后续变成了容器标准。mobymoby 是 docker 公司发起的开源项目其中最主要的部分就是同名组件 moby事实上这个 moby 就是 dockerd 目前使用的开源项目名称docker 项目中的 enginedockerd仓库现在就是从 moby 仓库 fork 而来的使用 containerd 作为运行时标准。Mobydocker-cedocker 的开源版本CE 指 Community Edition。docker-ce 中的组件来自于 moby、containerd 等其他项目。Pricing | Dockerdocker-eedocker 的收费版本EE 指 Enterprise Edition。其基础组件来源和 docker-ce 是一样的但附加了一些其他的组件和功能。Pricing | Docker
4.2 Docker 架构Docker 仓库(Registry)Docker 仓库用来保存镜像可以理解为代码控制中的代码仓库。Docker Hub 供了庞大的镜像集合供使用。Docker DaemonDocker Daemon 是服务器组件是 Docker 最核心的后台进程我们也把它称为 守护进程。Docker 客户端(Client)Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板。Docker 容器(Container)容器是独立运行的一个或一组应用
类比理解上面概念比较难以理解我们列举个生活中的案例以一家人去旅游入住酒店为例。
我们一家人和朋友一块旅游去酒店我们就是 Docker Client。到酒店办理入住办理退房缴费需要酒店前台提供各种服务酒店前台就是我们的 Docker DaemonDocker 的核心服务端。酒店是建在美丽的海边酒店的宅基地和大楼就是我们实际的物理服务器或者虚拟服务器也就是 Docker Host。酒店就 1000 多个房间每个房间里面不一样有标间、大床房、家庭房等这就是 Docker 镜像仓库。酒店的标准的房间豪华大床房和双人标间这个就是 Docker 镜像我们客户是没有办法修改的。我们办理完入住了一个豪华大床房然后把行李个人物品带到了一个具体的房间号比如 9527那么这个房间我们可以使用了朋友也开了一间豪华大床房虽然豪华大床房一样但是我们携带的物品都不一样这个就是容器 Docker Container。容器的销毁也就是我们一周后旅游结束了搬出了酒店酒店把我们的房间恢复了镜像原来的样子。
4.3 Docker 生态
我们来考虑 2 个问题Docker 为什么要设计镜像然后又搭建个 Docker Hub搞个镜像仓库呢我们来看下现在的时代发生了什么。
1. 数据量疯狂增长其中 1 ZB 1024 EB 10242{1024}^210242PB 10243{1024}^310243TB 10244{1024}^410244GB 10245{1024}^510245MB 10246{1024}^610246KB随着物联网、边缘计算等智能终端设备不断普及受到来自物联网设备信号、元数据、娱乐相关数据、云计算和边缘计算的数据增长的驱动全球数据量呈现加速增长。根据 IDC 分布的《数据时代 2025》预测全球数据量将从 2018 年的 33ZB 增至 2025 年的 175ZB增长超过 5 倍中国平均增速快于全球 3%预计到 2025 年将增至 48.6ZB占全球数据圈的比例由 23.4%提升至 27.8%。其中中国企业级数据量将从 2015 年占中国数据量的 49增长到 2025 年的 69。2. 处理能力快速增加
腾讯云全球服务器数量 100w数据量 EB2020 年阿里云在全国已建成 5 大超级数据中心阿里云在全球 22 个地域部署了上百个数据中心服务器的总规模数已经接近 200 万台。
某省疾控中心疫苗预约系统、全员核酸检测系统、健康码系统共 300 余台服务器并为核酸检测系统快速扩容计算和存储资源。
重申 云 的概念就像水和电一样的一种资源但是不用了又可以归还
3. 软件需求爆发式增长
软件发布频繁研发模式从瀑布开发演变为敏捷开发原来 3 个月上一次新功能现在两周一次而开发过程中我们也经常遇到需要修改需求然后变更再发布的情况。
软件上线有问题需要快速回滚对软件有着极强的版本管理和回滚诉求。
软件需要共享软件的研发人员、研发公司在设计、研发好一款软件的时候如何方便地共享给他人而又能快速地使用起来。
环境搭建复杂技术种类繁多每个项目组使用的语言不一样需要不同的环境每个都得搞一套。每次都要从 yum 开始一个个完成部署安装每次都有各种奇怪的问题运维成本很高。
Docker 解决方案云时代需要我们针对这些诉求有一套针对性的解决方案。
思考一我们要处理海量的数据如何处理呢
购买大量的服务器并研发对应软件。
开发的需求需要频繁的变更上线如何才能将修改的代码快速地分发到几百或者几千台服务器呢如何共享软件呢搞一个中心仓库让各个服务器去下载软件包安装所以 CentOS 搞了 yum 仓库docker 设计了镜像仓库docker hub 是公共的托管仓库。
思考二软件设计好以后怎么快速安装启动有问题回滚呢
将 docker 需要的所有信息设计一套软件格式把所有的依赖搞进去并打上版本标签这样不会换一个服务器各种问题所以 Docker 设计了镜像根据版本标签就可以实现回滚了
思考三不同的开发环境怎么搭建呢一会 java一会 c
docker 设计了镜像来应对镜像里面存放了需要运行的环境就像我们的 iPhone 内置 ios我们的华为 mate 50 内置鸿蒙一样一条命令就可以完成某个环境的搭建。
三、Docker 安装
下面我们来快速安装一下 Docker对 Docker 有个初步的认识和了解。
① 确定 CPU 版本以及操作系统版本如下
rootVM-8-10-ubuntu:/home/lighthouse# uname -a # CPU 架构
Linux VM-8-10-ubuntu 5.15.0-126-generic #136-Ubuntu SMP Wed Nov 6 10:38:22 UTC 2024 x86_64 x86_64 x86_64 GNU/LinuxrootVM-8-10-ubuntu:/home/lighthouse# cat /etc/*release* # OS 版本
DISTRIB_IDUbuntu
DISTRIB_RELEASE22.04
DISTRIB_CODENAMEjammy
DISTRIB_DESCRIPTIONUbuntu 22.04 LTS
PRETTY_NAMEUbuntu 22.04 LTS
NAMEUbuntu
VERSION_ID22.04
VERSION22.04 (Jammy Jellyfish)
VERSION_CODENAMEjammy
IDubuntu
ID_LIKEdebian
HOME_URLhttps://www.ubuntu.com/
SUPPORT_URLhttps://help.ubuntu.com/
BUG_REPORT_URLhttps://bugs.launchpad.net/ubuntu/
PRIVACY_POLICY_URLhttps://www.ubuntu.com/legal/terms-and-policies/privacy-policy
UBUNTU_CODENAMEjammy② 卸载之前版本如果是新购买的云服务器是没有的比如输入 docker 显示没有这个命令就无需卸载
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc# 卸载历史版本
# 卸载软件
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y# 删除目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd旧版本是因为 历史上 docker 名字发生了改变后面才变为 社区版 docker-ce
③ 准备条件
sudo apt update # 更新软件包索引# curl 命令安装 -- 以便能够通过HTTPS使用APT
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
rootVM-8-10-ubuntu:/home/lighthouse# curl www.baidu.com # 测试# 创建 gpg key 目录 --
sudo mkdir -m 0755 -p /etc/apt/keyrings# 下载并添加GPG密钥
#添加 Docker 官方 GPG key 可能国内现在访问会存在问题
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 阿里源推荐使用阿里的gpg KEY
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg#添加 apt 源:
#Docker官方源
echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null#阿里apt源
echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null#更新源
sudo apt update
sudo apt-get update④ 安装
sudo apt install docker-ce docker-ce-cli containerd.io # 安装 Docker Engine# 查看Docker版本
sudo docker version
rootVM-8-10-ubuntu:/home/lighthouse# docker version
Client: Docker Engine - CommunityVersion: 28.3.2API version: 1.51Go version: go1.24.5Git commit: 578ccf6Built: Wed Jul 9 16:13:42 2025OS/Arch: linux/amd64Context: defaultServer: Docker Engine - CommunityEngine:Version: 28.3.2API version: 1.51 (minimum version 1.24)Go version: go1.24.5Git commit: e77ff99Built: Wed Jul 9 16:13:42 2025OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.7.27GitCommit: 05044ec0a9a75232cad458027ca83437aae3f4darunc:Version: 1.2.5GitCommit: v1.2.5-0-g59923efdocker-init:Version: 0.19.0GitCommit: de40ad0⑤ 自启动配置
#配置加载
sudo systemctl daemon-reload
#启动服务
sudo systemctl start docker
#开启启动
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker 执行 hello-world
如果出现了如下报错
rootVM-8-10-ubuntu:/home/lighthouse# docker run hello-world
Unable to find image hello-world:latest locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)Run docker run --help for more information原因因为最近国内无法访问到Docker的首先在安装的时候我们选择的是国内阿里的源因此就需要在docker daemon 配置文件中增加国的可用的 docker hub mirror 找到你的daemon.json 文件解决办法如下
rootVM-8-10-ubuntu:/etc/docker# vim /etc/docker/daemon.json
vi /etc/docker/daemon.json
{registry-mirrors: [https://docker.m.daocloud.io,https://dockerhub.timeweb.cloud,https://huecker.io]
}
# 通常来讲如果没有其它的配置那么daemon.json完整的文件内容就是如上# 文件内容输入后
rootVM-8-10-ubuntu:/etc/docker# sudo systemctl daemon-reload
rootVM-8-10-ubuntu:/etc/docker# sudo systemctl restart docker# 此时就可以正常输出了
rootVM-8-10-ubuntu:/home/lighthouse# docker run hello-world
Unable to find image hello-world:latest locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:ec153840d1e635ac434fab5e377081f17e0e15afab27beb3f726c3265039cfff
Status: Downloaded newer image for hello-world:latestHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the hello-world image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/# 查看所有容器
rootVM-8-10-ubuntu:/home/lighthouse# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a856f33f502f hello-world /hello 7 minutes ago Exited (0) 7 minutes ago affectionate_leavitt允许非Root用户执行docker 命令
当我们安装好了Docker之后有两种方式来执行docker 命令
在docker命令前加上sudo, 比如sudo docker pssudo -i 切换至root用户再执行docker 命令
是不是可以让当前用户在不切root或者不加sudo 的情况下正常使用 docker 命令呢答案是有的如下
# 1.添加docker用户组
rootVM-8-10-ubuntu:/home/lighthouse# sudo groupadd d# 2.将当前用户添加到用户组
rootVM-8-10-ubuntu:/home/lighthouse# sudo usermod -aG docker lighthouse# 3.使权限生效
lighthouseVM-8-10-ubuntu:~$ newgrp docker
lighthouseVM-8-10-ubuntu:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a856f33f502f hello-world /hello 10 minutes ago Exited (0) 10 minutes ago affectionate_leavitt但是此时我们会发现当每次打开新的终端都必须先执行一次 newgrp docker 命令否则当前用户还是不可以执行docker命令那我们该怎么解决呢更新.bashrc文件我们需要编辑 ~/.bashrc文件并在文件末尾增加 如下一行
groupadd -f docker