Docker的基础命令
目录
一、镜像操作
1、搜索镜像
2、下载镜像
3、查看镜像
3.1 查看下载到本地的所有镜像
3.2 查看单个镜像的详细信息
4、为镜像添加新的标签
5、镜像导出和导入到本地
5.1 镜像导出到本地
5.2 导入镜像
6、删除镜像
7、批量删除镜像
8、上传镜像
8.1 官网注册登录账号
8.2 上传镜像到仓库
二、容器操作
1、容器创建
2、查看容器状态
3、启动容器
4、创建并启动容器-docker run
5、停止容器
6、查看容器IP以及详细信息
7、进入容器
8、容器导出和导入
1、导出
2、导入
9、将容器内部的文件传出,将本地文件传入
10、删除容器
11、动态查看运行容器资源消耗
12、查看docker的日志信息
三、总结
一、镜像操作
1、搜索镜像
docker search nginx
2、下载镜像
docker pull nginx#从仓库中下载镜像,若没有指定标签,则下载最新的版本,也就是标签为: latest(最新的)
下载好了镜像可以在目录/var/lib/docker中查看到
3、查看镜像
3.1 查看下载到本地的所有镜像
docker images
- PERPOSITORY: 镜像属于的仓库
- TAG: 镜像的标签信息,标记同一个仓库中不同镜像
- IMAGE ID:镜像创建时间
- VIRTAL SIZE: 镜像大小
3.2 查看单个镜像的详细信息
docker inspect 【镜像id或名称】#主要是获取到镜像的唯一标识符,来查看该镜像的详细信息,唯一标识符肯定是ID号,也可以是名称+标签
4、为镜像添加新的标签
docker tag nginx:latest nginx:web
#将nginx镜像标签为latest的再添加一个为web标签
目的:为了见名知意docker images
5、镜像导出和导入到本地
5.1 镜像导出到本地
将镜像库中的镜像导出到本地
#格式: docker save -o 【存储的文件名】 【存储的镜像】docker save -o nginx nginx:latest
#将镜像名为nginx标签为latest的镜像导出到本地,并命名为nginx
- 导出到本地
- 导出到指定目录
5.2 导入镜像
将本地的镜像文件导入到镜像库中
docker load < nginx
#或
docker load -i nginx
方法一:
方法二:
6、删除镜像
注意!如果该镜像已被容器使用,正确做法是先删除依赖的镜像的所有容器,再去删除镜像.
docker rmi 【镜像库名:标签】 #当一个镜像都多个标签时,只是删除其中指定的标签
#或
docker rmi -f 【镜像id】 #会彻底删除该镜像(如果有多个标签,会报错)
7、批量删除镜像
docker images -q
#加载所有镜像iddocker rmi 'docker images -q'
#批量删除所有镜像docker images |awk 'NR>=2{print "docker rmi "$3}'|bash
#批量删除所有镜像
8、上传镜像
默认上传到docker Hub官方的公共仓库,需要注册使用公共仓库的账号,
可以使用docker login 命令来输入用户名、密码和邮箱来完成注册和登录
在上传镜像之前,还需要对本地镜像添加新的标签,然后再使用docker push命令进行上传。
官网地址:https://hub.docker.com/
8.1 官网注册登录账号
8.2 上传镜像到仓库
docker tag nginx:latest ydqhub/nginx:web
#修改标签docker login
#登录公共仓库docker push ydqhub/nginx:web
#上传镜像
登录到ydqhub中进行查看上传的仓库
二、容器操作
1、容器创建
新创建的容器默认处于停止状态,不运行任何程序,需要再其中发起一个进程来启动容器。
docker create -it nginx:latest /bin/bash#选项解释
-i #让容器开启标准输入
-t #让docker分配一个伪终端tty
-it #合起来实现和容器交互的作用,运行一个交互式会话shell
/bin/bash #shell环境,容器运行的环境
2、查看容器状态
docker ps
#查看正在运行的容器docker ps -a
#查看所有的容器
3、启动容器
docker start 【容器ID】
#根据容器ID启动容器
4、创建并启动容器-docker run
执行docker run 命令,等同于先执行docker create 命令,再执行docker start命令。
注意:容器是一个与其中运行的shell命令共存亡的终端,命令运行容器运行,命令结束容器结束。
docker容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的一句,如果docker容器中pid=1的进程挂了。那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。
当利用docker run 来创建容器时,Docker在后台的标准运行过程是:
- 检查本地是否在指定的镜像,当镜像不存在时,会从公有仓库下载
- 利用镜像创建并启动一个容器,
- 分配一个文件系统给容器,在制度的镜像层外面挂在一层可读写层。
- 从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中
- 分配一个地址池中的IP地址给容器。
- 执行用户指定的应用程序,执行完毕后容器被终止运行
docker run -itd nginx:latest /bin/bash
#-d选项,让程序再后台持续运行docker run centos:7 /usr/bin/bash -c ls -lh /
#没有-d选项,执行完退出,-c选项可以将命令发送到容器中运行docker run -d centos:7 /bin/bash -c "while true;do echo ydq;done"
#执行循环造成进程运行,但是会持续增加压力
实例一
- 加于不加-d的区别
- 如果docker run 运行的时一个centos系统,不加-d,会运行一个前台,然后直接进入容器内部。当你退出容器后,进程就会退出。容器就会关闭
实例二
实例三
这种其实不加-d,也可以运行容器,因为容器中一直存在执行命令,它与命令共存亡。
如果在生产环境中,这个容器不能删除,但是磁盘被这个容器执行的爆满,导致其它应用不能用,那怎么处理?
答:可以在/var/lib/docker/containers中可以查看到容器的运行文件,找到死循环的容器,进入到有一个json.log文件,这个文件为日志文件,可以使用echo " " >json.log 这个文件中,可以临时解决磁盘压力的问题。直接删除解决不了。但是过段时间,还是会导致压力大,那怎么处理?
- 可以写一个脚本,定期crontab -e 执行该脚本,相当于定时清空。
#!/bin/bash
logs=$(find /var/lib/docker/containers/ -name *-json.log*)
for log in $logs
do
cat /dev/null > $log
done===##或者====
#设置docker日志文件数量及每个日志大小
vim /etc/docker/daemon.json
{"registry-mirrors":["http://f613ce8f.m.daocloud.io"] //加速器"log-driver":"json-file", //定义日志格式,"log-opts":{"max-size":"500M","max-file":"3"} //设置日志文件最大500M,最多3个,如果3个都满了,它会自动删除一个,然后继续装。
}systemctl damon-reload && systemctl restart docker
#重新加载一下
5、停止容器
docker stop 【容器ID】或
docker kill 【容器ID】#stop和kill的区别
使用kill是直接关闭这个容器的进程,如果有正在运行的文件,那么可能造成数据丢失。
使用stop是给容器发出一个退出的信号,相当于给容器一些缓冲的余地。保存好自己的文件,然后再关闭。
6、查看容器IP以及详细信息
#要查看IP地址的化,需要开启一个容器,才会进行分配IP地址docker inspect 【容器ID】
#查看指定id的详细信息
7、进入容器
-
docker run -it 会创建前台进程,但是会输入exit后会终止进程
-
dcoker attach 会通过连接stdin,连接到容器内输入输出流,会再输出exit后终止容器操作
-
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,但不影响容器运行。
需要进入容器进行命令操作时,可以使用docker exec 命令进入运行着的容器格式:docker exec -it 容器ID/名称 /bin/bash-i :选项表示让容器的输入保持打开
-t :选项表示让Docker分配一个伪终端
#进入容器的三种方式#1、使用run进入,可以使用ctrl+d退出,直接退出终端
docker run -it centos:7 /bin/bash#2、永久性进入,退出后还是运行状态
docker run -itd centos:7 /bin/bash 或者 dockers start 【容器id】
#需要先运行容器
docker exec -it 【容器ID】 /bin/bash3、③docker attach,会通过连接stdin,连接到容器内输入输出流,公在输入exit后终止容器进程(临时性的,不推荐)
1、一次性进入
2、永久进入
- 需要先开启一个容器,才能使用exec进入
8、容器导出和导入
用户可以将任何一个Docker容器从一台机器迁移得到另一台机器,再迁移的过程中,可以使用docker export 命令将已经创建号的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。
可以将导出文件传输到其它机器,通过相应的导入命令实现容器的迁移。
8.1 导出
docker export 【容器id】 > centos_7
8.2 导入
注意!!这个跟导入镜像不能通用,这个是容器的导入,虽然导入进去也是存在镜像中,但是它是有以前容器中的数据的,镜像是存储干净的东西
#方法一
docker import centos_7 centos:v1#方法二
cat centos_7 |docker import - centos:v2
方法一
方法二
9、将容器内部的文件传出,将本地文件传入
docker 【源文件路径】 【目标文件路径】
docker cp /opt/docker.sh 【容器id】:/opt/hahaha
#将本地文件导入到容器中docker cp 【容器id】:/opt/ydq ./
#将容器内的ydq文件导出到本地
本地文件导入到容器
容器内文件导出
10、删除容器
docker rm 【容器id】
#不能删除运行状态的容器,如果要删除,需要加-f强制删除,或者停止后删除docker rm -f 【容器名称】
#基于容器名称删除docker rm -f `docker ps -q`
#删除所有运行的容器docker rm -f `docker ps -aq`
#删除所有的容器docker ps -a | awk 'NR>=2{print "docker rm "$1}'| bash
#删除所有容器,不包括运行的容器for i in `docker ps -a |grep -i exit | awk '{print $1}'`;do docker rm -f $i;done
#过滤出关闭状态的容器,并删除
docker rm 【容器id】
docker rm -f 【容器名称】
docker rm -f `docker ps -q`
docker rm -f `docker ps -aq`
docker ps -a | awk ‘{print "docker rm "$1}’| bash
for i in `docker ps -a |grep -i exit | awk ‘{print $1}’`;do docker rm -f $i;done
11、动态查看运行容器资源消耗
docker stats
12、查看docker的日志信息
docker logs 【容器ID】
#查看指定容器的日志信息
三、总结
镜像操作
docker iamges #查看docker镜像docker inspect 【id号】 #查镜像的详细信息docker tag nginx:lastest nginx:web #修改docker的标签(见名知意)#==========删除镜像
docker rmi nginx:web #删除标签为web的nginx镜像(删除标签指定的镜像)
或者
docker rmi 【镜像id】 #彻底删除该镜像
#注意:如果该镜像一个呗容器使用,正确做法先删除该镜像的所有容器,再删除镜像#=====导入导出镜像
存储镜像----》将镜像保存为本地文件
docker save -o 【存储文件名】 【存储的镜像】
docker save -o nginx nginx:latest #实例(保存本地目录)导入镜像----》将本地文件导入到容器
docker load < nginx #存入到容器中
或
docker load -i nginx #也可以存储到容器中#=====上传镜像====演示上传阿里云和docker hub
默认上传到docker Hub官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com可以使用docker login命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用docker push命令进行上传。
docker tag nginx:latest ydq/nginx:web #修改docker标签
docker iamges
docker login #登录到docker的hub
docker push 【上传的镜像】 #上传镜像#=======下载镜像
docker pull nginx #下载nginx镜像
容器操作
===#先创建后启动
docker create -it nginx:latest /bin/bash #创建容器docker ps -a #查看所有容器
docker ps #查看运行的容器docker start 【镜像id】 #启动一个镜像========#创建并启动
docker run 【镜像名】 /usr/bin/bash -c ls / #创建一个容器并启动镜像(本地没有将从仓库下载)(运行结束就退出)docker run -d 【镜像名】 /usr/bin/bash -c "while true;do echo hello;done"
#后台运行(必须要加-d,不然容器无法启动)(会造成cpu100%)docker run -itd -name test1(名称) 【镜像名】 /bin/bash
#创建容器并持续运行容器(-name:指定名称 )======#停止容器
docker stop 【容器id】 #容器id用docker ps -a 查看=====#容器的进入
docker exec -it 【容器id】 /bin/bash #进入一个启动的容器
或
docker run -it centos:7 bash #不加-d选项会创建容器后直接进入容器,但是退出容器,容器也会停止=====#本机文件与容器互传
docker cp ydq.txt 【容器id】:/opt #将本地文件传到容器中的/opt目录下docker cp 【容器id】:/opt/ydq.txt /home/ydq2.txt #将容器中的文件拷贝到本地======#容器的导出导入
docker export 【容器id】 > nginx.tar #将容器导出到本地
cat nginx.tar |docker import - nginx:web #将本地导入到容器======#容器的删除
docker rm [-f] 【容器id】 #删除容器(加-f删除正在运行的容器)docker ps -a |awk 'NR>=2{print "docker stop" $1}'|bash
......
面试题
#1、如果镜像优化?
有效减少镜像大小(dockerfile 优化方向-》对于部分企业而言,是一种升阶面试题)#2、怎么看当下有多大号容器,怎么看当下所有容器占用的I/O有多少,占用内存多少?
使用docker stats命令查看#3、容器有哪些状态?
Docker容器可以有七种状态:
已创建(create)
运行(up)
已暂停(paused)
重新启动(restarting)
已退出(exited)正常退出为(exited(0)),人工干预停止会有(exited(137))
死亡(dead)
迁移(removing)#4、overlay2由哪几部分组成 ?
LowerDir
MergedDir
UpperDir
WorkDi
相关文章:

Docker的基础命令
目录 一、镜像操作 1、搜索镜像 2、下载镜像 3、查看镜像 3.1 查看下载到本地的所有镜像 3.2 查看单个镜像的详细信息 4、为镜像添加新的标签 5、镜像导出和导入到本地 5.1 镜像导出到本地 5.2 导入镜像 6、删除镜像 7、批量删除镜像 8、上传镜像 8.1 官网注册登录…...
提取项目依赖包的licenses
skywalking-eyes工具可以快速提取出licenses...
Vue项目自动转换px为rem-高保真还原设计图
前端开发中还原设计图的重要性毋庸置疑,目前来说应用最多的应该也还是使用rem。然而很多人依然还是处于刀耕火种的时代,要么自己去计算rem值,要么依靠编辑器安装插件转换。 而本文的目标就是通过一系列的配置后,在开发中可以直接使…...
rman备份到远程服务器
rman备份到远程服务器磁盘 原因 业务数据量较大,数据库服务器上无足够地空间存放rman备份,磁盘扩容申请不批。无奈采取nfs远程备份 环境信息 ip操作系统备份目录远程备份服务器192.168.3.130Centos7.9rmanbak数据库服务器192.168.3.132:1521Centos7.…...

数据结构与算法
目录 数据结构与算法 为什么要学习数据结构和算法? 常见的数据结构 常用算法 插入排序 一、概念及其介绍 二、适用说明 三、过程图示 希尔排序 一、概念及其介绍 二、适用说明 三、过程图示 归并排序 一、概念及其介绍 二、适用说明 三、过程图示 …...

【Web3】DAO相关的基础知识
这里写目录标题 DAO 的基础概念为什么需要 DAO?DAO 的种类 DAO 的运作方式知名 DAO 的介绍Bankless DAOSeeDAO DAO 的生态全景图分类治理框架DAO 的工具 DAO 众筹平台介绍 - JuiceBoxDAO 投票治理介绍 - SnapshotDAO 贡献 & 激励 - POAPDAO 信息管理 - NotionDA…...

一文教你学会ArcGIS Pro地图设计与制图系列全流程(3)
ArcGIS Pro做的成果图及系列文章目录: 系列文章全集: 《一文教你学会ArcGIS Pro地图设计与制图系列全流程(1)》《一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)》《一文教你学会ArcGIS Pro地图设计与…...

用于大规模 MIMO 检测的近似消息传递 (AMP)(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

复杂SQL解析
文章目录 背景表SQL关键字分析具体Sql注意点补充:select的字段,也可以带有计算逻辑 背景表 1、sale_log as result: 主表,大部分字段都是取自这个表 2、sale_num as sale:需要从这个表获取真实销量sale_num字段 3、schedule as…...

js中哪些地方会用到window?
前言 Window 对象是JavaScript中的顶层对象,它代表了浏览器中打开的窗口或者标签页。浏览器中打开的每一个窗口/标签页都会有一个对应的 Window 对象。在浏览器中,全局作用域的 this 就是指向 Window 对象。 正文 在 JavaScript 中,window 对…...

KITTI raw_data数据集百度云下载
1. 百度云链接 链接:https://pan.baidu.com/s/1YNzfDoJomKOZhlVUr2eEOA?pwdtfh3 提取码:tfh3 –来自百度网盘超级会员V6的分享 2. 资料来源 https://www.cvlibs.net/datasets/kitti/raw_data.php 命令行执行./raw_data_downloader.sh #!/bin/bashfiles(2011_…...
(3) OpenCV图像处理kNN近邻算法
目录 一、介绍 1、类通过Matplotlib显示 2、Matplotlib显示效果 二、通过KNN近邻对新成员进行分类例程...

手撸RPC【gw-rpc】
文章目录 基于 Netty 的简易版 RPC需求分析简易RPC框架的整体实现协议模块 📖自定义协议 🆕序列化方式 🔢 服务工厂 🏭服务调用方 ❓前置知识——动态代理🕳️Proxy类InvocationHandler 接口 RPC服务代理类内嵌Netty客…...

【Linux】:Kafka组件介绍
目录 环境简介 一、消息 二、主题 三、分区 四、副本 五、生产者 六、消费者 七、消费者组 八、offsets【偏移量】 环境简介 Linux内核:Centos7 Kafka版本:3.5.1 执行命令的目录位置:Kafka安装目录的bin目录下:/usr/loca…...
Redis〔篇〕
redis怎么做到双写一致性呢? 这个是要分情况的 业务要是对一致性要求不是很高的话可以使用延时双删,要强一致的话需要双写一致性。 Redis数据持久化? redis是有两种数据持久化方式的,一种RDB一种AOF rdb是redis数据快照&#x…...

龙芯2K1000核心板在智能座舱行业产品方案-迅为电子
迅为2K1000核心板是一款高性能的处理器,适用于智能座舱行业。它具备多核CPU、高级图像处理和丰富的接口选项,可用于开发先进的智能座舱解决方案,提高乘坐体验、安全性和便捷性。以下是2K1000处理器在智能座舱行业中的产品方案。 高清晰度显…...

2023/9/20 -- C++/QT
时钟: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QDateTime> #include <QLabel> #include <QTimer> #include <QDebug>QT_BEGIN_NAMESPACE namespac…...

WordPress主题DUX v8.2源码下载
新增产品分类左侧多级分类折叠显示 新增网站默认字体对 MiSans 和 HarmonyOS Sans 的支持 新增顶部左上角显示登录注册的模块开关,且支持原生登录方式 新增手机端导航菜单的关闭按钮 新增文章内容中标题二的强化展示 新增全站禁止复制、右键和选择的操作 新增文章内…...
c++图像的边缘检测
图像的边缘检测 cv::Canny 是 OpenCV 中用于进行边缘检测的函数,特别是用于检测图像中的边缘。Canny 边缘检测是一种广泛使用的技术,它能够识别图像中的边缘,这些边缘通常表示对象之间的边界或图像中的显著特征 void cv::Canny(const cv::M…...

C++ Primer 类和对象(3)
类和结构体是比较相似,而传统的C的结构体中都是一些数据的类型,类除了有数据之外还有函数。所以可以把类想象成一个具有既有数据又有函数的复合数据类型。 类是一种将抽象转换为用户定义类型的C工具,它将数据表示和操纵数据的方法组合成一个整…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...