docker day01

2023-09-16 22:44:39

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-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> 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      

更多推荐

Matlab--高等应用数学问题的MATLAB求解

1.求解n阶导数%%%如何求解n阶导数,用到diff(f,n)symsx;f=sin(x)/(x^2+4*x+3);diff(f,4)%%%如何求解100阶导数tic,F=diff(f,100);toc2.Matlab语言的优越性%%%MATLAB的优点:%MATLAB语言的简洁高效性%MATLAB语言的科学运算功能%

揭秘多数据模型与数据联动如何重塑企业数据处理和决策过程

在数字化时代,数据已经成为企业竞争的核心资源。为了更好地利用数据,许多企业开始采用低代码的多数据模型和数据联动。这些技术和方法可以用于运用多种数据模型来对用户进行分类;可以利用数据联动来提高推荐的准确性和效率,帮助企业更快速、更高效地构建数据驱动的应用程序,从而提升业务效率和竞争力。业务需求说明:1、配置固定资产领用单

Nat. Rev. Bioeng. | 中山大学左涛组详述肠道微生态工程化改造

肠道微生态工程化改造EngineeringthegutmicrobiomeReviewArticle,2023-6-16,NatureReviewsBioengineeringDOI:10.1038/s44222-023-00072-2原文链接:https://www.nature.com/articles/s4422

vue国际化教程

需求背景项目需求要做国际化,结果网上找了好几篇文章,没有一个可以一次性搞定,现在这里总结一下。首先,我们分为两部分处理,一个是前端页面的静态文字,这个由前端vue.json自行处理。第二部分就是后端的错误消息和日志部分,我们由springboot的拦截器来处理。i18n介绍i18n(其来源是英文单词internatio

说说hashCode() 和 equals() 之间的关系?

每天一道面试题,陪你突击金九银十!上一篇关于介绍Object类下的几种方法时面试题时,提到equals()和hashCode()方法可能引出关于“hashCode()和equals()之间的关系?”的面试题,本篇来解析一下这道基础面试题。先祭一张图,可以思考一下为什么?介绍equals()的作用是用来判断两个对象是否相

第二证券:算力概念强势拉升,竞业达涨停,南凌科技等大涨

算力概念20日盘中强势拉升,到发稿,竞业达涨停,南凌科技涨近10%,拓维信息涨近9%,亚康股份、神州数码涨约5%,青云科技涨逾4%。音讯面上,9月19日,国际大学生程序设计竞赛(ICPC)官网披露了华为创始人兼CEO任正非与ICPC基金会及金牌获得者的谈话纪要。任正非表明,我们行将进入波澜壮阔的第四次工业革命,其规划之

Denoising diffusion implicit models 阅读笔记

Denoisingdiffusionprobabilisticmodels(DDPMs)从马尔科夫链中采样生成样本,需要迭代多次,速度较慢。Denoisingdiffusionimplicitmodels(DDIMs)的提出是为了加速采样过程,减少迭代的次数,并且要求DDIM可以复用DDPM训练的网络。加速采样的基本思

许战海战略文库|品类缩量时代:制造型企业如何跨品类打造份额产品?

所有商业战略的本质是围绕着竞争优势与竞争效率展开的。早期,所有品牌立足于从局部竞争优势出发。因此,品牌创建初期大多立足于单个品类。后期增长受限,就要跨品类持续扩大竞争优势,将局部竞争优势转化为长期竞争优势,如果固化不前很难获得增长,也无法成为“链主品牌”。当品类缩量,制造型企业要跨品类打造份额产品第一,聚焦的品类处于增

数据库设计步骤

一、数据库设计重点:有效存储、高效访问1、为什么要进行数据库设计:(1)减少数据冗余;(2)避免数据异常维护;(3)节约存储空间;(4)高效访问;二、数据库设计步骤1、需求分析;2、逻辑设计:ER图等建模;3、物理设计:根据每种数据库特点设计;4、维护优化;三、为什么要进行需求分析1、了解系统中所要存储的数据;2、了解

基于本地持久内存的并行一致性哈希文件系统CHFS

摘要CHFS是一个利用计算节点的持久内存的自适应并行文件系统。该设计完全基于高度可扩展的分布式键值存储,采用一致性哈希算法。CHFS通过消除专用元数据服务器、顺序执行和集中式数据管理,提高了并行数据访问性能和元数据性能的可扩展性。该实施利用了多核和多核CPU、高性能网络和Mochi-Margo库的远程直接内存访问。在一

操作系统备考学习 day3 (2.1.1 - 2.1.6)

操作系统备考学习day3二、进程与线程2.1进程与线程2.1.1进程的概念和特征2.1.2进程的状态与转换2.1.3进程的组织2.1.4进程控制2.1.5进程间通信(IPC)2.1.6线程和多线程模型二、进程与线程2.1进程与线程2.1.1进程的概念和特征进程:是动态的,是程序的一次执行过程。同一个程序多次执行会对应多

热文推荐