Docker 常用命令及镜像选择指南
Docker 常用命令及镜像选择指南
Docker是一种开源的容器化平台,可以让开发者将应用程序及其依赖打包到一个轻量级的容器中,实现快速部署和运行。本文将详细介绍Docker的基本概念、镜像选择建议以及常用命令的使用方法,帮助读者快速掌握Docker的使用技巧。
1.Docker基本组成
- docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
- docker仓库(Registry):用来保存各种打包好的软件镜像;仓库分为公有仓库和私有仓库。(很类似 maven)
- docker镜像(Images):软件打包好的镜像;放在docker仓库中;
- docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
2.镜像选择
当你需要下载一个特定的软件(如MySQL)时,Docker Hub仓库中可能会有大量相关的镜像。以下是一些选择镜像的建议:
2.1、镜像推荐选择方案
- 搜索官方镜像:在 Docker Hub 上搜索
mysql
。官方镜像通常会带有“官方”标签。 - 验证标识:找下面两种标识的也是可以的,一个是发行商是经过验证的,一个是oss验证
- 下载次数和评分:查看镜像的下载次数和评分,选择下载量多、评分高的镜像。
- 维护情况:阅读镜像页面的详细信息和使用说明。官方镜像页面通常会提供如何配置、启动和管理容器的详细信息。检查镜像的维护情况,查看最近的更新记录和问题反馈。选择维护频繁、问题反馈及时的镜像。
2.2版本选择
- 避免使用latest标签:在生产环境中,最好避免使用
latest
标签,因为它的内容可能会随时间变化,导致不可预见的问题。 - 使用具体版本号或 LTS 标签:
LTS
代表长期支持(Long-Term Support)。它指的是那些被维护时间更长,通常更加稳定和可靠的版本。指定特定版本号或使用lts
标签可以确保每次部署的镜像是一致的,减少由于镜像版本变动带来的风险。
3.Docker 命令
3.1镜像管理
拉取镜像:从远程仓库中拉取镜像到本地。
docker pull <image_name>
列出镜像:查看本地所有镜像的信息。
docker images
输出结果包含以下列:
REPOSITORY:镜像的仓库名称
TAG:镜像的版本标签
IMAGE ID:镜像的唯一标识
CREATED:镜像创建时间
SIZE:镜像大小
删除镜像:删除本地的某个镜像。
docker rmi <image_name>
例如:
docker rmi tomcat:9.0.20-jre8-alpine
删除镜像时,如果镜像正在被运行的容器使用,会收到错误提示。需要先停止并删除使用该镜像的容器,然后才能删除该镜像。
docker rm <容器名/id>
构建镜像:使用当前目录的 Dockerfile 构建镜像。
docker build -t <image_name> .
3.2容器管理
运行容器:使用指定镜像启动容器。
docker run -d -p 80:80 --name <container_name> <image_name> ...
常用参数:
-d
:后台运行容器,并返回容器ID-i
:以交互模式运行容器,通常与-t
同时使用-P
:随机端口映射,不推荐使用-p
:指定端口映射,格式为:主机端口:容器端口-t
:为容器重新分配一个伪输入终端,通常与-i
同时使用--name
:为容器指定一个名称-h
:指定容器的hostname-e
:设置环境变量--net
:指定容器的网络连接类型--link
:添加链接到另一个容器,不推荐使用-v
:绑定一个卷--privileged
:指定容器是否为特权容器--restart
:指定容器停止后的重启策略--rm
:指定容器停止后自动删除容器,不能与-d
同时使用列出运行中的容器和所有容器:查看当前正在运行的容器或所有容器(包括已停止的)。
docker ps docker ps -a
输出结果包含以下列:
CONTAINER ID:容器ID
IMAGE:使用的镜像
COMMAND:启动容器时运行的命令
CREATED:容器的创建时间
STATUS:容器状态(有7种:created、restarting、running、removing、paused、exited、dead)
PORTS:容器的端口信息
NAMES:容器名称
停止容器:停止指定容器。
docker stop <container_id>
启动重启容器:启动已停止的容器或重启容器。
docker start <container_id> docker restart <container_id>
删除容器:删除指定容器。
docker rm <container_id>
可以使用以下参数:
-f
:通过 SIGKILL 信号强制删除一个运行中的容器-l
:移除容器间的网络连接,而非容器本身-v
:删除与容器关联的卷查看容器日志:查看容器输出的日志。
docker logs <container_id>
可以使用以下参数:
-f
:跟踪日志输出--tail
:仅列出最新N条容器日志进入容器:进入正在运行的容器。
docker exec -it <container_id> /bin/bash
对于没有bash命令的系统,可以使用:
docker exec -it tomcat9.2 sh
参数说明:
-i
:即使没有附加也保持STDIN 打开-t
:分配一个伪终端
3.3网络管理
列出网络:列出所有 Docker 网络。
docker network ls
创建网络:创建新的 Docker 网络。
docker network create <network_name>
连接容器到网络:将容器连接到指定网络。
docker network connect <network_name> <container_name>
断开容器与网络的连接:将容器从指定网络断开。
docker network disconnect <network_name> <container_name>
3.4卷管理
删除容器并同时删除数据卷:删除容器并同时删除数据卷。
sudo docker rm -v <container_name_or_id>
删除所有未使用的数据卷:删除所有未使用的数据卷。
sudo docker volume prune
查询闲置的数据卷:查看所有未挂载的数据卷。
sudo docker volume ls -f dangling=true
列出卷:列出所有卷。
docker volume ls
创建卷:创建新的卷。
docker volume create <volume_name>
查看卷详细信息:查看卷的详细信息。
docker volume inspect <volume_name>
删除卷:删除指定卷。
docker volume rm <volume_name>
3.5镜像和容器清理
- 清理未使用的镜像、容器、卷和网络:清理系统中未使用的资源。
docker system prune
3.6其他常用命令
查看 Docker 系统信息和容器详细信息:查看 Docker 的系统级别信息。
docker info
inspect详细信息:寻找容器在服务器存储位置
docker ps -a docker inspect 容器id/容器名称 | grep UpperDir cd到UpperDir所指向的地址,找到配置文件并修改,到这后,这个位置和你用exec命令进入容器内看到文件是一致的
显示 Docker 版本:显示 Docker 客户端和服务端的版本信息。
docker version
导出容器:将容器导出为一个 tar 文件。
docker export <container_id> -o <filename>.tar
导入镜像:从 tar 文件中导入镜像。
docker import <filename>.tar
镜像 save压缩load 解压:打包和解压镜像
docker save tomcat:9.0.20-jre8-alpine -o tomcat9.tar docker save tomcat:9.0.20-jre8-slim > tomcat9.slim.tar docker load -i linux.tar docker load < tomcat9.0.20.tar