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

你可能感兴趣的:(docker,eureka,java)