• docker day01


    docker:
        是一个容器管理工具。podman,pouch,lxc,rkt,...
        2013开源 ---> iT福音 ---> 2015~
        coreOs ---> Redhat ---> IBM
        
    什么是容器:
        生活中装东西的,比如水杯,碗,水缸,鱼缸,...
        在计算机中,容器装的就是文件,只不过这些文件是一类程序,包括该程序依赖的库文件。
        
        
    LINUX内核: (2007年)
        NameSpace:
            实现资源隔离,包括但不限于网络,文件系统,进程...
            
        Cgroup:
            资源限制的。
        
    chroot:
        更改根目录,可以手动将一个目录指定为一个根目录。
            
    overlayFs:
        联合文件系统。
        
    docker daemon---> lxc ---> container
    docker daemon ---> runc ---> container

    docker和K8S有啥关系?
    docker:
        容器管理工具。13年开源。使得容器开始热度较高... "docker inc " 
        logo ---> 小船。
        
        2014年底: 开始做集群编排:"docker swarm"
            ----> OCI --- runc
        2017年底: docker完败...
            docker daemon ---> containerd ---> containerd-ship ---> runc ---> 容器。
            containerd ---> CNCF
        2019年无奈被收购... M()
        
    K8S:
        容器编排工具,14年6月左右开源。"Google" ---> 底层采用docker作为容器运行时,可以以集群的方式工作。
        logo ---> 船舵
        15年 ---> CRI ----> docker 不支持,由Google工程师们来维护"dockershim"
            ... CNCF (Google,Redhat,....华为,腾讯,阿里....)
            containerd 不支持 CRI ---> Google,Redhat,docker inc 华为,.... ---> containerd 支持CRI
        20年 ---> 未来在K8S 1.22+后将尝试移除docker运行时。1.24版本中,默认使用了containerd容器运行时。
        
        
        
    centos ---> ubuntu ---- (麒麟) ---> alpine


    centos7.X ...  内核旧 ...
    centos stream ...

    ubuntu ---> 内核新

    师夷长技以制夷 ...... 


    部署docker:
    (1)卸载旧版本的docker环境
    yum -y remove docker \
               docker-client \
               docker-client-latest \
               docker-common \
               docker-latest \
               docker-latest-logrotate \
               docker-logrotate \
               docker-engine
               
    (2)添加docker的软件源
    curl -o /etc/yum.repos.d/docker-ce.repo  https://download.docker.com/linux/centos/docker-ce.repo
            
    (3)安装docker-ce软件包
    yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin


    (4)启动docker服务并设置开机自启动
    systemctl --now enable docker 

    (5)查看docker的版本信息
    docker version

    (6)测试docker环境是否安装成功,如上图所示。
    docker run hello-world

    温馨提示:
        (1)查看docker的现有版本
    yum list docker-ce --showduplicates | sort -r
        (2)安装docker指定的版本语法
    yum install docker-ce- docker-ce-cli- containerd.io docker-compose-plugin


    快速部署:
        1)内网下载软件包
    wget http://192.168.11.253/Docker/day01-%E8%80%81%E7%94%B7%E5%AD%A9%E6%95%99%E8%82%B2-docker%E7%8E%AF%E5%A2%83%E9%83%A8%E7%BD%B2%EF%BC%8C%E9%95%9C%E5%83%8F%E7%AE%A1%E7%90%86%E5%8F%8A%E5%AE%B9%E5%99%A8%E7%AE%A1%E7%90%86%E5%AE%9E%E6%88%98%E6%A1%88%E4%BE%8B/softwares/oldboyedu-docker-ce-20_10_17.tar.gz

        2)安装docker-ce软件包 
    tar xf oldboyedu-docker-ce-20_10_17.tar.gz && cd docker-ce-20_10_17 && yum -y localinstall *.rpm


        3)开启docker的自动补全功能
    source /usr/share/bash-completion/bash_completion    
        
        
        4)配置docker镜像加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    docker info


            参考链接:
                https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
                

        5)测试docker是否安装成功
    docker run hello-world    

        6)彩蛋时刻
    docker run --restart unless-stopped -dp 80:80 jasonyin2020/oldboyedu-games:v0.2


            参考链接:
                https://hub.docker.com/r/jasonyin2020/oldboyedu-games

        
    参考链接:
        https://docs.docker.com/engine/install/centos/
        https://docs.docker.com/engine/install/ubuntu/
        
        
        
        

    镜像的基础管理:
        增:
    docker image pull alpine
        从官方的hub仓库拉取镜像,若不指定tag版本,默认使用"latest"。
        
    docker image pull nginx:1.20.1
        从官方的hub仓库拉取镜像,指定tag版本为"1.20.1"。
        
        
    说明:
        docker image pull可以简写为"docker  pull"
        
        
        删:
    docker image rm jasonyin2020/oldboyedu-games:v0.2
        删除镜像。

    说明:
        docker image rm可以简写为"docker rmi"

        
        改:
    docker image tag jasonyin2020/oldboyedu-games:v0.2 oldboyedu-linux82:v0.1

     
    说明:
        docker image ls等效于"docker  tag"    
        
        查:
    docker image ls
        查看镜像的列表信息。

    docker image ls nginx
        查看nginx的存储库(REPOSITORY)镜像信息。
        
    docker image ls -q
        查看镜像的ID。
        
    docker image ls --no-trunc
        不截断输出docker的镜像ID。
     
    说明:
        docker image ls等效于"docker  images"    
        
        
        
    彩蛋: 本地镜像迁移.
        导出镜像的两种方式:
    docker image save -o 1111111 jasonyin2020/oldboyedu-games:v0.2 
    docker image save jasonyin2020/oldboyedu-games:v0.2 > 22222222

        导入镜像的两种方式:
    docker image load -i 1111111 
    docker image load < 22222222


    容器的基础管理:
    第一梯队的命令:
     ls        *****   
        docker container ls|ps|list
            查看容器信息。
        docker container ls -q
            只查看容器的ID。
        docker container ls -q --no-trunc
            只查看容器的ID并且ID不截断输出。
        docker container ps -l
            只查看最新创建的容器相关信息。
        docker container ls -a
            查看所有状态的容器,默认只显示仅在运行的容器。
        docker container ls -s 
            查看容器的总文件大小。
            
        各字段输出说明:
            CONTAINER ID :
                容器的ID。
            IMAGE :
                镜像信息,此处既可以是镜像名称,也可以是镜像的ID。
            COMMAND:
                容器运行的守护进程。
            CREATED:
                创建容器的时间。
            STATUS:
                当前容器所处的状态,以及该状态持续的时间。
            PORTS:
                端口映射相关信息。
            NAMES
                容器的名称。

     run       *****
        docker container run -d nginx:1.20.1
            后台运行一个容器。

        docker container run -d --name oldboyedu-linux82 nginx:1.20.1
            在后台运行一个容器并指定容器名称。
            
        docker container run -itd alpine
            -i:
                以交互式的方式运行容器。
                
            -t:
                分配一个终端。
        
        docker container run -d -p 88:80  nginx:1.20.1
            后台运行nginx容器,并指定端口映射,将宿主机的88端口映射到容器的80端口。
                
        docker container run -itd -w /oldboyedu/linux82/docker -e SCHOOL=oldboyedu -e class=linux82  --rm alpine
            -w:
                指定容器的工作目录,即连接该容器后的初始目录。
            -e:
                传递环境变量。
            --rm:
                当容器退出时,直接删除该容器。一般用于测试使用。
                
        docker container run -d alpine tail -f /etc/hosts
            启动容器是修改COMMAND.
     
     rm        *****
        docker container rm -f 30dca9193ac3 2a83837304d4 elastic_herschel competent_ramanujan
            删除容器,可以基于容器的ID或者容器的名称。
            
        prune: (了解即可)
            docker container prune -f
                移除所有已经停止的容器。
     
        docker container rm -f `docker container ps -aq`
            删除所有状态的容器。
     

     cp        *****
        docker container cp oldboyedu.html hopeful_rubin:/usr/share/nginx/html/
            将宿主机的"oldboyedu.html"拷贝到hopeful_rubin容器的"/usr/share/nginx/html/"路径下。
            
        docker container cp hopeful_rubin:/docker-entrypoint.sh ./test.sh
            将hopeful_rubin容器的"/docker-entrypoint.sh"文件拷贝到当前目录并重命名为"test.sh"。


     exec      *****
        docker container exec hopeful_rubin ls -l /
            在"hopeful_rubin"正在运行的容器中执行"ls -l /"命令。
     
        docker container exec -it hopeful_rubin bash
            在容器中执行一个bash程序,并分配一个交互式的终端。
     
        彩蛋:  attach和exec有啥区别?   (了解即可) 
            docker container attach hardcore_cannon 
                将本地的stdin,stdout,stderr连接到"hardcore_cannon"容器。
                如果容器的守护进程是bash,sh等工具,且启动容器时有-t参数,我们可以使用"ctrl +p , ctrl +q"退出容器。

        区别:
            attach:
                将宿主机的stdin,stdout,stderr连接到正在运行的容器,并不会产生新的进程。
                
            exec:
                在一个正在运行的容器内启动一个新的进程,话句话说,运行一个新的命令。

     top       *****
        docker container top optimistic_wescoff
            查看容器中运行的哪些进程信息。
     
     inspect   *****
        查看容器的详细信息。
        docker container inspect -f "{{ .NetworkSettings.Networks.bridge.IPAddress }}" condescending_galileo
        docker container inspect -f "{{ .NetworkSettings.IPAddress }}" condescending_galileo
        docker container inspect -f "{{ range .NetworkSettings.Networks}} {{.IPAddress}} {{end}}" condescending_galileo 
            获取IP地址。
            
        
        docker container inspect -f "{{ .NetworkSettings.Networks.bridge.MacAddress }}" condescending_galileo 
        docker container inspect -f "{{ .NetworkSettings.MacAddress }}" condescending_galileo
        docker container inspect -f "{{ range .NetworkSettings.Networks}} {{.MacAddress}} {{end}}" condescending_galileo 
            获取MAC地址。
            
            
        docker inspect --format='{{json .NetworkSettings.IPAddress}}' condescending_galileo 
            可以将输出转换为JSON格式。
        
     
     logs      *****
            docker container logs -f -t --since 2022-08-29T09:46:23.639559272Z condescending_galileo 
            docker container logs -f -t --since 7m condescending_galileo
                -f: 
                    实时查看容器日志。
                -t:
                    显示时间戳。
                --since:
                    从某个时间戳(2022-08-29T09:46:23.639559272Z)到现在的所有日志。也支持某个时间范围内的日志。比如7分钟内的日志。
        
            docker container logs -f -t --until  10m condescending_galileo 
                查看10分钟之前的日志。
                
            
            docker container logs -f -t --until  2022-08-29T09:46:04.107672065Z --since 2022-08-29T09:23:40.362635984Z  condescending_galileo 
                查看"2022-08-29T09:23:40.362635984Z"-"2022-08-29T09:46:04.107672065Z"时间段的日志。

        彩蛋: nginx日志产生了2G的文件大小,如何查看最近10分钟的日志?
        
     

    今日内容回顾:
        - 什么是容器: 程序+ 依赖的库文件进行打包的一种技术,docker,podman,pouch,lxc,rkt,containerd...
        - docker环境部署,镜像加速,命令行自动补全
        - 镜像管理:(docker image ...)
            - pull:
                拉取镜像。
            - ls:
                查询镜像。
                -a:
                -q:
                --no-trunc:
            - save:
                导出镜像。
                -o:
                >:
            - load:
                导入镜像。
                -i:
                <:
            - rm:
                删除镜像。
                -f:
            - tag:
                打标签。
                
            - build
            - history
            - inspect
         - 容器管理: (docker container ...)
            - ls|list|ps:
                查看容器的信息。
                -q:
                -a:
                -s:
                --no-trunc:
            - run:
                创建一个新的容器。
                -i:
                    分配一个标准输入。便于进行交互式操作。
                -t:
                    分配一个tty伪终端。
                -d:
                    后台运行。
                -w:
                    指定工作目录,即连接该容器后的初始目录。
                -p:
                    将宿主机的端口映射到容器端口。
                -e:
                    传递环境变量。
                --name:
                    指定容器的名称。
                --rm:
                    当容器的守护进程退出时,容器也被随之删除,一般用于测试使用。
                    

                --network
                --privileged
                --restart
                --volumes-from
                --add-host
                --link
                --ip
                --memory-swap
                -m
                -v:
                -P:
                -h
            - rm:
                删除容器。
                -f:
            - prune
                删除所有已停止的容器。
            - inspect:
                查看详细信息。
            - exec:
                在一个正在运行的容器内启动一个新的进程,话句话说,运行一个新的命令。
            - attach
                将本地的Stdin,stdout,stderr连接到正在运行的容器,并不会产生新的进程。
            - cp:
                用于宿主机和容器之间进行文件拷贝的工具。
            - top:
                查了容器的进程。
            - logs:
                查看容器的日志。
                
                

    第二梯队:      
     restart   ***
     start     ***
     stop      ***
     rename    ***
     kill      ***
     stats        ***
     
    了解即可:
     commit    
     create    
     diff      
     export    
     pause     
     unpause 
     port      
     update    
     wait      

  • 相关阅读:
    GitHub标星34.7k,没有记不住的正则表达式
    Redis数据类型之List类型
    shell脚本的简单使用
    计算机网络学习笔记(I)——概述
    10 Servlet
    MPViT : Multi-Path Vision Transformer for Dense Prediction
    ROS的程序编写流程
    rsync远程同步
    【数据结构】二叉搜索树
    LINUX异常栈初始化
  • 原文地址:https://blog.csdn.net/lpx1249115962/article/details/132927111