docker镜像、容器管理与迁移

镜像管理

搜索镜像:
    这种方法只能用于官方镜像库
    搜索基于 centos 操作系统的镜像
    # docker search centos

    按星级搜索镜像:        
    查找 star 数至少为 100 的镜像,默认不加 s 选项找出所有相关 ubuntu 镜像:         
    # docker search ubuntu -f stars=100    
      
拉取镜像:
    # docker pull centos

查看本地镜像:  
    # docker image list
    
查看镜像详情:
    # docker image inspect 镜像id
    
删除镜像:
    删除一个或多个,多个之间用空格隔开,可以使用镜像名称或id
    # docker rmi daocloud.io/library/mysql

    强制删除:--force
    如果镜像正在被使用中可以使用--force强制删除    18.07后不支持强制删除
    # docker rmi docker.io/ubuntu:latest --force

    删除所有镜像:
    # docker rmi $(docker images -q)

只查看所有镜像的id:
    # docker images -q 
  
查看镜像制作的过程:
    相当于dockfile
    # docker history daocloud.io/ubuntu
    
    dive docker_image_id/docker_image_name

容器管理

创建新容器但不启动:
# docker create -it daocloud.io/library/centos:5 /bin/bash

创建并运行一个新Docker 容器:
    同一个镜像可以启动多个容器,每次执行run子命令都会运行一个全新的容器
    # docker run -it --restart=always centos:7 /bin/bash
    如果执行成功,说明CentOS 容器已经被启动,并且应该已经得到了 bash 提示符。
    -i   
        捕获标准输入输出
    -t   
        分配一个终端或控制台
    --restart=always   
        容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭   
        也适用于create选项
         
    --rm
        默认情况下,每个容器在退出时,它的文件系统也会保存下来,这样一方面调试会方便些,因为你可以通过查看日志等方式来确定最终状态。另一方面,也可以保存容器所产生的数据。
        但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据。这个时候就需要--rm参数了。注意:--rm 和 -d不能共用

若要断开与容器的连接,并且关闭容器:
   容器内部执行如下命令
    [root@d33c4e8c51f8 /]# exit

如果只想断开和容器的连接而不关闭容器:
    快捷键:ctrl+p+q

查看容器:
    只查看运行状态的容器:
    #docker ps

    #docker ps -a
    -a  查看所有容器
    
    只查看所有容器id:
    # docker ps -a -q
 
    列出最近一次启动的容器
    # docker ps -l   

查看容器详细信息:
inspect   Return low-level information on a container or image
用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等。

目标:
查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息。

提示:
可以使用镜像id的前面部分,不需要完整的id。
[root@master ~]# docker inspect d95    //d95是我机器上运行的一个容器ID的前3个字符
[
    {
        "Id": "d95a220a498e352cbfbc098c949fc528dbf5a5c911710b108ea3a9b4aa3a4761",
        "Created": "2017-07-08T03:59:16.18225183Z",
        "Path": "bash",
        "Args": [],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
容器信息很多,这里只粘贴了一部分

比如:容器里在安装ip或ifconfig命令之前,查看网卡IP显示容器IP地址和端口号,如果输出是空的说明没有配置IP地址(不同的Docker容器可以通过此IP地址互相访问)
# docker inspect --format='{{.NetworkSettings.IPAddress}}'  容器id

列出所有绑定的端口:
# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> 
{{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID

# docker inspect --format='{{range $p, 
$conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 
b220fabf815a
22/tcp -> 20020

找出特殊的端口映射:
比如找出容器里22端口所映射的docker本机的端口:
# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp") 
0).HostPort}}' $INSTANCE_ID
[root@localhost ~]# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/
tcp") 0).HostPort}}' b220fabf815a
20020

http://note.youdao.com/noteshare?id=4ee7884b3d25c16850d78cfdec276add

启动容器:
# docker start  name

关闭容器:
# docker stop  name
# docker kill    name      --强制终止容器

杀死所有running状态的容器:
# docker kill $(docker ps  -q)  

stop和kill的区别:
    docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。 

删除容器:
    # docker rm 容器id或名称
    要删除一个运行中的容器,添加 -f 参数
    
    根据格式删除所有容器:
    # docker rm $(docker ps -qf status=exited)
        
重启容器:
#docker restart name

暂停容器:
pause   --暂停容器内的所有进程,
    通过docker stats可以观察到此时的资源使用情况是固定不变的,通过docker logs -f也观察不到日志的进一步输出。

恢复容器:
unpause  --恢复容器内暂停的进程,与pause参数相对应

# docker start infallible_ramanujan  //这里的名字是状态里面NAMES列列出的名字,这种方式同样会让容器运行在后台

让容器运行在后台:
如果在docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。因为容器不再监听你执行docker run的这个终端命令行窗口。但你可以通过执行docker attach来重新附着到该容器的回话中。注意,容器运行在后台模式下,是不能使用--rm选项的

#docker run -d IMAGE[:TAG] 命令
#docker logs container_id   #打印该容器的输出

# docker run -it -d --name mytest docker.io/centos:7 /bin/sh -c "while true; do echo hello world; sleep 2; done"
37738fe3d6f9ef26152cb25018df9528a89e7a07355493020e72f147a291cd17

[root@localhost ~]# docker logs mytest
hello world
hello world

docker attach container_id #附加该容器的标准输出到当前命令行
[root@localhost ~]# docker attach mytest
hello world
hello world
.......
此时,ctrl+d等同于exit命令,按ctrl+p+q可以退出到宿主机,而保持container仍然在运行

rename 
    Rename a container
    
stats     
    Display a live stream of container(s) resource usage statistics    
    --动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O   
    
port    
    List port mappings or a specific mapping for the CONTAINER
     --输出容器端口与宿主机端口的映射情况
    # docker port blog
        80/tcp -> 0.0.0.0:80
     容器blog的内部端口80映射到宿主机的80端口,这样可通过宿主机的80端口查看容器blog提供的服务
 
连接容器:    
方法1.attach
# docker attach 容器id   //前提是容器创建时必须指定了交互shell

方法2.exec      
    通过exec命令可以创建两种任务:后台型任务和交互型任务
    交互型任务:
        # docker exec -it  容器id  /bin/bash
        root@68656158eb8e:/# ls     
    
    后台型任务:
        # docker exec 容器id touch /testfile

监控容器的运行:
可以使用logs、top、events、wait这些子命令
    logs:
        使用logs命令查看守护式容器
        可以通过使用docker logs命令来查看容器的运行日志,其中--tail选项可以指定查看最后几条日志,而-t选项则可以对日志条目附加时间戳。使用-f选项可以跟踪日志的输出,直到手动停止。
        # docker logs    App_Container   //不同终端操作
        # docker logs -f App_Container

    top:
        显示一个运行的容器里面的进程信息
        # docker top birdben/ubuntu:v1

    events    
        Get real time events from the server
        实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等。

        # docker start loving_meninsky
        loving_meninsky

        # docker events  //不同终端操作
        2017-07-08T16:39:23.177664994+08:00 network connect  
        df15746d60ffaad2d15db0854a696d6e49fdfcedc7cfd8504a8aac51a43de6d4 
        (container=50a0449d7729f94046baf0fe5a1ce2119742261bb3ce8c3c98f35c80458e3e7a, 
        name=bridge, type=bridge)
        2017-07-08T16:39:23.356162529+08:00 container start 
        50a0449d7729f94046baf0fe5a1ce2119742261bb3ce8c3c98f35c80458e3e7a (image=ubuntu, 
        name=loving_meninsky)

    wait      
        Block until a container stops, then print its exit code   
        --捕捉容器停止时的退出码
        执行此命令后,该命令会"hang"在当前终端,直到容器停止,此时,会打印出容器的退出码
        # docker wait 01d8aa  //不同终端操作
           137

    diff
        查看容器内发生改变的文件,以elated_lovelace容器为例
        root@68656158eb8e:/# touch c.txt

        用diff查看:
        包括文件的创建、删除和文件内容的改变都能看到 
        [root@master ~]# docker diff  容器名称
        A /c.txt

        C对应的文件内容的改变,A对应的均是文件或者目录的创建删除
        [root@docker ~]# docker diff 7287
        A /a.txt
        C /etc
        C /etc/passwd
        A /run
        A /run/secrets  
        
宿主机和容器之间相互COPY文件
    cp的用法如下:
    Usage:    docker cp [OPTIONS] CONTAINER:PATH LOCALPATH
                   docker cp [OPTIONS] LOCALPATH CONTAINER:PATH

    如:容器mysql中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copy到宿主机
    #  docker cp mysql:/usr/local/bin/docker-entrypoint.sh   /root

    修改完毕后,将该文件重新copy回容器
    # docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/      

容器打包

将容器的文件系统打包成tar文件,也就是把正在运行的容器直接导出为tar包的镜像文件

export    
    Export a container's filesystem as a tar archive

有两种方式(elated_lovelace为容器名):

第一种:

    [root@master ~]# docker export -o elated_lovelace.tar elated_lovelace

第二种:
    [root@master ~]# docker export 容器名称 > 镜像.tar

导入镜像归档文件到其他宿主机:
import    
    Import the contents from a tarball to create a filesystem image
    # docker import elated_lovelace.tar  elated_lovelace:v1    

镜像迁移

保存一台宿主机上的镜像为tar文件,然后可以导入到其他的宿主机上:
save      
    Save an image(s) to a tar archive
    将镜像打包,与下面的load命令相对应
    #docker save -o nginx.tar nginx:tag

load      
    Load an image from a tar archive or STDIN
    与上面的save命令相对应,将上面sava命令打包的镜像通过load命令导入
    #docker load < nginx.tar
    
容器的迁移  
docker export b25f3cb2bf1f  | gzip > mynginx123.tar
zcat mynginx123.tar | docker import  - mynginx123

 

镜像、容器深度操作

# 显示镜像摘要
docker images --digests # 过滤镜像
docker images [-f|--filter] "key=value"# 支持:
dangling:显示标记为空的镜像,值只有true和false
label:这个是根据标签进行过滤,其中lable的值,是docker在编译的时候配置的或者在Dockerfile中配置的
before:这个是根据时间来进行过滤,其中before的value表示某个镜像构建时间之前的镜像列表
since:跟before正好相反,表示的是在某个镜像构建之后构建的镜像
reference:添加正则进行匹配# 镜像格式化输出
docker images --format "{{.ID}}\t{{.Repository}}".ID	镜像ID
.Repository	镜像仓库
.Tag 镜像标签[版本]
.Digest	镜像hash值
.CreatedSince 创建镜像后的时间
.CreatedAt	创建镜像的时间
.Size 镜像大小# 容器格式化输出
docker ps --format "{{.ID}}\t{{.Command}}"
.ID	容器ID
.Image	镜像ID
.Command	执行的命令
.CreatedAt	容器创建时间
.RunningFor	运行时长
.Ports	暴露的端口
.Status	容器状态
.Names	容器名称
.Label	分配给容器的所有标签
.Mounts	容器挂载的卷
.Networks	容器所用的网络名称

脚本示例

#!/bin/bashsave(){if [ ! -d "./images" ]; thenmkdir imagesficd imagesdocker images --format "{{.ID}} {{.Repository}}:{{.Tag}} {{.Size}}" > images_pull.txtwhile read linedoimage_id=`echo $line | awk '{print $1}'`image_repository=`echo $line | awk '{print $2}'`image_size=`echo $line | awk '{print $3}'`docker save -o $image_id.tar $image_repository && \echo "Image $image_repository saved, size $image_size"done < images_pull.txt
}load(){cd imageswhile read linedoimage_id=`echo $line | awk '{print $1}'`image_repository=`echo $line | awk '{print $2}'`docker load -i $image_id.tar && \echo "Image $image_repository loaded"done < images_pull.txt
}
if [ -z "$1" ]; thenecho "Usage: image_operation.sh [save|load]"
fieval $1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【web安全】文件读取与下载漏洞

前言 菜某整理仅供学习&#xff0c;有误请赐教。 概念 个人理解&#xff1a;就是我们下载一个文件会传入一个参数&#xff0c;但是我们可以修改参数&#xff0c;让他下载其他的文件。因为是下载文件&#xff0c;所以我们可以看到文件里面的源码&#xff0c;内容。 文件读取…

Python嗅探和解析网络数据包

网络工具解释 Scapy是Python2和Python3都支持的库。 它用于与网络上的数据包进行交互。 它具有多种功能&#xff0c;通过这些功能我们可以轻松伪造和操纵数据包。 通过 scapy 模块&#xff0c;我们可以创建不同的网络工具&#xff0c;如 ARP Spoofer、网络扫描仪、数据包转储器…

swiftUi——颜色

在SwiftUI中&#xff0c;您可以使用Color结构来表示颜色。Color可以直接使用预定义的颜色&#xff0c;例如.red、.blue、.green等&#xff0c;也可以使用自定义的RGB值、十六进制颜色代码或者系统提供的颜色。 1. 预定义颜色 Text("预定义颜色").foregroundColor(.…

Swing程序设计(9)复选框,下拉框

文章目录 前言一、复选框二、下拉框总结 前言 该篇文章简单介绍了Java中Swing组件里的复选框组件、列表框组件、下拉框组件&#xff0c;这些在系统中都是常用的组件。 一、复选框 复选框&#xff08;JCheckBox&#xff09;在Swing组件中的使用也非常广泛&#xff0c;一个方形方…

Albumentations(Augmentation Transformations)

Albumentations&#xff08;Augmentation Transformations&#xff09; Albumentations&#xff08;Augmentation Transformations&#xff09;是一个用于图像数据增强&#xff08;数据增广&#xff09;的Python包。它提供了丰富的图像增强技术&#xff0c;用于训练机器学习模…

hadoop安装与配置-shell脚本一键安装配置(集群版)

文章目录 前言一、安装准备1. 搭建集群 二、使用shell脚本一键安装1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 加载用户环境变量 三、启动与停止1. 启动/停止hadoop集群(1) 复制hadoop集群启动脚本(2) 增加执行权限(3) 启动hadoop集群(4) 停止hadoop集群(5) 重启hado…

智慧社区前景无限,科技引领未来发展

社区是城镇化发展的标志&#xff0c;作为人类现代社会的生活的基本圈子&#xff0c;是人类生活离不开的地方&#xff0c;社区人口密度大、车辆多&#xff0c;管理无序&#xff0c;社区的膨胀式发展多多少少带来一定的管理上的缺失。社区作为智慧城市建设的重要一环&#xff0c;…

编译基于LIO-SAM的liorf“Large velocity, reset IMU-preintegration!“

使用LIO-SAM修改的代码liorf&#xff08;因自己使用的IMU传感器是 6-axis ouster&#xff09;&#xff1a; LIO-SAM代码连接&#xff1a; https://github.com/TixiaoShan/LIO-SAM liorf代码连接&#xff1a; https://github.com/YJZLuckyBoy/liorf 编译运行出现错误&#…

eve-ng山石网科HillStone镜像部署

HillStone 部署 author&#xff1a;leadlife data&#xff1a;2023/12/4 mains&#xff1a;EVE-ng HillStone 镜像部署 - use hillstone-sg6000 default&#xff1a;hillstone/hillstone 传输 scp hillstone-sg6000.zip root192.168.3.130:/opt/unetlab/addons/qemu/部署 cd …

echarts绘制一个环形图

其他echarts&#xff1a; echarts绘制一个柱状图&#xff0c;柱状折线图 echarts绘制一个饼图 echarts绘制一个环形图2 效果图&#xff1a; 代码&#xff1a; <template><div class"wrapper"><!-- 环形图 --><div ref"doughnutChart…

深入理解Spring Kafka中@KafkaListener注解的参数与使用方式

Apache Kafka作为一个强大的消息代理系统&#xff0c;与Spring框架的集成使得在分布式应用中处理消息变得更加简单和灵活。Spring Kafka提供了KafkaListener注解&#xff0c;为开发者提供了一种声明式的方式来定义消息监听器。在本文中&#xff0c;我们将深入探讨KafkaListener…

C++STL的string(超详解)

文章目录 前言C语言的字符串 stringstring类的常用接口string类的常见构造string (const string& str);string (const string& str, size_t pos, size_t len npos); capacitysize和lengthreserveresizeresize可以删除数据 modify尾插插入字符插入字符串 inserterasere…

Linux lprm命令教程:如何取消打印任务(附案例详解和注意事项)

Linux lprm命令介绍 lprm命令是Linux系统中的一个命令&#xff0c;全称为"line printer remove"&#xff0c;用于取消已经排队等待打印的打印任务。如果没有提供任何参数&#xff0c;那么将会取消默认目标上的当前任务。你可以指定一个或多个作业ID号来取消这些作业…

HTML5 Audio/Video 标签、属性、方法、事件汇总(详细)

文章目录 HTML 音频/视频 方法HTML 音频/视频属性HTML 音频/视频事件代码展示如下事件代码&#xff1a; HTML 音频/视频 方法 方法描述addTextTrack()向音频/视频添加新的文本轨道。canPlayType()检测浏览器是否能播放指定的音频/视频类型。load()重新加载音频/视频元素。play…

如何将腾讯混元大模型AI接入自己的项目里(中国版本ChatGPT)

如何将腾讯混元大模型AI接入自己的项目里 一、腾讯混元大模型API二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、腾讯混元大模型API 基于腾讯混元大模型AI的智能文本对话AI机器人…

【1day】泛微e-office OA系统UserSelect接口SQL 注入漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

TypeScript 的修饰符(modifier)和装饰器(decorator)

装饰器是一种特殊类型的声明&#xff0c;它能够被附加到类声明....上。 装饰器使用 expression这种形式

使用消息队列遇到的问题—kafka

目录 1 分区2 消费者3 Kafka 如何保证消息的消费顺序&#xff1f;3.1 方案一3.2 方案二 4 消息积压 在项目中使用kafka作为消息队列&#xff0c;核心工作是创建生产者—包装数据&#xff1b;创建消费者----包装数据。 欠缺一些思考&#xff0c;特此梳理项目中使用kafka遇到的一…

浅析以太网接口及串口转以太网技术

浅析以太网接口 以太网相关接口主要包括&#xff1a;MII/RMII/SMII以及GMII/RGMII/SGMII接口。 一、MII接口 MII&#xff08;Media Independent Interface&#xff09;介质无关接口或称为媒体独立接口&#xff0c;它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口和…

卷积详解和并行卷积

ps&#xff1a;在 TensorFlow Keras 中&#xff0c;构建 Sequential 模型的正确方式是将层作为列表传递&#xff0c;而不是作为一系列单独的参数。 modelmodels.Sequential([layers&#xff0c;layers]) 而不是modelmodels.Sequential(layers&#xff0c;layers) 文章目录 卷积…