Docker 常用命令以及镜像选择
Docker 常用命令以及镜像选择
Docker基本组成
- docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
- docker仓库(Registry):用来保存各种打包好的软件镜像;仓库分为公有仓库和私有仓库。(很类似 maven)
- docker镜像(Images):软件打包好的镜像;放在docker仓库中;
- docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
镜像选择
比如你想下载mysql,但是docker hub仓库中有太多镜像了,你如何选择你想要的那个镜像呢?
2.1、镜像推荐选择方案
- 搜索官方镜像:在 Docker Hub 上搜索
mysql
。官方镜像通常会带有“官方”标签。 - 找下面两种标识的也是可以的,一个是发行商是经过验证的,一个是oss验证
- 下载次数和评分:查看镜像的下载次数和评分,选择下载量多、评分高的镜像。
- 维护情况:阅读镜像页面的详细信息和使用说明。官方镜像页面通常会提供如何配置、启动和管理容器的详细信息。检查镜像的维护情况,查看最近的更新记录和问题反馈。选择维护频繁、问题反馈及时的镜像。
2.2版本选择
- 避免使用latest:在生产环境中,最好避免使用
latest
标签,因为它的内容可能会随时间变化,导致不可预见的问题。 - 使用具体版本号或 LTS 标签:
LTS
代表长期支持(Long-Term Support)。它指的是那些被维护时间更长,通常更加稳定和可靠的版本。指定特定版本号或使用lts
标签可以确保每次部署的镜像是一致的,减少由于镜像版本变动带来的风险。
Docker 命令
3.1镜像管理
拉取镜像:拉取远程仓库中的镜像到本地。
docker pull <image_name>
列出镜像:列出本地所有镜像。
docker images
REPOSITORY
名称,一般和TAG组合使用形成唯一TAG
版本号IMAGE ID
镜像唯一idCREATED
是镜像作者发布到docker外网的时间,不是拉取到本地的时间SIZE
镜像大小删除镜像:删除本地的某个镜像。
docker rmi <image_name>
例如:docker rmi tomcat:9.0.20-jre8-alpine
除了按照名称也可以按照image ID进行删除,建议还是上面的名称删除,因为tagID在终端长度未完全显示,ID值会出现重复
当删除Docker镜像时,如果镜像正在被运行的容器使用,你会收到类似于“
Error response from daemon: conflict: unable to delete(cannot be forced) - image is being used by running container
”的错误消息。这表示你需要先停止并删除使用该镜像的容器,然后才能删除该镜像。docker rm <容器名/id>
构建镜像:使用当前目录的 Dockerfile 构建镜像。
docker build -t <image_name> .
3.2容器管理
运行容器:使用指定镜像启动容器,
-d
表示后台运行,-p
用于端口映射。 --name设置容器名或镜像名docker run -d -p 80:80 --name <container_name> <image_name> ....
常用参数 :
-d, --detach=false
: 后台运行容器,并返回容器ID ,加d就不能使用--rm了-i, --interactive=false
: 以交互模式运行容器,通常与 -t 同时使用-P, --publish-all=false
: 随机端口映射,容器内部端口随机映射到主机的端口。不推荐各位小伙伴 使用该参数-p, --publish=[]
: 指定端口映射,格式为:主机(宿主)端口:容器端口,推荐各位小伙伴们使用-t, --tty=false
: 为容器重新分配一个伪输入终端,通常与 -i 同时使用--name="nginx-lb"
: 为容器指定一个名称-h , --hostname="laosiji"
: 指定容器的hostname-e , --env=[]
: 设置环境变量,容器中可以使用该环境变量--net="bridge"
: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型--link=[]
: 添加链接到另一个容器;不推荐各位小伙伴使用该参数-v, --volume
: 绑定一个卷--privileged=false
: 指定容器是否为特权容器,特权容器拥有所有的capabilities--restart=no
: 指定容器停止后的重启策略no
: 容器退出时不重启on-failure
: 容器故障退出(返回值非零)时重启always
: 容器退出时总是重启,推荐各位小伙伴们使用--rm=false
: 指定容器停止后自动删除容器,不能以docker run -d启动的容器列出运行中的容器和所有容器
列出当前正在运行的容器。
docker ps
列出所有容器(包括已停止的)。
docker ps -a
参数详解输出详情介绍:
CONTAINER ID
: 容器 ID。IMAGE
: 使用的镜像。COMMAND
: 启动容器时运行的命令。CREATED
: 容器的创建时间。STATUS
: 容器状态。
状态有7种:created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS
: 容器的端口信息和使用的连接类型(tcp\udp)。NAMES
: 自动分配的容器名称。停止容器:大部分命令如果可以使用容器的id(container_id),其实也可以使用容器名
停止指定容器。docker stop <container_id>
启动重启容器
启动已停止的容器。
docker start <container_id>
重启容器
docker restart <container_id>
删除容器
删除指定容器。
docker rm <container_id>
删除容器并同时删除数据卷:
如:sudo docker rm -v
例如:
先以此命令运行一个容器 docker run -itd --name tomcat9 -p 8080:8080 tomcat:9.0.20-jre8-alpine
需要先停止运行中的容器再删除,否则无法删除容器
docker stop tomcat9
按照容器名称删除
docker rm tomcat9
按照容器ID删除
docker rm 8dd95a95e687
rm可以关联参数-f
: 通过 SIGKILL 信号强制删除一个运行中的容器。-l
: 移除容器间的网络连接,而非容器本身。-v
: 删除与容器关联的卷。查看容器日志:查看容器输出的日志。
docker logs <container_id>
例如:docker logs --tail 500 -f gitlab
只查看该容器的最近 500 条日志记录。如果你还想保持实时刷新日志,可以使用-f
选项,这将显示最近的 500 条日志,并在新日志条目添加时实时刷新-f
: 跟踪日志输出--tail
: 仅列出最新N条容器日志进入容器:进入正在运行的容器,
/bin/bash
是要执行的命令,通常用于进入容器的交互式终端。docker exec -it <container_id> /bin/bash
/bin/bash
是有bash命令的linux系统:例如centos
docker exec -it tomcat9.1 /bin/bash
没有bash命令的linux系统:如下命令,例如alpine系统
docker exec -it tomcat9.2 sh-i
: 即使没有附加也保持STDIN 打开-t
: 分配一个伪终端exit
退出容器
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卷管理
指定卷删除(需要配合compose的隐式命令才能执行):删除容器并同时删除数据卷:
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 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像、容器、卷和网络,可以通过以下命令进行清理。执行完命令后,还是告诉我们释放了多少存储空间!
docker system prune
3.6其他常用命令
查看 Docker 系统信息和容器详细信息:查看 Docker 的系统级别信息。
docker info
inspect详细信息
寻找容器在服务器存储位置
docker ps -a找到容器id/容器名称
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 解压:推荐-o方式,语法是save后是上图镜像信息的REPOSITORY冒号加TAG组合而成的,最后写成要打包的名字
docker save tomcat:9.0.20-jre8-alpine -o tomcat9.tar
docker save tomcat:9.0.20-jre8-slim > tomcat9.slim.tar
批量打包
load:解压至本地镜像
将上面save保存的包解压并放到本地仓库,通过docker images 重新获取信息
docker load -i linux.tar
docker load < tomcat9.0.20.tar