在容器化技术席卷全球的当下,Docker凭借其“一次构建、到处运行”的核心优势,成为开发者和运维人员的必备工具。而Linux作为Docker的原生支持平台,二者的结合更是能最大化发挥容器化的高效、轻量特性。本文将从Docker基础概念出发,详细讲解在Linux系统中Docker的安装配置、核心操作以及实战部署案例,帮助新手快速

一、先搞懂:Docker到底是什么?

简单来说,Docker是一个开源的容器化平台,它可以将应用程序及其依赖项打包成一个标准化的“容器”,然后这个容器可以在任何支持Docker的Linux系统上运行,而无需担心环境差异导致的“在我这能跑,到你那就崩”的问题。

这里要区分两个核心概念,避免和虚拟机混淆:

  • 容器:基于Linux内核的 Namespace 和 Cgroups 技术实现的轻量级隔离环境,共享宿主机内核,启动速度快(秒级),资源占用少。

  • 虚拟机:基于硬件虚拟化技术,需要模拟完整的操作系统内核,启动慢(分钟级),资源占用高。

Docker的核心组件包括:Docker Engine(核心运行引擎)、镜像(Image,容器的模板)、容器(Container,镜像的运行实例)、仓库(Repository,存储镜像的地方,如Docker Hub)。

二、Linux系统安装Docker(以CentOS 7/8为例)

Docker官方对Linux系统有明确的要求,推荐使用内核版本3.10及以上的CentOS、Ubuntu等发行

版。下面以应用最广泛的CentOS为例,讲解完整的安装步骤。

上手Docker+Linux的开发运维模式。

2.1 前置准备:卸载旧版本(若有)

如果系统中之前安装过旧版本的Docker(如docker、docker-io等),需要先卸载,避免冲突:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.2 安装依赖包

安装Docker需要依赖yum-utils、device-mapper-persistent-data、lvm2等工具,执行以下命令安装:

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

2.3 安装Docker Engine

Docker Engine是Docker的核心组件,执行以下命令安装最新版本的Docker Engine和容器化工具:

sudo yum install -y docker-ce docker-ce-cli containerd.io

如果需要安装指定版本,可以先查看可用版本,再选择安装:

# 查看可用版本
yum list docker-ce --showduplicates | sort -r

# 安装指定版本(示例:docker-ce-24.0.6)
sudo yum install -y docker-ce-24.0.6 docker-ce-cli-24.0.6 containerd.io

2.4 启动Docker并设置开机自启

安装完成后,需要手动启动Docker服务,并设置为开机自启,避免每次重启系统都要重新启动:

# 启动Docker服务
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 验证Docker是否启动成功
sudo systemctl status docker

如果输出中显示“active (running)”,则说明Docker启动成功。

2.5 验证安装:运行Hello World镜像

Docker官方提供了一个简单的Hello World镜像,用于验证Docker环境是否正常工作。执行以下命令:

sudo docker run hello-world

如果运行成功,会输出一段欢迎信息,说明Docker已经可以正常拉取镜像并运行容器了。

三、Linux下Docker核心操作实战

安装完成后,我们来学习一些最常用的Docker操作,涵盖镜像管理、容器管理等核心功能。

3.1 镜像管理(核心命令)

镜像是容器的基础,所有容器都是基于镜像创建的。常用的镜像操作命令如下:

# 1. 拉取镜像(从Docker Hub拉取,格式:docker pull 镜像名:标签)
# 示例:拉取最新版本的Nginx镜像
sudo docker pull nginx:latest

# 2. 查看本地所有镜像
sudo docker images

# 3. 搜索镜像(从Docker Hub搜索可用镜像)
sudo docker search nginx

# 4. 删除镜像(格式:docker rmi 镜像ID/镜像名:标签)
# 注意:如果镜像正在被容器使用,需要先删除容器才能删除镜像
sudo docker rmi nginx:latest

3.2 容器管理(核心命令)

容器是镜像的运行实例,我们的应用程序都是在容器中运行的。常用的容器操作命令如下:

# 1. 启动容器(格式:docker run [参数] 镜像名:标签)
# 示例1:启动Nginx容器,后台运行,映射宿主机80端口到容器80端口
sudo docker run -d -p 80:80 --name my-nginx nginx:latest
# 参数说明:
# -d:后台运行容器(守护进程模式)
# -p 宿主机端口:容器端口:端口映射
# --name:给容器起一个自定义名称

# 示例2:启动容器并进入交互式终端(如Ubuntu容器)
sudo docker run -it --name my-ubuntu ubuntu:latest /bin/bash
# 参数说明:
# -it:交互式终端模式(可以直接在容器内输入命令)
# /bin/bash:容器启动后执行的命令

# 2. 查看正在运行的容器
sudo docker ps

# 3. 查看所有容器(包括停止的)
sudo docker ps -a

# 4. 停止容器(格式:docker stop 容器ID/容器名)
sudo docker stop my-nginx

# 5. 启动已停止的容器
sudo docker start my-nginx

# 6. 重启容器
sudo docker restart my-nginx

# 7. 进入正在运行的容器(格式:docker exec [参数] 容器ID/容器名 命令)
# 示例:进入my-nginx容器的交互式终端
sudo docker exec -it my-nginx /bin/bash

# 8. 删除容器(格式:docker rm 容器ID/容器名)
# 注意:删除容器前需要先停止容器
sudo docker stop my-nginx
sudo docker rm my-nginx

# 9. 查看容器日志(格式:docker logs 容器ID/容器名)
# 示例:查看my-nginx容器的最新10条日志
sudo docker logs --tail 10 my-nginx

四、实战:在Linux上用Docker部署一个Web应用

下面我们通过一个实际案例,演示如何用Docker部署一个简单的Web应用(以Nginx为例),让大家直观感受Docker的使用流程。

4.1 步骤1:拉取Nginx镜像

sudo docker pull nginx:latest

4.2 步骤2:创建自定义Web页面

为了让Nginx服务展示我们自定义的页面,我们先在宿主机创建一个目录,用于存放Web页面文件,并编写一个简单的index.html:

# 1. 创建宿主机目录
sudo mkdir -p /home/docker-nginx/html

# 2. 编写自定义index.html
sudo vim /home/docker-nginx/html/index.html

在index.html中添加以下内容:

<!DOCTYPE html>
<html>
<head>
    <title>Docker + Nginx 部署示例</title>
</head>
<body>
    <h1 style="text-align: center; margin-top: 50px;">Hello Docker! 这是我的第一个Docker部署的Web应用</h1>
</body>
</html>

4.3 步骤3:启动Nginx容器,挂载自定义目录

使用-v参数将宿主机的自定义目录挂载到容器的Nginx默认Web目录(/usr/share/nginx/html),这样容器就会使用我们自定义的页面:

sudo docker run -d -p 80:80 \
  -v /home/docker-nginx/html:/usr/share/nginx/html \
  --name my-custom-nginx nginx:latest

4.4 步骤4:验证部署结果

部署完成后,我们可以通过宿主机的IP地址在浏览器中访问,或者使用curl命令验证:

curl http://localhost:80

如果输出我们编写的index.html内容,说明部署成功!此时,只要修改宿主机/home/docker-nginx/html目录下的文件,容器中的Web页面就会实时更新,无需重启容器。

五、常见问题排查

在Linux上使用Docker的过程中,可能会遇到一些问题,这里整理了几个常见问题及解决方案:

  • 问题1:启动Docker服务失败,提示“Job for docker.service failed because the control process exited with error code” 解决方案:检查是否配置了错误的镜像加速器,或daemon.json文件格式错误。可以先备份并删除daemon.json文件,然后重新启动Docker。

  • 问题2:运行容器时提示“port is already allocated” 解决方案:该端口已被宿主机其他服务或Docker容器占用,更换一个未被占用的端口(如将-p 80:80改为-p 8080:80)。

六.总结

本文详细讲解了Docker在Linux系统中的安装配置、核心操作以及实战部署案例。通过Docker,我们可以轻松实现应用程序的环境隔离和快速部署,极大提升开发和运维效率。对于新手来说,建议先熟练掌握本文中的核心命令,然后结合实际项目多动手实践,逐步深入学习Docker的高级特性(如Docker Compose、Docker Swarm等)。

更多推荐