Docker在Linux系统中的实战指南:从安装到部署
在容器化技术席卷全球的当下,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等)。
更多推荐
所有评论(0)