当前位置: 首页 > news >正文

Docker学习--常用命令

目录

一、前言

二、启动类命令

三、镜像命令

列出本地主机上的镜像

在远程仓库中搜索镜像

下载镜像

查看镜像/容器/数据卷所占的空间

删除镜像

虚悬镜像

四、容器命令

新建+启动容器

当前所有正在运行的容器

容器退出

启动已经停止运行的容器

重启容器

停止容器

强制停止容器

删除已停止的容器

守护式容器

容器日志

容器内运行的进程

查看容器内部细节

进入正在运行的容器并以命令行交互

容器和宿主机文件拷贝

导入和导出容器

将容器生成新镜像

容器数据卷

所有命令示意图


一、前言

在上一篇文章中,我们已经知道了Docker具体是什么,能干那些事,和它的单机的基础架构,在本文中我们接着来学习Docker的一些常用的命令。

二、启动类命令

  • 启动docker
    • systemctl start docker
  • 停止docker
    • systemctl stop docker
  • 重启docker
    • systemctl restart docker
  • 查看docker状态
    • systemctl status docker
  • 设置开机启动
    • systemctl enable docker
  • 查看docker概要信息
    • docker info
  • 查看docker总体帮助文档
    • 查看docker总体帮助文档
  • 查看docker命令帮助文档
    • docker 具体命令 --help

三、镜像命令

列出本地主机上的镜像

docker images

  • TAG::同一个仓库源可以有多个TAG版本,每个TAG代表该仓库源的一个特定版本。例如,ubuntu:18.04 ubuntu:20.04 是同一个仓库源的不同版本。如果不指定一个镜像的版本标签,例如只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像,latest 标签通常表示最新的稳定版本。
  • OPTIONS说明:-a :列出本地所有的镜像(含历史映像层) -q :只显示镜像ID  -f:过滤

在远程仓库中搜索镜像

docker search [OPTIONS] 镜像名字

● -f:过滤
● --limit 数量:只展示前几项

下载镜像

docker pull 镜像名字[:TAG]

查看镜像/容器/数据卷所占的空间

docker system df

删除镜像

  • 删除单个:docker rmi -f 镜像ID
  • 删除多个:docker rmi -f 镜像名1:TAG 镜像名2:TAG
  • 删除全部:docker rmi -f $(docker images -qa)

虚悬镜像

仓库名、标签都是<none>的镜像,俗称虚悬镜像 dangling image

四、容器命令

创建容器的前提条件是有镜像

新建+启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

● --name:为容器指定一个名称,自己为容器起一个新名字
-d:后台运行容器并返回容器ID,也即启动守护式容器
● -i:以交互模式(interactive)运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端(tty),通常与-i同时使用。也即启动交互式容器(前台有伪终端,等待交互)
-e:为容器添加环境变量
-P:随机端口映射。将容器内暴露的所有端口映射到宿主机随机端口
-p:指定端口映射

-p指定端口映射的几种不同形式(先提一嘴,后面讲):

● -p hostPort:containerPort:端口映射,例如-p 8080:80
● -p ip:hostPort:containerPort:配置监听地址,例如 -p 10.0.0.1:8080:80
● -p ip::containerPort:随机分配端口,例如 -p 10.0.0.1::80
● -p hostPort1:containerPort1 -p hostPort2:containerPort2:指定多个端口映射,例如-p 8080:80 -p 8888:3306

当前所有正在运行的容器

docker ps [OPTIONS]

● -a:列出当前所有正在运行的容器+历史上运行过的容器
● -l:显示最近创建的容器
● -n:显示最近n个创建的容器
● -q:静默模式,只显示容器编号

容器退出

使用exit 退出当前终端,run进去容器,exit退出,容器停止

ctrl+p+q,run进去容器,ctrl+p+q退出,容器不停止

启动已经停止运行的容器

docker start 容器ID或者容器名

重启容器

docker restart 容器ID或者容器名

停止容器

docker stop 容器ID或者容器名

强制停止容器

docker kill 容器ID或容器名

删除已停止的容器

docker rm 容器ID
//一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

守护式容器

docker run -d 容器名

在大部分的场景下,我们希望 docker 的服务是在后台运行的, 我们可以过 -d 指定容器的后台运行模式。

举个例子,下面启动一个容器

这是因为Docker容器后台运行,就必须有一个前台进程。

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如service nginx start。但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了。所以,最佳的解决方案是将你要运行的程序以前台进程的形式运行,常见就是命令行模式,表示我还有交互操作,别中断。

容器日志

docker logs 容器ID

容器内运行的进程

docker top 容器ID

查看容器内部细节

docker inspect 容器ID

进入正在运行的容器并以命令行交互

docker exec -it 容器ID bashShelldocker attach 容器ID

上述两个区别?

  • attach 直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止。
  • exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。

如果有多个终端,都对同一个容器执行了docker attach ,就会出现类似投屏显示的效果。一个终端中输入输出的内容,在其他终端上也会同步的显示。

容器和宿主机文件拷贝

docker cp 容器ID:容器内路径 目的主机路径

导入和导出容器

export:导出容器的内容流作为一个tar归档文件(对应import命令);

import:从tar包中的内容创建一个新的文件系统再导入为镜像(对应export命令);

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

将容器生成新镜像

docker commit提交容器副本使之成为一个新的镜像。

docker commit 命令用于将一个正在运行的容器的当前状态保存为一个新的镜像。这个功能非常有用,特别是当你需要在容器中进行一些修改(例如安装软件、更改配置文件等),然后希望将这些更改保存下来以便后续使用或分发。

例如我们在仓库上下载一个最基础版的Centos镜像,将它生成容器之后,是没有vim的功能的,此时我们在该容器中安装好之后,希望可以保存下来以后用,就可以将当前已经下载好vim功能的容器提交成一个新的镜像,以后下载这个镜像生成的容器都会有vim这个功能。

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[tag]

Docker挂载主机目录,可能会出现报错:cannot open directory .: Perission denied。

解决方案:在命令中加入参数 --privileged=true

CentOS7安全模块比之前系统版本加强,不安全的会先禁止,目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了。如果要开启,一般使用 --privileged=true,扩大容器的权限解决挂载没有权限的问题。也即使用该参数,容器内的root才拥有真正的root权限,否则容器内的root只是外部的一个普通用户权限。

虽然 docker commit 非常方便,但在生产环境中,通常更推荐使用 Dockerfile 来构建镜像(后面讲)。

容器数据卷

Docker数据卷是一种用于在容器和宿主机之间持久化数据的机制。它允许你将宿主机上的一个目录或文件挂载到容器中,从而实现数据的持久化存储和共享。

特性:卷设计的目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

特点:

● 数据卷可以在容器之间共享或重用数据
● 卷中的更改可以直接实施生效
● 数据卷中的更改不会包含在镜像的更新中
● 数据卷的生命周期一直持续到没有容器使用它为止

运行一个带有容器卷存储功能的容器实例:

docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录[rw | ro] 镜像名

可以使用docker inspect查看容器绑定的数据卷。

权限:

●  rw:读写 
●  ro:只读。如果宿主机写入内容,可以同步给容器内,容器内可以读取。 

容器卷的继承(暂时了解)

一个容器可以挂载(继承)另一个容器的数据卷。这在需要多个容器共享同一份数据时非常有用。

# 启动一个容器
docker run -it --privileged=true -v /tmp/test:/tmp/docker --name u1 ubuntu /bin/bash# 使用 --volumes-from 继承 u1的容器卷映射配置
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu

所有命令示意图


感谢阅读!

http://www.dtcms.com/a/339813.html

相关文章:

  • vue3动态获取高度用在轮播图上
  • Diamond开发经验(1)
  • 代码随想录刷题Day37
  • C++的二叉搜索树(二叉排序树)
  • AC 应用控制技术
  • Vulkan笔记(十一)-渲染通道(RenderPass)详解
  • 厂区能源管理智能化改造物联网解决方案
  • 沈昕医编---因为上岸了医疗编,来说一下e类联考的强度
  • YggJS RLogin暗黑霓虹主题登录注册页面 版本:v0.1.1
  • js 怎么调用 deepseekAPI
  • 雷卯针对香橙派Orange Pi 5 Pro开发板防雷防静电方案
  • 从密度到聚类:DBSCAN算法的第一性原理解析
  • MyCAT2的主从配置
  • Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
  • 第2章 组件设计与架构
  • IEEE GRSM 2025:Vision Foundation Models in Remote Sensing
  • 基于 STM32 和 NB-IoT 的智慧家居多设备联动控制系统设计
  • Windows Server DNS优化,网络响应速度提升方案
  • 让AI学会“边做边想“:ReAct的实战指南
  • 前端 React 实现数据懒加载-滚动触底加载数据
  • Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
  • 移动端网页调试实战,内存泄漏问题的发现与优化
  • Qt原对象系统工作机制
  • 运维面试题
  • LWIP协议栈实现ARP协议
  • 如何看出有没有做raid,并做的是raid几
  • 仲裁器设计(三)-- Weighted Round Robin 权重轮询调度
  • 信号以及共享内存
  • 设计模式笔记_行为型_命令模式
  • Pygame中,精灵Sprite与精灵组Group,显性入组与隐性入组,它们之间的关系是什么?