Docker从入门到精通
一、Docker基础概念
1.1 虚拟化技术概述
虚拟化技术是一种资源管理技术,它通过抽象和转换计算机的实体资源(如服务器、网络、内存及存储等),打破物理结构的限制,使用户能够更高效地利用这些资源。
虚拟化的核心价值:
-
提高硬件利用率(解决高性能硬件产能过剩和老旧硬件产能过低的问题)
-
实现资源隔离和灵活分配
-
简化管理和维护
1.2 Docker简介
Docker是一个开源的容器化平台,诞生于2013年,基于Go语言开发。它通过操作系统级别的虚拟化技术(Linux容器)实现轻量级的应用打包和部署。
Docker的核心优势:
-
快速部署:容器启动时间通常在秒级
-
资源高效:相比传统虚拟机,资源占用更少
-
环境一致性:开发、测试、生产环境高度一致
-
易于扩展:支持微服务架构和持续交付
1.3 容器与虚拟机对比
特性 | Docker容器 | 传统虚拟机 |
---|---|---|
启动时间 | 秒级 | 分钟级 |
性能 | 接近原生 | 有损耗 |
硬盘占用 | MB级 | GB级 |
隔离性 | 进程级别 | 系统级别 |
系统支持量 | 单机支持上千容器 | 一般几十个 |
https://media/image2.png
二、Docker安装与配置
2.1 CentOS系统安装
# 更新yum包
yum update -y# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2# 设置阿里云镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装Docker
yum install -y docker-ce# 查看版本
docker -v
2.2 Ubuntu系统安装
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
sudo rm -rf /var/lib/docker# 安装依赖
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 设置稳定版仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io# 将当前用户加入docker组
sudo usermod -aG docker $USER
newgrp docker
2.3 配置镜像加速器
bashsudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com","https://mirror.ccs.tencentyun.com","https://docker.mirrors.ustc.edu.cn"]
}
EOF# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
2.4 Docker服务管理
# 启动Docker
sudo systemctl start docker# 停止Docker
sudo systemctl stop docker# 重启Docker
sudo systemctl restart docker# 查看状态
sudo systemctl status docker# 设置开机启动
sudo systemctl enable docker# 查看概要信息
docker info
三、Docker核心命令详解
3.1 镜像管理
命令 | 说明 | 示例 |
---|---|---|
docker images | 查看本地镜像 | docker images |
docker search | 搜索镜像 | docker search nginx |
docker pull | 拉取镜像 | docker pull nginx:latest |
docker rmi | 删除镜像 | docker rmi nginx |
docker build | 构建镜像 | docker build -t myapp . |
镜像操作示例:
# 拉取CentOS 7镜像
docker pull centos:7# 删除所有镜像
docker rmi $(docker images -q)# 查看镜像详情
docker inspect nginx
3.2 容器管理
命令 | 说明 | 示例 |
---|---|---|
docker run | 创建并运行容器 | docker run -it centos:7 /bin/bash |
docker ps | 查看容器 | docker ps -a |
docker start/stop | 启动/停止容器 | docker stop mynginx |
docker exec | 进入运行中的容器 | docker exec -it mynginx bash |
docker rm | 删除容器 | docker rm mynginx |
docker logs | 查看容器日志 | docker logs -f mynginx |
容器操作示例:
# 创建交互式容器
docker run -it --name=mycentos centos:7 /bin/bash# 创建守护式容器
docker run -d --name=mytomcat -p 8080:8080 tomcat# 查看容器IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' mytomcat# 文件拷贝
docker cp test.txt mycentos:/home/
四、应用部署实战
4.1 MySQL部署
# 拉取MySQL 5.7镜像
docker pull mysql:5.7# 创建容器
docker run -d --name=mymysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-v /mydata/mysql/data:/var/lib/mysql \
mysql:5.7# 远程连接
mysql -h 宿主机IP -P 3306 -u root -p
4.2 Nginx部署
# 拉取官方镜像
docker pull nginx# 运行容器
docker run -d --name=mynginx -p 80:80 \
-v /myweb/html:/usr/share/nginx/html \
nginx# 测试访问
curl http://宿主机IP
4.3 Redis部署
# 拉取最新版Redis
docker pull redis# 启动容器
docker run -d --name=myredis -p 6379:6379 \
-v /mydata/redis/data:/data \
redis --requirepass "yourpassword"# 客户端连接
redis-cli -h 宿主机IP -p 6379 -a yourpassword
五、Docker高级应用
5.1 数据卷与挂载
# 目录挂载
docker run -d --name=myapp \
-v /host/data:/container/data \
-v /host/config:/etc/config \
myimage# 查看挂载情况
docker inspect myapp | grep Mounts
5.2 网络配置
# 创建自定义网络
docker network create mynetwork# 指定网络运行容器
docker run -d --net=mynetwork --name=service1 myimage
docker run -d --net=mynetwork --name=service2 myimage# 查看网络详情
docker network inspect mynetwork
5.3 Dockerfile构建镜像
示例Dockerfile:
FROM python:3.8
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
构建命令:
docker build -t mypythonapp .
docker run -d -p 5000:5000 mypythonapp
六、私有仓库搭建
6.1 搭建私有Registry
# 拉取Registry镜像
docker pull registry# 运行私有仓库
docker run -d --name=myregistry -p 5000:5000 \
-v /myregistry:/var/lib/registry \
registry# 配置daemon.json
echo '{"insecure-registries":["your-server-ip:5000"]}' > /etc/docker/daemon.json
systemctl restart docker
6.2 镜像推送与拉取
# 标记镜像
docker tag nginx your-server-ip:5000/mynginx# 推送镜像
docker push your-server-ip:5000/mynginx# 从私有仓库拉取
docker pull your-server-ip:5000/mynginx
七、最佳实践与问题排查
7.1 最佳实践建议
-
容器设计原则:
-
一个容器只运行一个进程
-
使用官方基础镜像
-
最小化镜像层数
-
-
安全性建议:
-
不使用root用户运行容器
-
定期更新基础镜像
-
限制容器资源使用
-
-
性能优化:
-
合理设置CPU和内存限制
-
使用数据卷而非容器内存储
-
避免过度容器化
-
7.2 常见问题解决
问题1:端口冲突
# 查看端口占用
netstat -tulnp | grep 端口号
# 修改容器映射端口
docker run -p 新端口:容器端口
问题2:容器无法启动
# 查看日志
docker logs 容器名
# 以调试模式运行
docker run -it --entrypoint=/bin/bash 镜像名
问题3:磁盘空间不足
# 清理无用容器
docker container prune
# 清理无用镜像
docker image prune -a
通过本指南,您应该已经掌握了Docker的核心概念和实用技能。Docker作为现代应用开发和部署的重要工具,熟练掌握它将极大提升您的工作效率和应用的可移植性。建议从简单的应用容器化开始实践,逐步深入理解更高级的特性。