一、Docker 简介

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何支持 Docker 的环境中,实现 "一次构建,到处运行"。

二、Docker 基本概念

  1. 镜像(Image):Docker 镜像类似于虚拟机镜像,是一个只读模板,包含运行应用程序所需的代码、运行时、库、环境变量和配置文件。

  2. 容器(Container):容器是镜像的运行实例,是一个独立的可执行软件包,包含运行应用所需的所有内容。

  3. 仓库(Repository):仓库是集中存放镜像文件的场所,分为公开仓库(如 Docker Hub)和私有仓库。

三、Docker 安装

不同操作系统的安装方法略有不同,具体可参考 Docker 官方文档

安装完成后,可通过以下命令验证是否安装成功:

docker --version  # 查看 Docker 版本
docker info       # 查看 Docker 详细信息

四、Docker 常用命令

1. 镜像相关命令

# 从仓库拉取镜像
docker pull [镜像名]:[标签]
# 示例:拉取最新版 Ubuntu 镜像
docker pull ubuntu:latest
​
# 列出本地所有镜像
docker images
​
# 删除镜像
docker rmi [镜像ID/镜像名]
# 强制删除
docker rmi -f [镜像ID/镜像名]
​
# 构建镜像(根据 Dockerfile)
docker build -t [镜像名]:[标签] [Dockerfile所在目录]
# 示例
docker build -t myapp:1.0 .
​
# 查看镜像历史
docker history [镜像名]
​
# 保存镜像到本地文件
docker save -o [保存的文件名.tar] [镜像名]
​
# 从本地文件加载镜像
docker load -i [镜像文件.tar]

2. 容器相关命令

# 新建并启动容器
docker run [选项] [镜像名] [命令]
# 常用选项:
# -d: 后台运行容器
# -p: 端口映射,格式为 主机端口:容器端口
# -v: 数据卷挂载,格式为 主机目录:容器目录
# -e: 设置环境变量
# --name: 指定容器名称
# -it: 交互式运行
# 示例:交互式运行 Ubuntu 容器
docker run -it --name myubuntu ubuntu /bin/bash
​
# 列出正在运行的容器
docker ps
# 列出所有容器(包括停止的)
docker ps -a
​
# 启动已停止的容器
docker start [容器ID/容器名]
​
# 停止运行中的容器
docker stop [容器ID/容器名]
​
# 重启容器
docker restart [容器ID/容器名]
​
# 强制停止容器
docker kill [容器ID/容器名]
​
# 删除容器
docker rm [容器ID/容器名]
# 强制删除运行中的容器
docker rm -f [容器ID/容器名]
​
# 进入运行中的容器
# 方法1:
docker exec -it [容器ID/容器名] /bin/bash
# 方法2(适用于较旧版本):
docker attach [容器ID/容器名]
​
# 查看容器日志
docker logs [容器ID/容器名]
# 实时查看日志
docker logs -f [容器ID/容器名]
​
# 查看容器详细信息
docker inspect [容器ID/容器名]
​
# 查看容器内进程
docker top [容器ID/容器名]
​
# 复制容器内文件到主机
docker cp [容器ID/容器名]:[容器内路径] [主机路径]
# 复制主机文件到容器内
docker cp [主机路径] [容器ID/容器名]:[容器内路径]

3. 仓库相关命令

# 登录到 Docker 仓库
docker login [仓库地址]
# 默认为 Docker Hub
​
# 从仓库登出
docker logout [仓库地址]
​
# 推送镜像到仓库
docker push [仓库地址/用户名/镜像名]:[标签]
​
# 搜索仓库中的镜像
docker search [关键词]

4. 数据卷相关命令

# 创建数据卷
docker volume create [卷名]
​
# 查看所有数据卷
docker volume ls
​
# 查看数据卷详情
docker volume inspect [卷名]
​
# 删除数据卷
docker volume rm [卷名]
​
# 清理未使用的数据卷
docker volume prune

5. 网络相关命令

# 创建网络
docker network create [网络名]
​
# 查看所有网络
docker network ls
​
# 查看网络详情
docker network inspect [网络名]
​
# 删除网络
docker network rm [网络名]
​
# 连接容器到网络
docker network connect [网络名] [容器名]
​
# 断开容器与网络的连接
docker network disconnect [网络名] [容器名]

6. 系统命令

# 查看 Docker 系统信息
docker info
​
# 显示 Docker 磁盘使用情况
docker system df
​
# 清理未使用的资源(镜像、容器、网络、数据卷)
docker system prune
# 强制清理(包括未被使用的镜像)
docker system prune -a

五、Docker 实战示例

  1. 运行一个 Nginx 容器

# 拉取 Nginx 镜像
docker pull nginx
​
# 运行 Nginx 容器,映射 80 端口
docker run -d -p 80:80 --name mynginx nginx
  1. 运行一个 MySQL 容器

# 拉取 MySQL 镜像
docker pull mysql:5.7
​
# 运行 MySQL 容器
docker run -d -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -e MYSQL_DATABASE=mydb \
  --name mymysql \
  mysql:5.7
  1. 构建并运行自定义镜像

# 创建 Dockerfile 后执行构建
docker build -t myapp:1.0 .
​
# 运行自定义镜像
docker run -d -p 8080:8080 --name myapp myapp:1.0

六、总结

Docker 提供了一套强大的工具链,用于容器化应用程序的构建、分发和运行。掌握上述基本命令可以满足日常使用需求,更高级的用法可以参考 Docker 官方文档和相关教程。

通过容器化技术,可以有效解决 "开发环境能运行,生产环境不能运行" 的问题,提高开发效率和部署一致性。