• docker day02


    昨日内容回顾:
        - 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:
                
            - 直接将宿主机的路径挂在到容器中。
            
            
        - 手动制作有戏案例。

  • 相关阅读:
    CRM系统的三大核心功能
    picoctf_2018_got_shell
    进程(fork()详解)
    segmentation
    java类比C++的STL库
    数学建模 线性规划 遗传算法
    技术对接35
    出纳商铺如何实施数字员工提高投资回报率
    npm升级最新稳定版
    python回文日期 并输出下一个ABABBABA型回文日期
  • 原文地址:https://blog.csdn.net/lpx1249115962/article/details/132927478