
服务器运行环境隔离方法(容器化)
- Hao Zhang
- Operating system level virtualization
- December 13, 2023
一些环境隔离方法
虚拟化
: 使用虚拟化技术,如 VMware、VirtualBox 或 KVM,可以在物理服务器上创建多个虚拟服务器,每个虚拟服务器都有自己独立的操作系统和资源。这提供了强大的隔离,防止一个虚拟机的问题影响其他虚拟机。容器化
: 使用容器技术,如 Docker,可以将应用程序及其依赖项打包成一个独立的容器。每个容器运行在独立的环境中,与主机和其他容器隔离。这提供了更轻量级的隔离,同时提高了灵活性和可移植性。操作系统级别的隔离
: 使用操作系统级别的隔离技术,如 Linux 的容器(LXC)或 FreeBSD 的 jails。这些技术允许将进程和文件系统隔离开来,每个隔离的环境都有自己的文件系统和进程空间。
这里,综合考虑实验室设备情况以及管理实现难度,我们选择的容器化技术,通过Docker实现环境隔离,Docker是一种轻量级容器技术,通过将应用程序及其依赖项打包成独立的容器,提供了一致性和可移植性。Portainer是一个用于简化Docker容器管理的开源工具,提供直观的Web界面,使用户能够轻松查看、创建、启动和停止Docker容器。

Docker 简介
Docker 是一种开源的容器化平台,用于轻松地构建、打包、运输和运行应用程序。Docker 提供了一种将应用程序和其所有依赖项打包成一个独立的、可移植的容器的方法,这个容器可以在任何支持 Docker 的环境中运行,而不受底层系统的影响。

Portainer 简介
Portainer 是一个开源的轻量级容器管理工具,主要用于简化 Docker 容器的管理。通过提供直观的图形用户界面,Portainer 能够让用户轻松地查看、创建、启动、停止和管理 Docker 容器以及相关资源。

配置环境过程
Ubuntu 22.04 LTS (GNU/Linux 5.15.0-25-generic x86_64)
Docker 安装
安装 Docker 在 Ubuntu 上可以通过官方的安装脚本或者通过 apt 包管理工具进行。以下是两种常见的方法:
方法一:使用官方安装脚本
更新 apt 软件包索引:
sudo apt update
安装必要的依赖:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
添加 Docker GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
设置稳定版 Docker 存储库:
echo "deb [arch=amd64 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 软件包索引:
sudo apt update
安装 Docker 引擎:
sudo apt install docker-ce docker-ce-cli containerd.io
验证 Docker 是否安装成功:
sudo docker --version
方法二:使用 apt 安装
更新 apt 软件包索引:
sudo apt update
安装 Docker 引擎:
sudo apt install docker.io
启动 Docker 服务并设置开机自启:
sudo systemctl start docker sudo systemctl enable docker
验证 Docker 是否安装成功:
sudo docker --version
当前用户没有足够的权限来访问 Docker 守护程序的 Unix 套接字, 通常,解决这个问题的一种方法是将当前用户添加到 docker 组中,以便其具有访问 Docker 的权限。 以下是解决此问题的步骤:
将当前用户添加到
docker
组:sudo gpasswd -a $USER docker newgrp docker
这会将当前用户添加到
docker
组中。请注意,这个变更在用户重新登录后才会生效。重新登录: 退出当前终端窗口并重新登录,以确保组成员资格生效。
验证 Docker 权限: 在重新登录后,运行以下命令来验证 Docker 是否现在可以由当前用户访问:
docker run hello-world
如果你不再看到 “permission denied” 错误,说明问题已经解决。
请注意,为了应用组成员资格的更改,你可能需要重启 Docker 服务。你可以执行以下命令:
sudo systemctl restart docker
Portainer 是一个用于管理 Docker 容器的开源工具,提供用户友好的 Web 界面。以下是在 Docker 中安装 Portainer 的步骤:
创建一个 Docker 网络(可选): 这一步是可选的,但它有助于隔离 Portainer 的网络。执行以下命令:
docker network create portainer-net
运行 Portainer 容器:
docker run -d -p 9000:9000 --name portainer --network portainer-net -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer --restart=always
-d
: 在后台运行容器。-p 9000:9000
: 将容器的 9000 端口映射到主机的 9000 端口。--name portainer
: 为容器指定一个名称,这里是 “portainer”。--network portainer-net
: 将容器连接到之前创建的网络(如果有的话)。-v /var/run/docker.sock:/var/run/docker.sock
: 允许 Portainer 访问 Docker 守护程序的 Unix 套接字。portainer/portainer
: 使用 Portainer 的官方 Docker 镜像。--restart=always
: 断电自启动
访问 Portainer Web 界面: 打开浏览器,访问
http://localhost:9000
,你将会看到 Portainer 的登录页面。设置管理员密码: 在首次访问时,你需要设置一个管理员账户的密码。选择 “Manage the Docker instance where Portainer is running” 以连接到本地 Docker 守护程序。
选择 Docker 环境: 在 “Endpoint” 部分,选择 “Docker” 以连接到本地 Docker 守护程序。
完成安装: 设置完成后,点击 “Connect”,你将进入 Portainer 的仪表板,可以在其中管理 Docker 容器、镜像、网络等。
安装NVIDIA Container Toolkit (如果你不是GPU服务器或者没有GPU虚拟化需求跳过这一步)
添加 NVIDIA Docker 的软件包存储库并在系统上安装 NVIDIA Container Toolkit。该工具包对将 NVIDIA GPU 与 Docker 容器集成有用。
让我们分解一下你提供的命令:
添加软件包存储库:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
- 第一行获取发行版信息。
- 第二行获取 NVIDIA Docker GPG 密钥并将其添加到系统中。
- 第三行根据你的发行版获取 NVIDIA Docker 存储库信息,并将其追加到 apt 源中。
更新软件包列表并安装 NVIDIA Container Toolkit:
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo apt-get update
:刷新软件包列表以包括新添加的 NVIDIA Docker 存储库。sudo apt-get install -y nvidia-container-toolkit
:安装 NVIDIA Container Toolkit。
重新启动 Docker:
sudo systemctl restart docker
- 重新启动 Docker 服务以应用通过安装 NVIDIA Container Toolkit 所做的更改。