在Linux系统上安装Docker前,需确保系统已更新、清理旧版本Docker,并检查内核版本是否支持(如3.10以上),同时配置防火墙开放所需端口(如80端口),并预留足够磁盘空间以应对镜像和容器的存储需求。

在Linux系统上安装Docker并运行容器,其核心在于遵循官方推荐的安装流程,这通常涉及添加Docker的软件源、安装核心组件,然后通过几个简单的命令就能拉取镜像并启动你的第一个应用。这不仅简化了应用的部署和环境配置,更重要的是,它为我们提供了一个高度隔离且可移植的运行环境,极大地提升了开发与运维的效率。在我看来,掌握这一技能是现代软件工程师的必备素养之一。
要在Linux系统上从零开始部署Docker并运行容器,我通常会推荐以下步骤,以Ubuntu/Debian系系统为例,因为它最常见,但核心思想适用于大多数发行版。
1. 系统准备与旧版本清理
在开始之前,确保你的系统是最新的,并且移除任何可能存在的旧版Docker安装,这能避免很多意想不到的冲突。
sudo apt update sudo apt upgrade -y # 移除旧版本Docker(如果存在) sudo apt remove docker docker-engine docker.io containerd runc
2. 安装必要的依赖包
Docker需要一些包来通过HTTPS使用APT仓库。
sudo apt install ca-certificates curl gnupg lsb-release -y
3. 添加Docker官方GPG密钥
这是为了验证下载的软件包的真实性。
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
4. 设置Docker稳定版仓库
将Docker的稳定版仓库添加到APT源列表中。
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. 安装Docker Engine
更新APT包索引并安装Docker Engine、containerd和Docker Compose。
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
6. 验证安装
运行经典的
hello-world
sudo docker run hello-world
如果看到类似“Hello from Docker!”的输出,说明Docker已成功安装。
7. 配置非root用户使用Docker
默认情况下,运行
docker
sudo
docker
sudo
sudo usermod -aG docker $USER newgrp docker # 或者直接注销并重新登录
8. 运行你的第一个实用容器
现在,我们可以尝试运行一个更实用的容器,比如Nginx Web服务器。
docker run -d -p 80:80 --name my-nginx nginx:latest
-d
-p 80:80
--name my-nginx
nginx:latest
现在,你可以在浏览器中访问
http://localhost
在我看来,除了上面提到的系统更新和旧版本清理,还有几个关键点值得我们提前考虑,这能帮助我们避免一些常见的“坑”。
一个是对内核版本的检查。Docker依赖于Linux内核的特定功能,例如
cgroups
namespaces
overlay2
uname -r
其次是防火墙配置。容器默认的网络模式通常会通过
docker0
ufw
firewalld
ufw
sudo ufw allow 80/tcp
还有一点是关于存储空间。Docker镜像和容器都会占用磁盘空间,特别是当你拉取了大量镜像或运行了许多容器后,磁盘空间可能会迅速增长。因此,在安装前,确保你的系统有足够的可用存储空间,并且最好将Docker的数据目录(默认为
/var/lib/docker
docker system prune
容器的生命周期管理是日常使用Docker的核心。理解这些命令,就像是掌握了与容器对话的语言。我个人觉得,这套命令设计得非常直观,一旦上手,效率会非常高。
docker ps
docker ps -a
docker start [容器ID或名称]
docker start my-nginx
docker stop [容器ID或名称]
docker stop my-nginx
SIGTERM
SIGKILL
docker restart [容器ID或名称]
stop
start
docker rm [容器ID或名称]
docker rm my-nginx
-f
--force
docker rm -f my-nginx
docker rmi [镜像ID或名称]
docker rmi nginx:latest
docker logs [容器ID或名称]
docker logs -f [容器ID或名称]
tail -f
docker logs --tail 100 [容器ID或名称]
docker exec -it [容器ID或名称] bash
bash
sh
这些命令构成了我们日常与Docker容器交互的基础。熟练掌握它们,能让你在容器化的世界里游刃有余。
这是容器化部署中一个非常关键且容易被忽视的问题:数据持久化。容器本身是设计为无状态的,这意味着如果你不做特殊处理,容器内部产生的数据会在容器被删除时一并消失。这对于数据库、用户上传文件等需要长期保存的数据来说是灾难性的。我个人在早期使用Docker时,就曾因为没有正确处理数据持久化而丢失过一些测试数据,那次经历让我深刻认识到了卷(Volumes)的重要性。
Docker提供了几种机制来实现数据持久化,其中最常用且推荐的是卷(Volumes)。
1. 卷(Named Volumes)
命名卷是Docker管理数据持久化的首选方式。它们由Docker引擎创建和管理,通常存储在宿主机文件系统的特定位置(例如
/var/lib/docker/volumes/
docker volume create my-data-volume
docker run -d -p 80:80 \ --name my-nginx-with-volume \ -v my-data-volume:/usr/share/nginx/html \ nginx:latest
这里,
my-data-volume
/usr/share/nginx/html
/usr/share/nginx/html
my-data-volume
2. 绑定挂载(Bind Mounts)
绑定挂载允许你将宿主机上的任意文件或目录直接挂载到容器内部。这对于开发环境非常方便,可以直接将宿主机的源代码目录挂载到容器中,实现代码的实时同步。
docker run -d -p 80:80 \ --name my-nginx-bind-mount \ -v /path/to/your/host/html:/usr/share/nginx/html \ nginx:latest
这里的
/path/to/your/host/html
/usr/share/nginx/html
什么时候选择哪种方式?
我通常会这样选择:
3. tmpfs
这是一种特殊类型的挂载,它将数据存储在宿主机的内存中,而不是磁盘上。这使得数据读写速度非常快,但缺点是数据是非持久化的,一旦容器停止,数据就会丢失。我通常会在需要高性能临时存储或不希望数据写入磁盘的场景中使用,比如缓存或敏感的临时文件。
docker run -d -p 80:80 \ --name my-nginx-tmpfs \ --tmpfs /usr/share/nginx/html \ nginx:latest
理解并正确使用这些数据持久化机制,是构建健壮、可靠的容器化应用的关键。它能让你在享受容器带来的便利的同时,避免数据丢失的风险。
以上就是如何在Linux系统中安装Docker并运行容器?从零开始的容器化部署教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号