# Docker常用命令

## 镜像相关命令
### 搜索镜像
```bash
docker search [镜像名称]
# 示例:docker search ubuntu

用于在Docker Hub等镜像仓库查找包含指定关键词的镜像,展示镜像名称、描述、星级等相关信息,方便查找合适的镜像资源。

拉取镜像

docker pull [镜像名称:标签]
# 示例:docker pull ubuntu:latest
docker pull mysql:5.7

从镜像仓库下载指定的镜像到本地,若不指定标签,默认拉取 latest(最新版)镜像,以获取对应软件或服务的基础镜像。

查看本地镜像

docker images

此命令会列出本地已下载的所有镜像,展示的信息包含 REPOSITORY(仓库名)、TAG(标签)、IMAGE ID(镜像ID)、CREATED(创建时间)、SIZE(大小)等,方便了解本地镜像的存储情况。

删除镜像

docker rmi [镜像名称或镜像ID]
# 示例:docker rmi ubuntu:latest
docker rmi [具体镜像ID]

用于删除本地不再需要的镜像,若镜像正在被容器使用,需先停止并删除关联的容器后,方可成功删除该镜像。

构建镜像(基于Dockerfile)

docker build -t [镜像名称:标签] [Dockerfile所在目录路径]
# 示例:docker build -t myapp:v1

依据包含构建指令的Dockerfile所在目录来构建自定义镜像,-t 参数用于指定镜像名称和标签,便于创建符合自身业务需求的镜像。

批量删除镜像(根据条件)

docker rmi $(docker images -q [筛选条件])
# 示例:docker rmi $(docker images -q -f "before=20240101")

可以通过结合 docker images -q(用于获取符合条件的镜像ID列表)与删除命令 docker rmi 来批量删除镜像。上述示例是删除在2024年1月1日之前创建的镜像,可根据具体的筛选条件(如名称、大小范围、创建时间等)灵活运用此方法进行批量清理。

容器相关命令

运行容器

docker run [参数] [镜像名称:标签]
# 示例:
docker run -it ubuntu:latest /bin/bash
docker run -d -p 3306:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

常用参数解释:

  • -d:使容器后台运行(守护式运行),常用于运行长期提供服务的容器,如数据库容器等。
  • -it:分配交互式终端进入容器内部,方便在容器内执行命令操作,常用于调试等场景。
  • -p:进行端口映射(宿主机端口:容器内部端口),使得容器内运行的服务能被外部访问。
  • --name:指定容器的名称,便于后续对容器进行识别和操作。
  • -e:设置环境变量,用于向容器内传递配置相关信息,比如数据库的初始密码等。

查看运行中的容器

docker ps

列出当前正在运行的容器信息,包含 CONTAINER ID(容器ID)、IMAGE(所使用的镜像)、COMMAND(启动容器时执行的命令)、CREATED(创建时间)、STATUS(状态)、PORTS(端口映射情况)和 NAMES(容器名称)等,帮助掌握容器运行状态。

查看所有容器(包括已停止的)

docker ps -a

展示所有容器的详细信息,除了运行中的容器信息外,还能看到已停止容器的相关情况,用于全面了解容器的存在和过往运行记录。

停止容器

docker stop [容器名称或容器ID]
# 示例:docker stop mymysql
docker stop [具体容器ID]

正常停止正在运行的容器,让容器内的进程优雅地结束,避免数据丢失或异常情况。

启动容器

docker start [容器名称或容器ID]
# 示例:docker start mymysql
docker start [具体容器ID]

用于启动处于停止状态的容器,使其再次投入运行,恢复到之前配置的运行状态。

重启容器

docker restart [容器名称或容器ID]
# 示例:docker restart mymysql
docker restart [具体容器ID]

重启正在运行或已停止的容器,常用于更新配置后或者容器出现异常需要重新初始化的场景。

删除容器

docker rm [容器名称或容器ID]
# 示例:docker rm mymysql
docker rm [具体容器ID]

删除指定的容器,若容器正在运行,需先停止容器才能删除,清理不再使用的容器资源。

批量删除容器(根据条件)

docker rm $(docker ps -aq [筛选条件])
# 示例:docker rm $(docker ps -aq -f "status=exited")

结合 docker ps -aq(获取符合条件的容器ID列表)与 docker rm 来批量删除容器。示例中是删除状态为已退出的容器,也可依据创建时间、名称等其他条件灵活运用此方法清理容器。

进入容器

docker exec -it [容器名称或容器ID] [命令]
# 示例:docker exec -it mymysql bash

进入正在运行的容器内部执行指定命令,常用 bash 等命令进入交互式shell环境,便于在容器内操作文件、查看日志、调试程序等。

查看容器日志

docker logs [容器名称或容器ID]
# 示例:docker logs mymysql

查看容器运行产生的日志信息,通过分析日志来排查容器运行过程中出现的问题,比如服务启动失败原因、运行时的报错等。

网络相关命令

查看Docker网络列表

docker network ls

列出Docker系统中创建的所有网络,展示网络的 NETWORK ID(网络ID)、NAME(网络名称)、DRIVER(网络驱动类型)等信息,便于了解网络配置情况。

创建自定义网络

docker network create [网络名称]
# 示例:docker network create mynet

创建一个自定义的Docker网络,方便容器间按需求进行网络通信配置等,比如创建隔离的网络环境供特定的一组容器通信使用。

连接容器到网络

docker network connect [网络名称] [容器名称或容器ID]
# 示例:docker network connect mynet mymysql

将指定容器连接到已有的网络中,使其能与该网络内的其他容器通信,实现容器间的互联互通。

断开容器与网络的连接

docker network disconnect [网络名称] [容器名称或容器ID]
# 示例:docker network disconnect mynet mymysql

将容器从指定网络中断开连接,改变容器的网络通信范围,比如从某个测试网络中移除容器等。

数据卷相关命令

创建数据卷

docker volume create [数据卷名称]
# 示例:docker volume create mydata

创建一个Docker数据卷,用于持久化存储容器数据或者在容器间共享数据,确保数据的独立性和可复用性。

查看数据卷列表

docker volume ls

列出Docker系统中已创建的所有数据卷,显示数据卷的 DRIVER(驱动类型)、VOLUME NAME(数据卷名称)等信息,便于管理和知晓已有数据卷资源。

挂载数据卷到容器

docker run -v [数据卷名称或宿主机路径:容器内部路径] [镜像名称:标签]
# 示例:
docker run -v mydata:/data myapp:v1
docker run -v /home/user/data:/data myapp:v1

在运行容器时,将指定的数据卷或者宿主机上的目录挂载到容器内部相应路径,实现数据的持久化或共享,比如保存数据库的数据文件等。

删除数据卷

docker volume rm [数据卷名称]
# 示例:docker volume rm mydata

删除指定的数据卷,若数据卷正在被容器使用,则无法直接删除,要先解除关联后才能操作。