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      

你可能感兴趣的:(docker,容器,运维)