docker入门
字数 1181 2025-08-18 17:33:34
Docker 入门与进阶教程
一、Docker 基础概念
Docker 是一个开源的应用容器引擎,基于轻量级虚拟化技术,允许开发者将应用及其依赖打包到一个可移植的容器中。
核心概念:
- 镜像(Image):类似于面向对象中的"类",是一个只读模板,用于创建容器
- 容器(Container):镜像的运行实例,类似于"对象"
- 仓库(Repository):集中存放镜像文件的场所
二、Docker 安装与帮助命令
1. 安装 Docker
请参考官方文档安装适合您操作系统的 Docker 版本。
2. 帮助命令
docker version # 查看 Docker 版本信息
docker info # 查看系统信息,包括容器和镜像数量等
docker [command] --help # 查看特定命令的帮助信息
三、镜像操作命令
1. 查看镜像
docker images # 列出本地镜像
docker images -a # 列出所有镜像(包括中间层镜像)
docker images -q # 只显示镜像ID
2. 搜索镜像
docker search mysql # 搜索 MySQL 镜像
docker search mysql --filter=STARS=3000 # 搜索星标≥3000的 MySQL 镜像
3. 下载镜像
docker pull mysql # 下载最新版 MySQL
docker pull mysql:5.7 # 下载指定版本的 MySQL
4. 删除镜像
docker rmi -f mysql:latest # 强制删除指定镜像
docker rmi -f cd80881c4e0e # 通过镜像ID删除
docker rmi -f $(docker images -aq) # 删除所有镜像
四、容器操作命令
1. 启动容器
docker run [选项] 镜像 [命令]
常用选项:
--name="容器名":指定容器名称-d:后台运行-it:交互式运行(通常配合 /bin/bash)-p:端口映射(主机端口:容器端口)-P:随机分配端口
示例:
docker run -it centos /bin/bash # 启动交互式 CentOS 容器
docker run -d --name nginx1 -p 443:80 nginx # 后台启动 Nginx
2. 查看容器
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(包括已停止的)
docker ps -a -n=2 # 查看最近运行的2个容器
3. 退出容器
exit:退出并停止容器Ctrl+P+Q:退出但不停止容器
4. 删除容器
docker rm -f 容器名/ID # 强制删除容器
docker rm -f $(docker ps -aq) # 删除所有容器
5. 容器生命周期管理
docker start 容器ID # 启动容器
docker restart 容器ID # 重启容器
docker stop 容器ID # 停止容器
docker kill 容器ID # 强制停止容器
6. 容器信息查看
docker logs 容器ID -tf --details # 查看容器日志(带时间戳和详情)
docker top 容器ID # 查看容器进程
docker inspect 容器ID # 查看容器元数据(全部信息)
7. 进入运行中的容器
docker exec -it 容器ID /bin/bash # 进入容器
8. 文件拷贝
docker cp 容器ID:容器内路径 宿主机路径 # 从容器拷贝到宿主机
docker cp 宿主机路径 容器ID:容器内路径 # 从宿主机拷贝到容器
五、Docker 镜像原理
1. UnionFS (联合文件系统)
Docker 镜像基于分层存储的 UnionFS 实现:
- 分层结构:镜像由多层只读层组成
- 写时复制:容器层在镜像层之上添加可写层
- 资源共享:相同的基础层可以被多个镜像共享
2. 镜像组成
- bootfs:包含 bootloader 和 kernel
- rootfs:包含 /dev, /proc, /bin 等标准目录
六、提交镜像
docker commit -m="描述信息" -a="作者" 容器ID 新镜像名:[TAG]
示例:
docker commit -a="jess" -m="add webapps app" 容器ID tomcat02:1.0
七、数据卷(Volume)
1. 数据卷介绍
数据卷是宿主机上的目录或文件,可以绕过联合文件系统实现:
- 数据持久化
- 容器间数据共享
- 数据备份和恢复
2. 数据卷管理
docker volume create my-volume # 创建数据卷
docker volume ls # 列出数据卷
docker volume rm my-volume # 删除数据卷
docker volume prune # 删除所有未使用的数据卷
默认数据卷位置:/var/lib/docker/volumes/
3. 挂载方式
# 挂载宿主机目录到容器
docker run -it -v /宿主机目录:/容器目录 镜像名 /bin/bash
# 匿名挂载(自动生成卷名)
docker run -d -P --name nginx1 -v /etc/nginx nginx
# 具名挂载(自定义卷名)
docker run -d -P --name nginx2 -v havename_nginx:/etc/nginx nginx
4. 权限设置
:ro # 只读(readonly)
:rw # 可读可写(readwrite,默认)
示例:
docker run -d -P --name nginx02 -v mynginx:/etc/nginx:ro nginx
八、Dockerfile 与 docker-compose
1. Dockerfile
用于自动化构建镜像的脚本文件(本教程未详细展开)
2. docker-compose
用于定义和运行多容器 Docker 应用的工具
基本命令:
docker-compose build # 构建镜像
docker-compose up -d # 启动容器(后台运行)
docker-compose down # 停止并移除容器
九、实战示例
1. 部署 Nginx
docker search nginx
docker pull nginx
docker run -d --name nginx1 -p 445:80 nginx
# 访问 http://127.0.0.1:445
2. 部署 Tomcat 并自定义
docker run -d -p 8080:8080 tomcat
docker exec -it 容器ID /bin/bash
# 在容器内进行修改后提交为新镜像
docker commit -a="作者" -m="描述" 容器ID tomcat02:1.0
十、最佳实践
- 使用官方镜像作为基础
- 合理规划数据卷,确保重要数据持久化
- 为容器设置资源限制(CPU、内存等)
- 保持镜像精简,删除不必要的文件
- 使用多阶段构建减小镜像体积
- 为生产环境配置适当的日志和监控
通过本教程,您应该已经掌握了 Docker 的核心概念和基本操作。Docker 的强大之处在于其轻量级和可移植性,能够显著提高开发和部署效率。