当前位置: 首页 > web >正文

Docker从入门到精通

一、Docker基础概念

1.1 虚拟化技术概述

虚拟化技术是一种资源管理技术,它通过抽象和转换计算机的实体资源(如服务器、网络、内存及存储等),打破物理结构的限制,使用户能够更高效地利用这些资源。

虚拟化的核心价值

  • 提高硬件利用率(解决高性能硬件产能过剩和老旧硬件产能过低的问题)

  • 实现资源隔离和灵活分配

  • 简化管理和维护

1.2 Docker简介

Docker是一个开源的容器化平台,诞生于2013年,基于Go语言开发。它通过操作系统级别的虚拟化技术(Linux容器)实现轻量级的应用打包和部署。

Docker的核心优势

  1. 快速部署:容器启动时间通常在秒级

  2. 资源高效:相比传统虚拟机,资源占用更少

  3. 环境一致性:开发、测试、生产环境高度一致

  4. 易于扩展:支持微服务架构和持续交付

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 最佳实践建议

  1. 容器设计原则

    • 一个容器只运行一个进程

    • 使用官方基础镜像

    • 最小化镜像层数

  2. 安全性建议

    • 不使用root用户运行容器

    • 定期更新基础镜像

    • 限制容器资源使用

  3. 性能优化

    • 合理设置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作为现代应用开发和部署的重要工具,熟练掌握它将极大提升您的工作效率和应用的可移植性。建议从简单的应用容器化开始实践,逐步深入理解更高级的特性。

http://www.xdnf.cn/news/16082.html

相关文章:

  • IPv4枯竭时代:从NAT技术到IPv6的演进之路
  • SpringBoot6-10(黑马)
  • git的版本冲突
  • 【未限制消息消费导致数据库CPU告警问题排查及解决方案】
  • Vue 分析脚手架
  • stm32内存分析
  • 传输层协议
  • 基于MySQL实现分布式调度系统的选举算法
  • C 语言的指针复习笔记
  • Pytorch版本、安装和检验
  • AJAX 概念与 axios 使用
  • 深度解析 HTML `loading` 属性:优化网页性能的秘密武器
  • rancher使用rke在华为云多网卡的服务器上安装k8s集群问题处理
  • 4x4矩阵教程
  • YModem在Android上的实现(四)
  • Oracle数据库索引性能机制深度解析:从数据结构到企业实践的系统性知识体系
  • Android 单编 framework 相关产物输出介绍
  • Unreal ARPG笔记
  • Oracle自治事务——从问题到实践的深度解析
  • Linux 文件操作详解:结构、系统调用、权限与实践
  • 搭建前端页面,介绍对应标签
  • 合并pdf工具下载
  • 深入解析Hadoop MapReduce Shuffle过程:从环形缓冲区溢写到Sort与Merge源码
  • Idea或Pycharm上.idea的忽略提交的问题总结
  • 从 C# 到 Python:项目实战第五天的飞跃
  • Linux 721 创建实现镜像的逻辑卷
  • 表单校验--数组各项独立校验
  • mac安装node的步骤
  • uni-app开发小程序,根据图片提取主题色值
  • 查看两个tv and 手机模拟器的ip