首页 > 系统教程 > LINUX > 正文

如何在Linux系统中安装Docker并运行容器?从零开始的容器化部署教程

星夢妙者
发布: 2025-08-31 09:20:01
原创
1026人浏览过
在Linux系统上安装Docker前,需确保系统已更新、清理旧版本Docker,并检查内核版本是否支持(如3.10以上),同时配置防火墙开放所需端口(如80端口),并预留足够磁盘空间以应对镜像和容器的存储需求。

如何在linux系统中安装docker并运行容器?从零开始的容器化部署教程

在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
登录后复制
容器来验证Docker是否正确安装并运行。

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
    登录后复制
    :将宿主机的80端口映射到容器的80端口。
  • --name my-nginx
    登录后复制
    :为容器指定一个易于识别的名称。
  • nginx:latest
    登录后复制
    :指定要使用的镜像(Nginx的最新版本)。

现在,你可以在浏览器中访问

http://localhost
登录后复制
(或你的Linux服务器IP地址),应该能看到Nginx的欢迎页面。

Calliper 文档对比神器
Calliper 文档对比神器

文档内容对比神器

Calliper 文档对比神器 28
查看详情 Calliper 文档对比神器

在安装Docker前,我的Linux系统需要做哪些准备?

在我看来,除了上面提到的系统更新和旧版本清理,还有几个关键点值得我们提前考虑,这能帮助我们避免一些常见的“坑”。

一个是对内核版本的检查。Docker依赖于Linux内核的特定功能,例如

cgroups
登录后复制
namespaces
登录后复制
。虽然现代Linux发行版的内核版本通常都足够新(例如,至少需要3.10版本),但如果你的系统比较老旧,可能需要考虑升级内核。Docker官方推荐使用
overlay2
登录后复制
作为存储驱动,它对内核版本也有一定要求,不过在大多数主流发行版中,这都不是问题。你可以通过
uname -r
登录后复制
命令查看当前内核版本。

其次是防火墙配置。容器默认的网络模式通常会通过

docker0
登录后复制
桥接网络与宿主机通信。如果你在宿主机上启用了防火墙(如
ufw
登录后复制
firewalld
登录后复制
),并且想要从外部访问容器中运行的服务(比如上面Nginx的80端口),那么你需要在防火墙中明确地开放这些端口。我见过不少新手在容器跑起来后,却发现外部无法访问,最后才发现是防火墙在“作祟”。例如,对于
ufw
登录后复制
,你需要运行
sudo ufw allow 80/tcp
登录后复制

还有一点是关于存储空间。Docker镜像和容器都会占用磁盘空间,特别是当你拉取了大量镜像或运行了许多容器后,磁盘空间可能会迅速增长。因此,在安装前,确保你的系统有足够的可用存储空间,并且最好将Docker的数据目录(默认为

/var/lib/docker
登录后复制
)放置在一个空间充裕的分区上。如果空间紧张,后续清理无用镜像和容器(
docker system prune
登录后复制
)将成为你常做的事情。

Docker容器的生命周期管理:启动、停止、删除与查看日志

容器的生命周期管理是日常使用Docker的核心。理解这些命令,就像是掌握了与容器对话的语言。我个人觉得,这套命令设计得非常直观,一旦上手,效率会非常高。

  • 查看运行中的容器:
    docker ps
    登录后复制
    • 这个命令会列出所有当前正在运行的容器。它会显示容器ID、镜像、命令、创建时间、状态、端口映射和容器名称。
  • 查看所有容器(包括已停止的):
    docker ps -a
    登录后复制
    • 当你发现容器不见了,但又不确定它是否已停止时,这个命令就派上用场了。
  • 启动容器:
    docker start [容器ID或名称]
    登录后复制
    • 例如:
      docker start my-nginx
      登录后复制
      。这会将一个已停止的容器重新启动。
  • 停止容器:
    docker stop [容器ID或名称]
    登录后复制
    • 例如:
      docker stop my-nginx
      登录后复制
      。这会向容器发送一个
      SIGTERM
      登录后复制
      信号,让其优雅地关闭。Docker会等待一段时间(默认为10秒),如果容器没有关闭,则会发送
      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或名称]
      登录后复制
      :只显示最新的100行日志。
  • 进入运行中的容器:
    docker exec -it [容器ID或名称] bash
    登录后复制
    • 这会打开一个交互式的shell会话,让你像SSH到虚拟机一样在容器内部操作。对于调试和查看容器内部文件系统非常有用。
      bash
      登录后复制
      可以替换为
      sh
      登录后复制
      或其他容器内存在的shell。

这些命令构成了我们日常与Docker容器交互的基础。熟练掌握它们,能让你在容器化的世界里游刃有余。

如何确保Docker容器数据持久化?理解卷(Volumes)的重要性

这是容器化部署中一个非常关键且容易被忽视的问题:数据持久化。容器本身是设计为无状态的,这意味着如果你不做特殊处理,容器内部产生的数据会在容器被删除时一并消失。这对于数据库、用户上传文件等需要长期保存的数据来说是灾难性的。我个人在早期使用Docker时,就曾因为没有正确处理数据持久化而丢失过一些测试数据,那次经历让我深刻认识到了卷(Volumes)的重要性。

Docker提供了几种机制来实现数据持久化,其中最常用且推荐的是卷(Volumes)

1. 卷(Named Volumes)

命名卷是Docker管理数据持久化的首选方式。它们由Docker引擎创建和管理,通常存储在宿主机文件系统的特定位置(例如

/var/lib/docker/volumes/
登录后复制
下),但其具体路径我们通常不需要关心,因为Docker会负责管理。

  • 创建命名卷:
    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
    登录后复制
    是我们在宿主机上创建的命名卷,它被挂载到Nginx容器内部的
    /usr/share/nginx/html
    登录后复制
    路径。这意味着所有写入到容器内
    /usr/share/nginx/html
    登录后复制
    的数据,都会实际存储在
    my-data-volume
    登录后复制
    中,即使容器被删除,卷中的数据依然存在。

  • 优点:
    • 由Docker管理,易于备份、迁移和在不同容器之间共享。
    • 与宿主机的文件系统路径解耦,更具可移植性。
    • 在Linux上,命名卷的性能通常优于绑定挂载,因为它们绕过了宿主机的一些文件系统抽象层。

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
    登录后复制

  • 优点:
    • 直接控制宿主机上的文件,非常适合开发场景。
    • 易于理解和操作,因为路径是显式的。
  • 缺点:
    • 宿主机路径是硬编码的,降低了容器的可移植性。
    • 权限管理可能更复杂,需要确保宿主机和容器用户对挂载点有适当的读写权限。
    • 在某些情况下,性能可能不如命名卷。

什么时候选择哪种方式?

我通常会这样选择:

  • 生产环境和需要长期存储的数据(如数据库数据、日志文件): 优先使用命名卷。它们由Docker管理,更健壮,更易于备份和恢复。
  • 开发环境和需要频繁修改宿主机文件并同步到容器的场景(如Web应用源代码): 优先使用绑定挂载

3.

tmpfs
登录后复制
挂载

这是一种特殊类型的挂载,它将数据存储在宿主机的内存中,而不是磁盘上。这使得数据读写速度非常快,但缺点是数据是非持久化的,一旦容器停止,数据就会丢失。我通常会在需要高性能临时存储或不希望数据写入磁盘的场景中使用,比如缓存或敏感的临时文件。

docker run -d -p 80:80 \
  --name my-nginx-tmpfs \
  --tmpfs /usr/share/nginx/html \
  nginx:latest
登录后复制

理解并正确使用这些数据持久化机制,是构建健壮、可靠的容器化应用的关键。它能让你在享受容器带来的便利的同时,避免数据丢失的风险。

以上就是如何在Linux系统中安装Docker并运行容器?从零开始的容器化部署教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号