docker day02

2023-09-16 22:46:00

昨日内容回顾:
    - docker架构
      - 是C/S架构
      C:
        docker 
      S:
        docker daemon
           - image:
              - docker hub仓库
              - 高可用企业级私有仓库部署!
           - container
           - volume
           - network
           - ...
    - image
        docker image ...
                     ls
                     rm
                     pull
                     tag
                     save
                     load
                     ...
                     build
                     history
                     
    - container
        docker container ...
                         ls|ps|list
                         run
                         rm 
                         logs
                         prune
                         cp
                         inspect
                         top


     attach    
     cp  
     exec    
     logs      
     ls      
     rm        
     run    
     top     
     prune    
     inspect   
     
     
 
 
第二梯队:      
 create   
    创建容器
    docker container create -it  alpine
    docker container create --name test02 -e SCHOOL=oldboyedu -w  /oldboyedu-linux82 alpine sleep 10
    
 start     ***
    启动容器
    docker container start test02
    
 stop      ***
    停止容器
    docker stop -t 1 test01 
        -t:
            等待多久后发送kill信号杀死容器,0代表不等待。
            
 kill      ***
    杀死容器。
    docker container kill test01  #  等效于"docker container stop -t 0 test01"


 restart   ***
    重启容器
    docker container restart -t 0 test01  # 一般情况下,在修改了配置文件时,需要重启容器。
        -t:
            等待多久后发送kill信号杀死容器,0代表不等待。
            
        重启后,容器的运行时间会被重置。
        
    pause  
        暂停容器运行,容器被暂停时,不会对外提供服务,也不会重置时间。        
        docker container pause myweb 

    unpause 
        恢复容器运行
        docker container unpause myweb


 rename    ***
    表示对容器的名称进行重命名。
    docker container rename myweb linux82_web01

 stats        ***
    表示查看容器的状态信息。
    docker container stats --no-stream --no-trunc linux82_web01
        --no-stream:
            不实时输出监控信息,仅打印第一次的即可。
        --no-trunc
            不截断输出内容。
 update:
    更新容器的配置,包括但不限于: 内存,磁盘,CPU,重启策略等限制。 
    docker container update -m 100000000 --memory-swap 100000000 linux82_web01 

 commit    ***
    将一个容器手动提交为一个镜像。
    docker container commit -a "oldboyedu-linux82" -m "add nginx service..." myweb linux82-web:v0.1
        手动提交镜像。此案例就是将myweb容器提交未一个名为"linux82-web:v0.1"的新镜像。
            -a:
                声明作者信息。
            -m:
                提交注释信息。
        注意:
            (1)若基于咱们手动提交的镜像可以指定自定义的启动命令参数;
                docker run -d linux82-web:v0.1  tail -f /etc/hosts
            (2)若没有指定自定义的启动命令,则会使用该镜像基于哪个容器启动时的"COMMAND"来运行哟;
            (3)基于commit提交的镜像,一般情况下仅用于测试,生产环境中,我们会使用dockerfile来自动构建镜像;
            
            
了解即可:
 diff:
    比较容器和镜像的文件差异。
    docker container diff condescending_johnson
    
 export:
    将容器的文件系统导出到一个tar包文件中。
    docker container export peaceful_rosalind > docker-export.tar.gz
    docker container export -o docker-export02.tar.gz condescending_johnson

    docker image import docker-export02.tar.gz 
        导入镜像,但不会导入镜像的tag,会重新创建一个新的镜像。
        
 port      
    查看容器到宿主机的端口映射信息。若容器没有配置端口映射,则没有任何输出。
    docker container port web02
    
 wait         
    等待容器退出的状态码。
    

删除容器
docker container rm -f `docker container ps -qa`

容器的重启策略:
    no
        当容器退出时不自动重启,这是默认的配置。
        案例:
            docker container run  -d --restart no --name restart-no custom_linux:v0.2 

    on-failure[:max-retries]    
        若不指定max-retries,则默认值为0,表示不设限制次数的重启。
        使用max-retries定义一个最大重试重启次数,当容器异常退出时,可以自动重启指定的max-retries次数后就不再重启。
        容器重启后,max-retries值也会被重置。
        案例:
            docker container run  -d --restart on-failure --name restart-on-failure custom_linux:v0.2
            docker container run  -d --restart on-failure:3 --name restart-on-failure-3 custom_linux:v0.2
            
    unless-stopped    
        除非在停止docker服务之前,容器已经停止了,否则重启docker服务时,会自动重启。
        案例:
            docker container run  -d --restart unless-stopped --name unless-stopped custom_linux:v0.2 
        
    always
        每当容器停止或者重启docker服务时,都会自动重启容器。
        案例:
            docker container run  -d --restart always --name always custom_linux:v0.2 


温馨提示:
    查看重启策略和重启次数姿势1:
docker container inspect `docker ps -lq`  | grep RestartPolicy -A 3
docker container inspect `docker ps -lq`  | grep RestartCount     
    
    查看重启策略和重启次数姿势2:
docker container inspect -f '{{.RestartCount}}' `docker ps -lq` 
docker container inspect -f '{{.HostConfig.RestartPolicy}}' `docker ps -lq`
    
    
参考链接:
    https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart


端口映射常见写法:
    docker container run -d -p 88:80 nginx:1.20.1
        最常见的写法,将容器的80端口映射到宿主机的88端口。
        
    docker container run -d -p 89:80/tcp nginx:1.20.1  
        端口映射指定协议为tcp,默认情况下,使用就是tcp,因此通常对于tcp的服务可以不指定。

    docker container run -d -p 53:53/udp nginx:1.20.1  
        端口映射指定为udp,对于服务本身使用的是udp协议的服务而言,此处需要显式指定。
        
    docker container run -d -p 10.0.0.101:99:80/tcp nginx:1.20.1
        将端口映射明确绑定到具体的网卡上。
        
    docker container run -d -p 10.0.0.101::80/tcp nginx:1.20.1 
        将端口映射明确绑定到具体的网卡上,并且宿主机的端口是随机的。
        
    docker container run -idp 10.0.0.101:20-21:20-21 alpine  
        端口范围映射,将宿主机的20,21端口映射到容器的20,21端口。
        
    docker container run -idp 127.0.0.1:9200:9200 -p 10.0.0.101:9300:9300 alpine
        映射连续的端口,可以使用多个-p参数即可。
        
    docker container run -dP nginx:1.20.1
        随机端口映射。
        
    温馨提示:
        (1)对短选项进行合并时,需要注意短选项是否需要传参数,若需要穿参数,应该尽量往后靠;
        (2)当我们使用-p选项时,会自动进行端口映射,底层对应的是iptables的DNAT规则;
        (3)若有多个不连续的端口进行映射时,需要写多个"-p"选项即可;
        (4)使用"-P"(大写)时会自动进行端口映射,这个容器映射的端口取决于镜像对外暴露的服务端口(EXPOSE指令);
        (5)端口映射的语法格式为"-p 宿主机的IP地址:宿主机的端口号:容器的端口号:协议"。
        (6)docker外部节点访问容器时,底层采用的是DNAT技术,而容器访问外部服务,采用的是forward转发功能哟,并没有使用SNAT技术;
        
        
    
存储卷的基础管理: 
    增:
docker volume create oldboyedu-linux82
    创建一个自定义名称的存储卷。
docker volume create
    创建一个随机的存储卷。
    
    删:
docker volume prune -f
    移除所有未使用的本地存储卷。
    
docker volume rm test01 test02 
    移除一个或多个的存储卷。
    
    查
docker volume ls 
    查看存储卷列表。
docker volume inspect oldboyedu-linux82
    查看存储卷的详细信息。
    
    
    
    
    
    
容器使用存储卷: (容器使用存储卷后,数据不会被丢失!)
    docker container run -itdp 88:80 -v oldboyedu-linux82:/usr/share/nginx/html nginx:1.20.1
        将名为"oldboyedu-linux82"存储卷挂载到容器的"/usr/share/nginx/html"路径。如果存储卷名称不存在,则会自动创建。

    docker container run -itdp 99:80 -v oldboyedu-linux82:/usr/share/nginx/html -v test01:/oldboyedu-linux82/docker nginx:1.20.1
        如果一个容器需要多个挂载点,可以使用多个-v选项即可。
        
    docker container run -dv /usr/share/nginx/html nginx:1.20.1
        若不指定存储卷的名称,则会自动创建一个随机存储卷与其对应哟!
        

    docker run -idv test01:/oldboyedu-linux01:rw -v  test02:/oldboyedu-linux02 -v test03:/oldboyedu-linux03:ro alpine
        存储卷可以指定挂载点。
        
    docker run -id --volumes-from focused_mendel alpine
        启动容器时使用和"focused_mendel"容器相同的存储卷挂载信息。
        
    docker container run -dv /oldboyedu/docker-2022:/usr/share/nginx/html nginx:1.20.1
        也可以不使用存储卷,直接使用宿主机的一个路径。

    温馨提示:
        (1)若容器使用了随机存储卷,我们在删除时,可以使用"-v"选项去删除随机存储卷(匿名存储卷)。
            docker container rm -vf thirsty_wozniak
        (2)如果存储卷中有数据,且容器的挂载点之前也是有数据的,容器的数据并不会覆盖掉存储卷的数据;
        (3)如果存储卷中没有数据,且容器的挂载点之前也是有数据的,容器的数据会直接存储在存储卷中;
        (4)若不使用-v显示指定存储卷,并不能证明该容器不会进行持久化,这取决于镜像是否有VOLUME的指令;
        (5)我们也可以不适用存储卷,而是使用宿主机的路径挂在到容器中;

将"jasonyin2020/oldboyedu-games:v0.2"的游戏使用Centos借鉴一份,如何实现?
    1.将源代码拷贝出来;
     ...
    2.使用centos将nginx部署并存放游戏代码;
     ...
    3.提交镜像;
     ...
     
     
今日内容回顾:
    - docker容器命令的进阶
        - start
        - stop 
        - restart 
        - pause
        - unpause
        - create
        - kill
        - diff
        - export   (docker image import ...)
        - wait
        - update
        - commit
        .... 
        
    - docker容器的重启策略
        - no
        - always
        - on-failure[:max-retries]
        - unless-stopped
        
    - docker网络映射的原理
        - 外网访问容器时,"-p"本质上底层采用iptables的nat表实现DNAT
        - 容器访问外网时,通过ip_forward参数转发数据报文
        - "-p"参数的常见写法:  "-p 宿主机的IP地址:宿主机的端口号:容器的端口号/协议",-P表示随机端口映射。
        
    - docker存储卷使用
        - docker volume ..
                         ls
                         inspect
                         rm
                         prune
        
        - 容器使用存储卷:
            -v 存储卷名称:容器的路径[:权限]
            --volumes-from:
            
        - 直接将宿主机的路径挂在到容器中。
        
        
    - 手动制作有戏案例。

更多推荐

山石网科国产化防火墙,打造全方位边界安全解决方案

互联网的快速发展促进了各行各业的信息化建设,但也随之带来了诸多网络安全风险。大部分组织机构采用统一互联网接入方案,互联网出口承担着内部用户访问互联网的统一出口和对外信息服务的入口,因此在该区域部署相匹配的安全防护手段必不可少。防火墙作为目前使用最为广泛的网络安全防护技术,它可以通过监测、限制、更改跨越防火墙的数据流,尽

SQL Server数据库中了360后缀勒索病毒怎么办,勒索病毒解密数据恢复

随着互联网的发展,网络安全问题日益凸显,勒索病毒已经成为当今数字威胁中的一大主要犯罪行为之一。其中,360后缀勒索病毒作为一种常见的数据库攻击形式,对数据库的安全性提出了极大挑战。近期我们收到很多企业的求助,企业的服务器数据库遭到了360后缀勒索病毒攻击,导致系统全部瘫痪无法正常工作,下面就为大家介绍一下如何应对及预防

Learn Prompt-Prompt 高级技巧:HuggingGPT

HuggingGPT是一个Agent框架,利用ChatGPT作为任务规划器,根据每个模型的描述来选择HuggingFace平台上可用的模型,最后根据模型的执行结果生成总结性的响应。这个项目目前已在Github上开源,并且有一个非常酷的名字叫做JARVIS(钢铁侠的助手)。这项研究主要涉及到两个主体,一个是众所周知的Ch

【LLM】解析pdf文档生成摘要 | 智能文档概览

文章目录一、整体思路二、代码三、小结与改进1.小结2.后续可继续优化的点四、智能文档Reference一、整体思路非常简单的一个v1版本利用langchain和pdfminer切分pdf文档为k块,设置overlap等参数先利用prompt1对每个chunk文本块进行摘要生成,然后利用prompt2对多个摘要进行连贯组

Qt Charts简介

文章目录一.图标类型Charts分类1.折线图和样条曲线图2.面积图和散点图3.条形图4.饼图5.误差棒图6.烛台图7.极坐标图二.坐标轴Axes类型分类三.图例四.图表的互动五.图表样式主题一.图标类型Charts分类图表是通过使用系列类的实例并将其添加到QChart或ChartView实例来创建的。Qt图表模块提供

Laravel框架 - IOC容器详解

IOC容器代码好了,说了这么多,下面要上一段容器的代码了.下面这段代码不是laravel的源码,而是来自一本书《laravel框架关键技术解析》.这段代码很好的还原了laravel的服务容器的核心思想.代码有点长,小伙伴们要耐心看.当然小伙伴完全可以试着运行一下这段代码,然后调试一下,这样会更有助于理解.<?php//

R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据...

全文链接:http://tecdat.cn/?p=24492此分析的目的是构建一个过程,以在给定时变波动性的情况下正确估计风险价值。风险价值被广泛用于衡量金融机构的市场风险。我们的时间序列数据包括1258天的股票收益(点击文末“阅读原文”获取完整代码数据)。介绍为了解释每日收益率方差的一小部分,我们使用Box-Jenk

docker 安装 redis

文章目录redis单机版1.拉取redis镜像并创建数据卷目录2.复制和修改redis.conf3.启动redis容器4.进入容器并连接redisredis一主两从集群搭建1.复制三份redis.conf2.启动master和slave3.查看关系和数据测试redis高可用集群搭建1.复制三份sentinel.conf

基于微信小程序的语言课学习系统设计与实现(源码+lw+部署文档+讲解等)

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

『贪吃蛇』AI 算法简易实现(中秋特别版)

前言一年一度的中秋节就快到了,平台也有各种各样的中秋发文活动,正在翻阅时偶然间我看到了这篇文章:《兔饼大作战》:吃月饼、见月亮,还能咬自己?|欢庆中秋特制版-掘金(juejin.cn)大家肯定比较熟悉了,这个游戏的内核就是贪吃蛇,作者也是对玩法做了很多调整,趣味性十足,同时加入兔饼、月亮等元素增加节日氛围,可以说创意性

【C++】仿函数和priority_queue(优先级队列)

目录一、仿函数二、priority_queue(优先级队列)1、概念:2、使用:3、数组中第K个最大元素4、priority_queue的模拟实现一、仿函数①、概念:仿函数,即函数对象。一种行为类似函数的对象,调用者可以像函数一样使用该对象,其实现起来也比较简单:用户只需实现一种新类型,在类中重载operator()即

热文推荐