Docker 常用命令介绍
一文搞定 Docker 常用命令
Docker常用命令主要包括基础操作到镜像、容器、数据卷、网络管理,再到运维清理,基本能满足日常开发和部署需求。
一、基础命令
(一)查看版本和系统信息
想知道自己装的 Docker 是不是最新版?敲命令
docker version
执行后,会显示客户端和服务器的版本信息,包括版本号、API 版本等。比如这样:
Client: Docker Engine - CommunityVersion: 20.10.17API version: 1.41...Server: Docker Engine - CommunityEngine:Version: 20.10.17API version: 1.41 (minimum version 1.12)...
如果想了解更详细的系统信息,比如 Docker 的根目录、镜像和容器数量等,就用:
docker info
这个命令能帮你快速掌握 Docker 的运行状态,排查问题时很有用。
(二)获取帮助
记不住命令参数?别怕,Docker 自带 “说明书”。遇到不懂的命令,直接用:
docker help
它会列出所有可用的命令分类。要是想了解某个具体命令的用法,比如docker run,就输入:
docker run --help
可看到docker run的各种参数和使用示例,比翻文档方便。
二、镜像管理
镜像就像是容器的 “模板”,容器是基于镜像创建的。学会管理镜像,是玩转 Docker 的第一步。
(一)搜索镜像
想要某个软件的镜像?先在 Docker Hub 上搜一搜:
docker search ubuntu
执行后会列出所有包含 “ubuntu” 关键词的镜像,包括镜像名称、描述、星级(表示受欢迎程度)、是否官方发布等信息。一般优先选官方镜像,更靠谱。
(二)拉取镜像
找到想要的镜像后,就可以把它下载到本地,用docker pull命令:
docker pull ubuntu:latest
这里的latest是镜像的标签(tag),用来区分不同版本。如果不指定标签,默认就是latest。要是想拉取特定版本,比如 Ubuntu 20.04,就写成:
docker pull ubuntu:20.04
拉取过程中会显示每个层的下载进度,耐心等一会儿就好。
(三)查看本地镜像
查看本地环境有哪些镜像
docker images
会列出所有本地镜像,包括仓库名、标签、镜像 ID、创建时间和大小。比如:
REPOSITORY TAG IMAGE ID CREATED SIZEubuntu latest 27941809078c 2 weeks ago 77.8MBubuntu 20.04 f643c72bc252 2 weeks ago 72.8MB
(四)删除镜像
如果觉得有些镜像不怎么用占空间?果断删掉!用docker rmi命令:
docker rmi ubuntu:20.04
如果镜像正在被容器使用,会删除失败。这时候可以加-f参数强制删除:
docker rmi -f ubuntu:20.04
要是想删除多个镜像,把镜像 ID 或名称用空格隔开就行。
三、容器管理
容器是镜像的运行实例,大部分 Docker 操作都是围绕容器展开
(一)创建并运行容器
最常用的命令之一就是docker run,它能创建并启动一个容器。比如创建一个 Ubuntu 容器,并进入交互式终端:
docker run -it ubuntu /bin/bash
这里的-i表示保持标准输入打开,-t表示分配一个伪终端,两者结合就能和容器交互了。/bin/bash是在容器启动后执行的命令,也就是打开 bash 终端。
执行后,命令行会变成容器的终端提示符,这时候你就在容器里操作了,可以像在本地 Ubuntu 系统一样执行命令。退出容器用exit命令。
如果想让容器在后台运行,就用-d参数:
docker run -d --name my-nginx nginx
--name参数给容器起了个名字 “my-nginx”,方便后续操作。这样 nginx 容器就会在后台默默运行了。
(二)查看容器
想知道当前有哪些容器在运行?用:
docker ps
它会列出运行中容器的 ID、名称、使用的镜像、启动命令、创建时间、状态、端口映射等信息。
要是想查看所有容器(包括停止的),就加个-a参数:
docker ps -a
(三)停止、启动和重启容器
容器运行久了想暂停?用docker stop:
docker stop my-nginx
这里的 “my-nginx” 是容器名,也可以用容器 ID 代替。
想重新启动停止的容器,用docker start:
docker start my-nginx
要是容器有点 “小脾气”,可以重启一下:
docker restart my-nginx
(四)删除容器
不用的容器及时清理,用docker rm命令:
docker rm my-nginx
注意,正在运行的容器不能直接删除,要先停止或者加-f参数强制删除:
docker rm -f my-nginx
如果想删除所有已停止的容器,可以用这个命令:
docker rm $(docker ps -a -q)
docker ps -a -q会列出所有容器的 ID,然后用docker rm批量删除。
(五)查看容器日志
容器运行中出了问题?看看日志就知道。用docker logs命令:
docker logs my-nginx
如果想实时查看日志输出,加个-f参数:
docker logs -f my-nginx
就像tail -f命令一样,会持续显示新的日志内容,方便监控容器运行状态。
(六)进入容器
有时候需要进入正在运行的容器内部操作,用docker exec命令:
docker exec -it my-nginx bash
-it参数和前面docker run里的一样,也是为了获取交互式终端。执行后就进入了 “my-nginx” 容器的 bash 终端,可以查看配置文件、安装软件等。
四、数据卷管理,数据持久化必备
容器里的数据默认是临时的,容器删除后数据就没了。想要数据持久化,用数据卷(Volume)
(一)创建数据卷
用docker volume create命令创建一个数据卷:
docker volume create my-data
这样就创建了一个名为 “my-data” 的数据卷。
(二)查看数据卷列表
想知道有哪些数据卷?用:
docker volume ls
会列出所有数据卷的名称和驱动类型。
(三)挂载数据卷到容器
创建容器时,把数据卷挂载到容器的某个目录,容器里这个目录的数据就会保存在数据卷里。比如:
docker run -d -v my-data:/app/data --name my-app nginx
这里的-v my-data:/app/data表示把 “my-data” 数据卷挂载到容器的/app/data目录。不管容器怎么删,/app/data里的数据都会保存在 “my-data” 里。
(四)删除数据卷
不用的数据卷也可以删除:
docker volume rm my-data
注意,正在被容器使用的数据卷不能删除,要先删除使用它的容器。
五、网络管理
多个容器之间要通信?Docker 的网络功能
(一)查看网络列表
Docker 默认有几种网络模式,用docker network ls看看:
docker network ls
会显示网络 ID、名称、驱动类型等信息,比如 bridge(桥接网络)、host(主机网络)、none(无网络)等。
(二)创建自定义网络
默认的 bridge 网络虽然能用,但自定义网络更安全、方便。创建一个:
docker network create my-network
这样就创建了一个名为 “my-network” 的自定义桥接网络。
(三)运行容器并加入网络
让容器加入自定义网络,它们之间就能通过容器名通信了:
docker run -d --name app1 --network my-network nginxdocker run -d --name app2 --network my-network nginx
现在 app1 容器里 ping app2,就能 ping 通了,不用记 IP 地址,是不是很方便?
(四)查看网络详情
想知道某个网络里有哪些容器?用docker network inspect命令:
docker network inspect my-network
会显示网络的详细信息,包括连接到这个网络的容器、IP 地址等。
(五)删除网络
不用的网络可以删除:
docker network rm my-network
正在被容器使用的网络不能删除,要先让容器离开网络或者删除容器。
六、Docker 运维命令
Docker 用久了,会产生一些无用资源,定期维护能让它跑得更顺畅
(一)清理无用资源
清理未使用的镜像、容器、数据卷和网络,可以用这个 “docker prune” 命令:
docker system prune
执行后会提示要删除的内容,输入y确认就行。如果想连未使用的镜像也一起删,加-a参数:
docker system prune -a
(二)查看磁盘使用情况
想知道 Docker 占用了多少磁盘空间?用:
docker system df
会显示镜像、容器、本地卷、构建缓存等占用的空间。
(三)导出和导入镜像
有时候需要把镜像复制到另一台机器,可以先导出:
docker save -o ubuntu.tar ubuntu:latest
-o参数指定输出文件,这里把 ubuntu:latest 镜像导出成 ubuntu.tar 文件。
到了另一台机器,用docker load导入:
docker load -i ubuntu.tar
这样就能在新机器上使用这个镜像了。