Docker 常用命令教程
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 的核心是容器,容器可以被看作是一个轻量级的、可移植的、自给自足的软件单元。
一、基本概念
在开始学习命令之前,我们先简单了解几个核心概念:
- 镜像 (Image):Docker 镜像是一个只读模板,包含了创建 Docker 容器所需的所有文件和配置,例如操作系统、应用程序、库、依赖等。你可以把它看作是虚拟机的“模板”或“快照”。
- 容器 (Container):Docker 容器是镜像的运行实例。你可以启动、停止、删除容器,每个容器都是相互隔离的、独立的运行环境。
- 仓库 (Registry):Docker 仓库是用于存放 Docker 镜像的地方,例如 Docker Hub 是一个公共的镜像仓库。你可以从仓库下载镜像,也可以将自己的镜像上传到仓库。
二、常用命令
1. docker pull
:拉取镜像
从 Docker Hub 或其他镜像仓库下载镜像到本地。 场景: 你需要运行一个 Nginx Web 服务器。
docker pull nginx
这将从 Docker Hub 下载最新的 Nginx 镜像。您也可以指定版本:
docker pull nginx:1.20
2. docker images
:列出本地镜像
显示本地主机上已下载的所有 Docker 镜像。
场景: 你想查看本地有哪些可用的镜像可以用来创建容器。
docker images
输出会包含仓库名(REPOSITORY)、标签(TAG)、镜像ID(IMAGE ID)、创建时间(CREATED)和大小(SIZE)等信息。
3. docker rmi
:删除本地镜像
从本地主机删除一个或多个 Docker 镜像。
场景: 你不再需要某个旧版本的 Node.js 镜像,想要释放磁盘空间。
docker rmi <镜像ID或镜像名:标签>
例如:
docker rmi 7d88524602e0
docker rmi node:14
要强制删除正在被容器使用的镜像,需要先停止并删除相关的容器,或者使用 -f
参数强制删除(不推荐,可能导致数据丢失)。
4. docker search
:搜索镜像
在 Docker Hub 上搜索可用的镜像。
场景: 你需要一个用于 MySQL 数据库的 Docker 镜像,但不确定使用哪个。
docker search mysql
输出会列出与关键词相关的镜像,包括描述、星级(表示受欢迎程度)和是否官方。
5. docker push
:推送镜像
将本地镜像上传到 Docker Hub 或其他配置的镜像仓库。
场景: 你创建了一个自定义的 Web 应用程序镜像,想要分享给团队或部署到生产环境。
docker tag <本地镜像名:标签> <仓库用户名>/<镜像名:标签>
docker login # 如果未登录需要先登录 Docker Hub 或其他仓库
docker push <仓库用户名>/<镜像名:标签>
例如:
docker tag my-web-app:latest yourusername/my-web-app:latest
docker login
docker push yourusername/my-web-app:latest
三、容器操作
Docker 容器是使用 Docker 镜像创建的运行实例。
1. docker run
:创建并运行容器
使用指定的镜像创建一个新的容器并运行它。
场景: 你想基于刚才拉取的 Nginx 镜像启动一个 Web 服务器,并将容器的 80 端口映射到主机的 8080 端口。
docker run -d -p 8080:80 --name my-nginx nginx
-d
:在后台(守护进程)运行容器。-p 8080:80
:将主机的 8080 端口映射到容器的 80 端口。--name my-nginx
:为容器指定一个名称,方便后续操作。nginx
:使用的镜像名称。
其他常见 docker run
参数:
-i
:以交互模式运行容器,通常与-t
结合使用。-t
:为容器分配一个伪终端(tty)。-it
:常用的组合,用于进入容器的交互式 Shell。-v <主机目录>:<容器目录>
:将主机上的目录或命名卷挂载到容器中,用于数据持久化。-e <环境变量>=<值>
:设置容器内的环境变量。--rm
:容器退出后自动删除。--network <网络名称>
:将容器连接到指定的 Docker 网络。
2. docker ps
:列出正在运行的容器
显示当前正在运行的 Docker 容器。
场景: 你想查看哪些容器正在运行以及它们的状态。
docker ps
输出会包含容器ID(CONTAINER ID)、镜像(IMAGE)、命令(COMMAND)、创建时间(CREATED)、状态(STATUS)、端口映射(PORTS)和名称(NAMES)等信息。
3. docker ps -a
:列出所有容器
显示所有容器,包括正在运行的和已经停止的。
场景: 你想查看之前运行过的容器记录。
docker ps -a
4. docker stop
:停止容器
停止一个或多个正在运行的容器。
场景: 你想临时停止之前启动的 my-nginx
容器。
docker stop my-nginx
可以使用容器ID或容器名称来指定要停止的容器。
5. docker start
:启动已停止的容器
启动一个或多个已经停止的容器。
场景: 你想重新启动之前停止的 my-nginx
容器。
docker start my-nginx
可以使用容器ID或容器名称来指定要启动的容器。
6. docker restart
:重启容器
重启一个或多个正在运行的容器。
场景: 你修改了应用程序的配置,需要重启容器使更改生效。
docker restart my-nginx
可以使用容器ID或容器名称来指定要重启的容器。
7. docker rm
:删除容器
删除一个或多个已经停止的容器。
场景: 你不再需要某个已经停止的容器,想要清理掉。
docker rm <容器ID或容器名称>
例如:
docker rm e7a3b5c1d2f0
docker rm my-nginx
要删除正在运行的容器,需要先停止它。可以使用 -f
参数强制删除正在运行的容器,但不推荐。
8. docker logs
:查看容器日志
查看容器的输出日志。
场景: 你的 Web 应用程序在容器中运行,你想查看它的运行日志以排查问题。
docker logs my-nginx
可以使用 -f
参数实时跟踪日志输出。
docker logs -f my-nginx
9. docker exec
:在运行的容器中执行命令
在一个正在运行的容器中执行命令。
场景: 你的数据库容器正在运行,你想进入容器的 Shell 执行一些管理命令。
docker exec -it <容器ID或容器名称> bash
-it
:以交互模式分配一个伪终端到容器的标准输入、输出和错误流。bash
:要在容器中执行的命令(通常是 Shell)。
10. docker cp
:在主机和容器之间复制文件
将文件或目录从主机复制到容器,或从容器复制到主机。
场景: 你想将主机上的一个配置文件复制到正在运行的 Web 应用程序容器中。
docker cp <主机路径> <容器ID或容器名称>:<容器路径>
或者从容器复制到主机:
docker cp <容器ID或容器名称>:<容器路径> <主机路径>
例如:
docker cp ./myconfig.ini my-nginx:/etc/nginx/conf.d/default.conf
docker cp my-nginx:/var/log/nginx/access.log ./access.log.bak
11. docker stats
:查看容器资源使用情况
显示容器的 CPU、内存、网络 I/O 和磁盘 I/O 等资源使用统计信息。
场景: 你想监控容器的资源消耗情况。
docker stats
可以指定容器名称或 ID 来查看特定容器的统计信息。
docker stats my-nginx
12. docker inspect
:查看容器/镜像的详细信息
显示关于容器或镜像的底层信息,以 JSON 格式输出。
场景: 你想查看容器的网络配置或环境变量等详细信息。
docker inspect my-nginx
docker inspect nginx
可以使用 --format
参数自定义输出格式。
四、其他常用命令
1. docker network
:管理 Docker 网络
用于管理 Docker 网络,例如创建、列出和删除网络。
docker network ls
docker network create my-network
docker network connect my-network my-container
docker network disconnect my-network my-container
docker network rm my-network
2. docker volume
:管理 Docker 数据卷
用于管理 Docker 数据卷,用于持久化存储容器数据。
docker volume ls
docker volume create my-volume
docker run -d -v my-volume:/data --name my-data-container some-image
docker volume inspect my-volume
docker volume rm my-volume
3. docker compose
:使用 Docker Compose 管理多容器应用
用于定义和运行多容器 Docker 应用程序。通常通过 docker-compose.yml
文件进行配置。
docker-compose up -d # 根据 docker-compose.yml 文件创建并启动服务
docker-compose down # 停止并删除 docker-compose.yml 文件中定义的服务
docker-compose ps # 列出 Docker Compose 管理的容器
docker-compose logs <service_name> # 查看特定服务的日志
五、常用 Docker 命令表格
命令 | 描述 | 常用场景 |
---|---|---|
docker pull | 从镜像仓库拉取镜像 | 下载运行应用所需的镜像,例如 docker pull nginx |
docker images | 列出本地镜像 | 查看本地可用的镜像列表 |
docker rmi | 删除本地镜像 | 清理不再需要的镜像,释放磁盘空间 |
docker search | 在 Docker Hub 上搜索镜像 | 查找满足特定需求的镜像,例如 docker search mysql |
docker run | 创建并运行一个新的容器 | 启动一个新的应用容器,例如 docker run -d -p 8080:80 nginx |
docker ps | 列出正在运行的容器 | 查看当前正在运行的容器及其状态 |
docker ps -a | 列出所有容器(包括已停止的) | 查看所有容器的记录,包括历史运行的容器 |
docker stop | 停止一个或多个正在运行的容器 | 临时停止正在运行的容器 |
docker start | 启动一个或多个已停止的容器 | 重新启动之前停止的容器 |
docker restart | 重启一个或多个正在运行的容器 | 需要重新加载配置或服务时重启容器 |
docker rm | 删除一个或多个已停止的容器 | 清理不再需要的容器 |
docker logs | 查看容器的日志输出 | 排查容器运行问题,查看应用程序日志 |
docker exec | 在运行的容器中执行命令 | 进入容器内部执行操作,例如查看文件、执行脚本等 |
docker cp | 在主机和容器之间复制文件 | 上传配置文件到容器,从容器导出日志文件等 |
docker stats | 查看容器的资源使用情况(CPU、内存、网络等) | 监控容器的性能和资源消耗 |
docker inspect | 查看容器或镜像的详细信息(JSON 格式) | 获取容器或镜像的底层配置信息,例如网络配置、环境变量等 |
docker network ls | 列出 Docker 网络 | 查看当前 Docker 网络列表 |
docker volume ls | 列出 Docker 数据卷 | 查看当前 Docker 数据卷列表 |
docker compose up | 根据 docker-compose.yml 文件创建并启动服务(多容器应用) | 一键启动定义好的多容器应用程序 |
docker compose down | 停止并删除 docker-compose.yml 文件中定义的服务(多容器应用) | 停止并清理通过 Docker Compose 启动的应用 |
希望这个教程能够帮助你更好地理解和使用 Docker!