Docker容器入门

目录

简介

一、Docker概念

1.1 什么是Docker容器技术

1.2 Docker与传统虚拟化的区别

1.3 Docker的核心优势

二、CentOS系统Docker环境部署

2.1 准备工作:系统配置

2.2 配置阿里云镜像仓库

2.3 安装Docker引擎

2.4 内核参数优化

三、Docker镜像操作

3.1 获取镜像:从仓库拉取资源

3.2 查看镜像信息:管理本地镜像库

3.3 镜像标签管理:为镜像添加别名

3.4 镜像删除与迁移:清理和备份镜像

四、Docker容器操作

4.1 容器创建与启动

4.2 容器状态管理

4.3 容器交互与调试

4.4 容器迁移与备份

五、Docker数据卷管理

5.1 数据卷基础操作

5.2 容器与数据卷挂载

六、总结

6.1 典型应用场景

6.2 下一步学习建议


简介

Docker作为当前最流行的容器化技术,彻底改变了应用程序的开发、测试和部署方式。本文将从Docker的核心概念出发,逐步引导你完成环境搭建,并深入掌握镜像与容器的操作技巧,为后续的容器化应用开发奠定坚实基础。

一、Docker概念

1.1 什么是Docker容器技术

Docker是一种轻量级的操作系统级虚拟化技术,它能够将应用程序及其依赖项打包成一个独立的容器单元。这个容器就像一个"盒子",里面包含了运行应用所需的所有资源:代码、运行时环境、系统工具和库文件等。

与传统虚拟机不同,Docker容器共享宿主机的操作系统内核,因此具有轻量、启动快速的特点。这种设计使得单个物理主机可以同时运行数千个容器,极大提高了资源利用率。

1.2 Docker与传统虚拟化的区别

特性

Docker容器

传统虚拟机

启动速度

秒级

分钟级

资源占用

几乎无额外开销

损耗约50%系统资源

单机支持量

上千个容器

几十个虚拟机

隔离级别

资源级隔离

操作系统级完全隔离

1.3 Docker的核心优势
  • 快速部署:容器启动仅需数秒,支持应用的快速迭代和弹性扩展
  • 环境一致性:一次构建,处处运行,彻底解决"在我机器上能运行"的问题
  • 资源高效:共享内核的设计让单机可运行数千容器,服务器利用率提升3-5倍
  • 微服务友好:每个微服务可独立打包为容器,支持独立部署和扩缩容

二、CentOS系统Docker环境部署

2.1 准备工作:系统配置

首先需要对系统进行基础配置,确保Docker能正常运行:

# 关闭防火墙
systemctl stop firewalld      # 停止防火墙服务
systemctl disable firewalld   # 禁止防火墙开机自启

# 关闭SELinux
setenforce 0                  # 临时关闭SELinux
sed -i 's/=enforcing/=disabled/' /etc/selinux/config  # 永久关闭

解释:防火墙和SELinux可能会干扰Docker的网络功能和文件访问,因此需要提前关闭。​​setenforce 0​​是临时生效,修改配置文件则是永久生效。

2.2 配置阿里云镜像仓库

使用国内镜像源可以显著提高下载速度:

# 下载Docker官方YUM仓库配置
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 修改仓库配置,适配CentOS 8
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/docker-ce.repo

# 清除旧缓存并生成新索引
dnf clean all
dnf makecache

解释:默认的Docker官方仓库在国内访问速度较慢,通过阿里云镜像源可以加速下载。​​$releasever​​​变量替换为8以适配CentOS 8系统,​​$basearch​​指定64位架构。

2.3 安装Docker引擎

完成仓库配置后,即可安装Docker:

# 安装Docker CE稳定版
dnf -y install docker-ce

# 配置国内镜像加速
mkdir -p /etc/docker
cat >/etc/docker/daemon.json <

解释:​​daemon.json​​​配置文件中指定了国内镜像加速器地址,解决Docker Hub访问受限问题。​​native.cgroupdriver=systemd​​​确保Docker与CentOS的cgroup驱动兼容。​​docker version​​命令会显示客户端和服务端版本信息,确认安装成功。

2.4 内核参数优化

为了支持Docker的高级网络功能,需要优化内核参数:

# 添加内核参数
cat >>/etc/sysctl.conf<

解释:​​ip_forward=1​​启用IP转发,支持容器间网络通信;桥接相关参数确保Docker容器的网络防火墙规则正常工作。

三、Docker镜像操作

3.1 获取镜像:从仓库拉取资源
# 拉取指定版本的Nginx镜像
docker pull nginx:1.24.0

# 拉取仓库中所有标签的镜像
docker pull -a nginx

# 通过摘要精确拉取镜像
docker pull nginx@sha256:abcdef1234567890

解释:​​docker pull​​​命令从镜像仓库下载镜像。不指定标签时默认拉取​​latest​​​版本;​​-a​​参数用于获取一个镜像的所有版本;摘要(DIGEST)是镜像的唯一哈希标识,确保拉取精确版本。

3.2 查看镜像信息:管理本地镜像库
# 列出本地所有镜像
docker images

# 显示镜像详细JSON信息
docker inspect nginx:1.24.0

# 只显示镜像ID
docker images -q nginx

# 过滤显示虚悬镜像(无标签镜像)
docker images -f dangling=true

解释:​​docker images​​​输出包含仓库名、标签、镜像ID、大小等信息;​​docker inspect​​​返回底层详细数据,常用于调试;​​-q​​​参数在脚本中便于批量处理;​​dangling=true​​过滤出构建失败或未正确标记的镜像。

3.3 镜像标签管理:为镜像添加别名
# 为镜像添加新标签
docker tag nginx:1.24.0 nginx:v1

# 查看重命名后的镜像
docker images nginx

解释:​​docker tag​​​不会创建新镜像,只是为现有镜像添加别名。例如将​​nginx:1.24.0​​​标记为​​nginx:v1​​,便于版本管理和识别。

3.4 镜像删除与迁移:清理和备份镜像
# 通过标签删除镜像
docker rmi nginx:v1

# 通过ID强制删除镜像
docker rmi -f c15a2b3c4d5e

# 导出镜像为tar包
docker save -o nginx.tar nginx:1.24.0

# 从tar包导入镜像
docker load < nginx.tar

注意事项:删除镜像前需确保没有容器依赖该镜像(可用​​docker ps -a​​​检查);​​docker save​​保存的镜像包含所有层信息,适合跨环境迁移;镜像删除是不可逆操作,执行前请确认。

四、Docker容器操作

4.1 容器创建与启动
# 创建交互式容器(未启动)
docker create -it centos:7

# 直接创建并启动容器
docker run -d -p 8080:80 nginx:1.24.0

# 带卷挂载的容器启动
docker run -v /data:/usr/share/nginx/html -d nginx:1.24.0

参数解析

  • ​-i​​:保持标准输入打开,支持交互
  • ​-t​​:分配伪终端,模拟交互式环境
  • ​-d​​:后台运行容器
  • ​-p 8080:80​​:将容器80端口映射到宿主机8080端口
  • ​-v /data:/usr/share/nginx/html​​:挂载宿主机目录到容器内
4.2 容器状态管理
# 启动已创建的容器
docker start container_id

# 停止容器(等待10秒后强制终止)
docker stop container_id

# 强制终止容器
docker kill container_id

# 删除停止的容器
docker rm container_id

# 强制删除运行中的容器
docker rm -f container_id

最佳实践:停止容器时优先使用​​docker stop​​,给应用程序足够时间处理事务;删除容器前确保数据已备份或持久化存储。

4.3 容器交互与调试
# 进入容器的交互式shell
docker exec -it container_id /bin/bash

# 执行单次命令并查看输出
docker exec container_id ls /etc

# 查看容器日志
docker logs -f container_id

解释:​​docker exec​​​允许在运行中的容器内执行命令,​​-it​​​参数组合提供交互式终端;​​docker logs​​​用于查看容器内应用的输出日志,​​-f​​参数实时跟踪日志更新。

4.4 容器迁移与备份
# 导出容器文件系统为tar包
docker export container_id > centos7.tar

# 从tar包导入生成新镜像
cat centos7.tar | docker import - centos7:exported

# 对比export与save:
# docker save保存镜像所有层(包括历史)
# docker export仅保存容器当前文件系统

应用场景:当需要将配置好的容器迁移到其他环境时,​​export​​​和​​import​​​是常用方案。但需注意​​export​​不保留镜像历史,导入后生成的新镜像需要重新标记。

五、Docker数据卷管理

5.1 数据卷基础操作
# 创建命名数据卷
docker volume create my_vol

# 查看所有数据卷
docker volume ls

# 查看数据卷详细信息
docker volume inspect my_vol

# 删除闲置数据卷
docker volume prune

解释:数据卷是独立于容器生命周期的持久化存储,即使容器删除,数据卷中的数据依然保留。​​docker volume prune​​会删除所有未被容器使用的数据卷。

5.2 容器与数据卷挂载
# 挂载宿主机目录到容器
docker run -v /host/path:/container/path nginx:1.24.0

# 挂载命名数据卷到容器
docker run -v my_vol:/usr/share/nginx/html nginx:1.24.0

# 只读挂载(容器无法修改数据)
docker run -v /host/path:/container/path:ro nginx:1.24.0

最佳实践:对于数据库等需要持久化存储的应用,建议使用命名数据卷而非宿主机目录,以保证跨主机迁移的兼容性;敏感配置文件建议使用只读挂载。

六、总结

Docker作为云原生技术的基石,其价值不仅在于应用容器化,更在于它推动了软件开发、测试和部署流程的全面革新。

6.1 典型应用场景
  • 开发环境一致性:团队成员使用相同的Docker镜像作为开发环境,避免"环境不一致"问题
  • CI/CD流水线:代码提交后自动构建Docker镜像,测试通过后直接部署到生产环境
  • 微服务架构:每个微服务独立打包为容器,支持动态扩缩容和故障隔离
  • 云原生应用:与Kubernetes结合,实现大规模容器集群管理和服务编排
6.2 下一步学习建议

掌握本文内容后,建议进一步学习:

  1. Dockerfile构建镜像的高级技巧
  2. Docker Compose多容器应用编排
  3. Kubernetes集群管理与服务发现
  4. 容器网络原理与安全配置

接下来建议通过实战项目巩固所学知识,例如将一个Java Web应用容器化,或者搭建基于Docker的微服务架构。随着学习的深入,你会发现Docker与Kubernetes、Prometheus等技术的结合将释放出更大的技术能量,为构建弹性、可扩展的现代应用系统奠定基础。

你可能感兴趣的:(docker,容器,云原生,部署,基础操作)