精华内容
下载资源
问答
  • 容器技术的工作原理
    千次阅读
    2021-11-18 23:11:35

    以前被面试或者面试别人的时候,出现频率比较高的一个问题是:看你简历上写熟悉容器技术,那你是怎么理解容器的?还算可以的回答是:容器技术本身不是新的技术,容器本质上就是宿主机操作系统上的一个特殊的进程,利用Namespace和Cgroup技术实现了资源的隔离与限制,并且实现了容器镜像,解决了应用程序分发的问题。答到这里,可以说对容器的理解还是比较全面的了。

    Docker的安装:本不想写网上一搜一堆,且不需要理解的东西,但是看好多文章里写的安装过程,多少有点坑,所以还是写一下,安装过程就在ubuntu上操作,因为CentOS7将来也就不维护了,听说ebay生产环境系统也都用ubuntu了。

    step1: 更新ubuntu apt-get源

     sudo apt-get update
     
     sudo apt-get install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release

    step2: 添加Docker官方GPG key

    
     curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

    step3: 安装Docker稳定版仓库地址

     echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    step4: 安装Docker

    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io

    通常安装完Docker就自动运行了,但是很多人想长期用这个Docker作为一个test或staging环境,那么直接用估计会有问题,Docker默认的存储目录在/var/lib/docker/下,有些主机的这个盘很小,尤其是云主机,用一段时间把系统盘占满了,还得迁走,就很麻烦,不如一步到位,把数据存储目录放到较大的盘上,比如/data/docker/。

    step5: 编辑/lib/systemd/system/docker.service文件,在ExecStart选项后加上--data-root=/data/docker,这样就自定义了数据目录,结果如下所示:

    ExecStart=/usr/bin/dockerd -H fd:// --data-root=/data/docker --containerd=/run/containerd/containerd.sock --log-level warn --log-opt max-size=100m --log-opt max-file=5

    然后重新加载systemd并重启Docker进程即可。

    systemctl daemon-reload
    systemctl restart docker

    step6: 验证容器已经安装成功

    # docker run hello-world
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.

    用Docker运行一个Nginx容器:Docker作为工具来用,其实没有什么复杂的东西,日常只要掌握Dockerfile,会用一些基本的命令就可以了,下面以Nginx为基础,制作我们的镜像并运行。

    step1: 编写Dockerfile

    # 这里指定你的基础镜像,建议写固定的版本号,不然默认的latest更新可能会导致你的代码不兼容
    FROM nginx:1.21.3
    
    # 进入容器后的默认目录
    WORKDIR /usr/share/nginx/html
    
    # 把index.html内容改成我们想要的内容
    RUN echo "This is my first image base nginx!" > index.html

    step2: 生成Docker镜像

    docker build -t my_nginx:v1.0 -f Dockerfile .

    step3: 查看生成的镜像,并使用该镜像启动容器

    # docker images
    my_nginx     v1.0      5d0547b2cc8d   3 hours ago              133MB
    
    # docker run -d 5d0547b2cc8d
    
    # docker ps
    CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
    6961dd4fce83   5d0547b2cc8d   "/docker-entrypoint.…"   18 minutes ago   Up 18 minutes   80/tcp    strange_jepsen

    step4: 查看容器IP地址,并使用容器IP访问nginx服务,这里我们介绍使用nsenter命令,场景是我们的nginx镜像中并没有ifconfig命令,但是我们又想查看IP地址,这时就可以通过nsenter命令进入到容器的Namespace,并用宿主机上的命令来调整容器。

    [root@iZ2zec5wzaupsrdu55oeaiZ docker]# docker inspect 6961dd4fce83 | grep -i pid
                "Pid": 30176,
                "PidMode": "",
                "PidsLimit": null,
    [root@iZ2zec5wzaupsrdu55oeaiZ docker]# nsenter -t 30176 -n ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.18.0.2  netmask 255.255.0.0  broadcast 172.18.255.255
            ether 02:42:ac:12:00:02  txqueuelen 0  (Ethernet)
            RX packets 18  bytes 1256 (1.2 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 14  bytes 1386 (1.3 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@iZ2zec5wzaupsrdu55oeaiZ docker]# curl 172.18.0.2
    This is my first image base nginx!

    转入正题,细说Namespace: Namespace不是一项新技术,它是内核自带的一项功能,Docker之所以能实现资源隔离,就是调用了内核的Namespace功能。该功能对内核资源进行隔离,使得容器进程都可以在单独的命名空间中运行,并且只可以访问当前容器命名空间的资源。

    Linux下的资源类型有很多,那么Namespace就也分为下面几类对资源进行限制:

    • PID namespace:用于隔离进程 ID。
    • Network namespace:隔离网络接口,在虚拟的 net namespace 内用户可以拥有自己独立的 IP、路由、端口等。
    • Mount namespace:文件系统挂载点隔离。
    • IPC namespace:信号量、消息队列和共享内存的隔离。
    • UTS namespace:主机名和域名的隔离。
    • User namespace: 用户和组的隔离。

    上面列出了各种资源的隔离,下面就拿 PID namespace 来举例,看看这个在Linux操作系统里是如何实现的,Linux 系统中创建进程的系统调用是 clone(),如下代码所示:

    int pid = clone(main_function, stack_size, SIGCHLD, NULL); 

    但是一旦我们传入了 CLONE_NEWPID 参数,新创建的进程就进入了一个独立的空间,在这个空间里它自己的PID是1,在外面看来它就是一个正常的进程,进程号可能是xxx这种,但肯定不是1,因为1号进程是操作系统的systemd进程,如下代码就实现了进程隔离:

    int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL); 

    通俗来讲,一个进程在启动后,Namespace就给他一通包装,然后这个进程就在自己的小天地里自由的玩耍了。但齐天大圣终穷逃不出如来的五指山,对于开发者来讲,它仍然是操作系统上的一个进程罢了。

    对于大多数人来讲,我们只需要知道Docker是如何实现进程隔离的,如果以后有需要去深入挖掘,就按着操作系统的Namespace功能的方向去找就好了。

    更多相关内容
  • 想要完成一个基本的容器,容器所需要做的六项隔离 Linux 内核中就提供了这六种命名空间(namespace) 隔离的系统调用 序号 Name space 系统调用参数 隔离内容 1 UTS CLONE_NEWUTS 主机名与域名 2 IPC CLONE_...
  • Linux容器技术原理和使用

    千次阅读 2019-11-21 16:55:17
    一、为什么会有虚拟化环境 1.1 隔离和共享 在一个多员共用的开发环境或者一台服务器运行多个逻辑隔离的服务器进程。谁的运行环境也不希望影响...传统的虚拟化技术是通过硬件模拟或者操作系统软件实现,而容器技术...

    一、为什么会有虚拟化环境

    1.1 隔离和共享

    在一个多员共用的开发环境或者一台服务器运行多个逻辑隔离的服务器进程。谁的运行环境也不希望影响到另一个谁。也就是一个物理机器需要虚拟化出多个环境或者容器。通过提供一种创建和进入容器的方式,操作系统让应用程序就像在独立的机器上运行一样,但又能共享很多底层的资源。

    1.2 虚拟化vs容器

    传统的虚拟化技术是通过硬件模拟或者操作系统软件实现,而容器技术可以比传统虚拟化更轻量级。

    容器在提供隔离的同时,还通过共享这些资源节省开销,这意味着容器比真正的虚拟化的开销要小得多。例如,可以有效地共享公共文件(比如 glibc)的页缓存,因为所有容器都使用相同的内核,而且所有容器还常常共享相同的 libc 库(取决于容器配置)。这种共享常常可以扩展到目录中其他不需要写入内容的文件。

    和传统虚拟化相比,容器启动很快,由于共享系统资源,一台主机可以运行上千个容器,并且容器镜像用类似git分发思想,用户更容易创建,分发,更新存储这些镜像。

    1.3 前世和今生

    今生是docker大流行的时代,而前世就是早于1982年的chroot工具,以及后面经过改进并且现在还在使用的lxc技术。早期的docker的代码实现基于LXC(0.9之前)。

    二、LXC(Linux容器)的两个重要概念

    Linux容器功能是基于 cgroups 和 Namespace 来实现的. 所以要了解 Linux 容器必须先了解 cgroup 和 Namespace.

    2.1、cgroups(控制组)

    cgroups 是将进程分组管理的内核功能.通过cgroups可以隔离进程, 同时还可以控制进程的资源占用(CPU, 内存等等)情况在操作系统底层限制物理资源,起到 Container 的作用。进程可用的cpu资源由cpuset指定。

    2.2、Namespace (命名空间)

    Namespace让每个进程组有独立的PID, IPC和网络空间.Namespace通过 clone系统调用来实现的.

    clone系统调用的第3个参数flags就是通过设置Namespace来划分资源的.

    三、LXC的安装

    LXC依赖于epel-release的安装,EPEL(Extra Packages for Enterprise Linux)是Fedora 社区打造提供高质量软件包的项目,相当于一个第三方源。

    yum install epel-release -y

    然后再安装LXC相关的工具包,和创建容器所需要的模板lxc-templates

    yum install lxc lxc-templates -y

    安装完使用lxc-checkconfig检查下操作系统对容器技术的支持

    图1、操作系统对LXC容器的技术支持

    四、LXC的使用

    4.1 LXC工具包概览

    LXC所有的操作工具api都在这里,可以对LXC进行相应的操作。

    图2、LXC所有命令

    4 .2 创建一个容器

    使用预定义的模板创建一个容器。它会根据模板设置自动下载依赖环境包并安装。

    lxc-create -n 容器名称 -t 模板(不需要加 lxc)

    lxc-create -n mariolu-console -t centos

    模板就是第3节安装的lxc-templates工具包。所有模板放在这个目录下/usr/share/lxc/templates/

    图3、LXC的所有模板

    跟chroot思想一样,安装完容器,所有的主机文件夹根目录被重定义到/var/lib/lxc/mariolu-console

    图4、重新定义的root路径

    4.3 启动容器

    就像安装完机器后,我们要开机启动服务器。Lxc也有相应的步骤就是

    lxc-start -n mariolu-console

     

    图5、启动界面

    但是我们很快就发现,启动需要密码,但是使用容器创建没有输入密码,难道是有什么默认密码吗

    图6、登录密码步骤

    在这里并不能看到root密码,密码或者被用x字符替代,或者是一串hash码。

    cat /var/lib/lxc/mariolu-console/rootfs/etc/shadow

    chroot /var/lib/lxc/mariolu-console/rootfs passwd

    网络搜索没找到默认密码,但是找到了这么一句话:

    The root password is set up as expired and will require it to be changedat first login, which you should do as soon as possible. If you lose the root password or wish to change it without starting the container, you can change it from the host by running the following command (which will also reset the expired flag):

    chroot /var/lib/lxc/sspl-test/rootfs passwd

    YES! Give Me Five! 这个告诉我们重置密码的命令。我们新开一个窗口,完成密码的重置,然后重新切换回原来的窗口,这时候就可以用密码愉快的登陆了。

     

    图7、重置root密码

    图8、登录成功

    展开全文
  • 容器的实现原理

    千次阅读 2019-06-19 09:55:32
    容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。 对于docker等大多数linux容器来说,cgroups技术是用来制造约束的主要手段,而namespace技术则是用来修改进程视图的主要方法。...

    容器的本质

    容器的本质是一个进程。容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。

    对于docker等大多数linux容器来说,cgroups技术是用来制造约束的主要手段,而namespace技术则是用来修改进程视图的主要方法。

    首先创建一个容器试试:

    docker run -it busybox /bin/sh
    / #
    / # ps
    PID  USER   TIME COMMAND
      1 root   0:00 /bin/sh
      10 root   0:00 ps
    

    从上面可以看到,docker里最开始执行的/bin/sh,这就是容器内部的第一号进程(pid=1),而这个容器一共只有2个进程,也就是说,docker隔离在了一个跟宿主机完全不同的世界当中。
    本来我们在宿主机上运行一个/bin/sh程序,操作系统会给它分配一个进程编号,pid=100,现在docker把这个/bin/sh程序运行在一个容器当中,使用一个“障眼法”,让它永远看不到其他的进程,让它误以为自己就是pid=1。
    这个就是linux的namespace机制。而namespace的使用方式也很简单,它实际上只是linux创建新进程的一个可选参数。我们知道,linux系统中创建线程的系统调用是clone();比如:

    int pid = clone(main_function, stack_size, SIGCHLD, NULL); 
    

    这个系统调用会为我们创建一个新的进程,并且返回它的进程号pid。而但我们调用clone创建新进程时,在参数中指定CLONE_NEWPID参数:

    int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL); 
    

    这个时候,新创建的这个进程将会“看到”一个全兴的进程空间,在这个进程空间里,它的pid就是1。

    namespace实现了容器间资源的隔离。linux使用6中namespace,分别对应6中资源:Mount, UTS, IPC, PID,Network和User。

    这些就是linux容器最基本的实现原理。docker容器听起来很玄,实际上就是在创建容器进程时,指定了这个进程所需要启动的一组namespace参数。这样,容器就只能看到当前namespace所限定的资源、文件、设备、状态和配置等。而对于主机以及其他不想管的程序,它就完全看不到了。

    为了更好的理解容器的特性,这里讨论容器的底层实现技术。
    cgroup和namespace是最重要的两种技术。cgroup实现资源限制,namespace实现资源隔离。

    cgroup

    linux操作系统通过cgroup可以设置进程使用CPU、内存和IO资源的限额。前面提到的–cpu-shares,-m,–device-write-bps实际就是在配置cgroup。
    在/sys/fs/cgroup/cpu/docker目录中,linux会为每个容器创建一个cgroup目录,以容器的长ID命名。
    在这里插入图片描述

    namespace

    namespace实现了容器间资源的隔离。
    linux使用6中namespace,分别对应6中资源:Mount, UTS, IPC, PID,Network和User。

    Mount namespace

    Mount namespace让容器看上去拥有整个文件系统。

    UTS namespace

    UTS ns让容器拥有自己的hostname。容器的hostname默认是它的短ID,可以通过-h或 --hostname参数来设置。

    IPC namespace

    IPC namespace让容器拥有自己的共享内存和信号量,实现进程间通信。

    PID namespace

    Network namespace

    让容器拥有自己独立的网卡、ip、路由等资源。

    User namespace

    让容器能够管理自己的用户,host不能看到容器中创建的用户。

    展开全文
  • Docker容器原理详解

    千次阅读 2021-07-27 01:45:09
    如下所示: 传统虚拟机技术与容器技术的对比 Docker引擎 Docker组成 docker最核心的组件 image镜像,构建容器(我们将应用程序运行所需的环境,打包为镜像文件) Container,容器(你的应用程序,就跑在容器中) 镜像...

    Linux部署服务的形式

    1. 纯物理机的服务器部署

    在这里插入图片描述

    2. 虚拟化的部署形式

    相比纯物理机的部署形式,虚拟机的部署形式解决了哪些问题

    1. 控制了成本
    2. 节约了一定的资源
    3. 迁移和扩展也得到了优化,可以利用虚拟机的模板功能,vmware提供了模板克隆

    虚拟化部署的局限性

    • 每一个虚拟机都是一个完整的操作系统,要分配系统资源,虚拟机多到一定程度时,操作系统本身的资源也就消耗殆尽,或者说必须扩容。

    Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器。Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
    在这里插入图片描述

    虚拟化技术的应用

      云计算技术,将计算的工作放在云上去执行
      去阿里云购买RDS数据库服务,不需要自己搭建数据库,做数据库高可用等等
      对数据的增删改查,用的全都是云上的数据库,云计算的技术就是基于kvm虚拟化技术去实现的
    

    常用的虚拟化工具

    • VMware workstation(属于个人学习使用),主要用于windows平台(创建虚拟机+安装系统)
    • 企业版虚拟化,VMware esxi虚拟化工具,高性能服务结合,进行服务器资源虚拟化
    • KVM工具,linux下的虚拟机工具(创建虚拟机+安装各种系统)

    KVM虚拟化工具和VMware虚拟化工具的差别

      在虚拟化底层技术上,KVM和VMware后续版本一样,都是基于硬件辅助虚拟化实现
      不同的是VMware作为独立的第三方软件可以安装在Linux、Windows、MacOS等多种不同的操作系统之上
      KVM是基于内核的虚拟机,kvm技术只能基于Linux系统上使用
    

    什么是虚拟化技术

    • 虚拟化(技术)是一种资源管理技术,是将计算机的各种实体资源(CPU,内存,磁盘空间,网络适配器等),予以抽象,转换后呈现出来并可供分隔、组合为一个或多个电脑配置环境。

    在这里插入图片描述

    3.Docker容器的部署形式

    虚拟化技术分为全虚拟化技术,半虚拟化技术,还有基于CPU硬件加持下的全虚拟化技术。但是虚拟化技术的目的都是虚拟化出一台完整的计算机,拥有底层的物理硬件、操作系统和应用程序的完整环境。这种方式背后都是HyperVisor(虚拟机监控程序)虚拟化做了大量的工作,特别重量级。

    • 不同于虚拟化技术要完整的虚拟化一台计算机,容器技术更像是操作系统层面的虚拟化,它只需要虚拟出一个操作系统环境,这种方式对于物理机本身的资源充分利用有着巨大的好处。
    • 容器内的应用程序直接运行在宿主机的内核上,容器内没有自己的内核,也没有对硬件进行虚拟,因此容器比起虚拟机更为轻便。

    在这里插入图片描述

    Docker技术详解

    Docker底层原理

    • Docker是基于Google公司推出的Golang语言开发而来,基于Linux系统内核的Cgroups、NameSpace,以及Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
    • 对进程进行封装隔离,属于操作系统层面的虚拟化技术。
    • 利用Docker可以实现开发,测试,生产环境的部署一致性,极大的减少运维成本。如下所示:

    在这里插入图片描述

    传统虚拟机技术与容器技术的对比

    在这里插入图片描述

    Docker引擎

    在这里插入图片描述

    Docker组成

    docker最核心的组件

    • image镜像,构建容器(我们将应用程序运行所需的环境,打包为镜像文件)
    • Container,容器(你的应用程序,就跑在容器中)
    • 镜像仓库(dockerhub)(保存镜像文件,提供上传,下载镜像)
    • Dockerfile,将你部署项目的操作,写成一个部署脚本,这就是dockerfile,且该脚本还能够构建出镜像文件

    创建容器的过程

      获取镜像,如docker pull centos ,从镜像仓库拉取 
      使用镜像创建容器
      分配文件系统,挂载一个读写层,在读写层加载镜像 
      分配网络/网桥接口,创建一个网络接口,让容器和宿主机通信 
      容器获取IP地址
      执行容器命令,如/bin/bash 
      反馈容器启动结果。
    

    在这里插入图片描述

    Images(镜像)

      镜像是一个只读模板,用于创建容器,也可以通过Dockerfile文本描述镜像的内容。
      镜像的概念类似于编程开发里面向对象的类,从一个基类开始(基础镜像Base Image) 
      构建容器的过程,就是运行镜像,生成容器实例。
    

    Dacker镜像的描述文件是Dockerfile,包含了如下的指令

    • FROM定义基础镜像
    • MAINTAINER作者
    • RUN运行Linux命令
    • ADD添加文件/目录
    • ENV环境变量
    • CMD运行进程

    Container(容器)

      容器是一个镜像的运行实例,镜像>容器。
    

    创建容器的过程

    • 获取镜像,如docker pull centos ,从镜像仓库拉取
    • 使用镜像创建容器
    • 分配文件系统,挂载一个读写层,在读写层加载镜像
    • 分配网络/网桥接口,创建一个网络接口,让容器和宿主机通信
    • 容器获取IP地址
    • 执行容器命令,如/bin/bash
    • 反馈容器启动结果。

    Registry(仓库)

      Docker镜像需要进行管理,docker提供了Registry仓库,其实它也是一个容器,可以用于可以基于该容器运行私有仓库。 
      也可以使用Docker Hub互联网公有镜像仓库。
    

    安装Docker

    Docker官网:https://www.docker.com/

    在这里插入图片描述

    基础环境配置

    # 更新基础仓库
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    # 更新阿里云仓库
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    yum clean all && yum makecache
    
    # 安装常用命令
    yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
    

    开启linux内核流量转发

    cat > /etc/sysctl.d/docker.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.conf.default.rp_filter = 0 
    net.ipv4.conf.all.rp_filter = 0 
    net.ipv4.ip_forward = 1
    EOF
    
    # 加载修改内核的参数,配置文件
    # 按照如下命令,执顺序
    modprobe br_netfilter
    sysctl -p /etc/sysctl.d/docker.conf
    # net.bridge.bridge-nf-call-ip6tables = 1
    # net.bridge.bridge-nf-call-iptables = 1
    # net.ipv4.conf.default.rp_filter = 0
    # net.ipv4.conf.all.rp_filter = 0
    # net.ipv4.ip_forward = 1
    

    利用yum快速安装docker

    # 提前配置好yum仓库
    # 1.阿里云自带仓库	2.阿里云提供的docker专属repo仓库
    curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    # 更新yum缓存
    yum clean all && yum makecache
    
    # 查看yum仓库中docker的可用版本
    yum list docker-ce --showduplicates | sort -r
    
    # yum安装dokcer
    yum -y install docker-ce-20.10.6
    
    # 如果需要安装旧版本,软件名称结尾直接跟版本号即可
    # yum -y install docker-ce-18.09.9
    

    镜像加速器

    • 使用dokcer首要操作就是获取镜像文件,默认下载时Docker Hub(国外网站)下载,网速较慢。国内很多云服务商都提供了加速服务,阿里云加速器,Daocloud加速器,灵雀云加速器。

    打开阿里云官网: 产品 => 容器与中间件 => 容器与镜像服务ACR => 管理控制台 => 镜像加速器 => CentOS

    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://0r3dxh20.mirror.aliyuncs.com"]
    }
    EOF
    
    # 启动docker
    systemctl daemon-reload
    systemctl enable docker
    systemctl restart docker
    
    # 查看docker是否正确启动
    docker version
    

    Docker基础命令

    Nginx Web服务器,运行一个80端口的网站
    在宿主机上,运行Nginx

      1. 开启服务器
      2. 在服务器上安装好nginx所需的依赖关系
      3. 安装Nginx  yum -y install nginx
      4. 修改Nginx配置文件
      5. 启动Nginx服务
      6. 客户端去访问Nginx
      - 该运行方式,是比较耗时的。。。
    

    在Docker容器中,运行Nginx

      1. 获取镜像
      2. 运行镜像,生成容器,你想要的容器,就运行在容器中。
    

    用docker运行Nginx

    # 先搜索一下,查看镜像文件是否存在
    docker search nginx
    
    # 获取镜像,获取是从你配置好的镜像站中,去拉取nginx镜像
    docker pull nginx
    
    # 查看本地的docker镜像有哪些
    docker images 
    
    # 删除镜像
    docker rmi [镜像id]
    
    # 运行镜像的命令,参数如下
    docker run 参数  镜像的名字/id
    
    # -d 后台运行容器
    # -p 80:80 端口映射,宿主机端口:容器内端口(客户访问宿主机端口,也就访问到了容器内端口) 
    # 运行结果如下,docker run命令,会返回一个容器的ID
    docker run -d -p 80:80 nginx
    # 3e239919b44a429b884193c84dfc709eaa3d4bc4c27f768c302b184dbc5d5b8a
    
    # 查看容器是否在运行 
    # docker ps -a :显示所有的容器,包括未运行的。
    docker ps
    # CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                               NAMES
    # 3e239919b44a   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   elated_blackburn
    
    # 此时可以访问到宿主机的80端口,查看容器内的80端口的应用是什么了
    在本机浏览器输入虚拟机ip地址:192.168.15.80
    
    # 可以尝试停止容器,看一下结果
    docker stop [容器id]
    
    docker stop 3e239919b44a
    # 3e239919b44a
    
    # 查看容器是否在运行
    docker ps
    # CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    
    展开全文
  • 容器云系列之容器技术相关概念介绍

    千次阅读 热门讨论 2022-04-20 08:34:04
    容器技术的发展越来越成熟和趋于标准化,本文主要介绍容器技术的相关概念,包括Docker的一些技术点,加深对容器技术领域的理解和掌握。
  • 丁运管 深信服云计算认证专家,产业教育中心资深讲师,云计算认证架构师,曾就职于阿里云、宏福集团,担任高级运维工程师和云计算...Q1:容器技术近几年越来越火热,从技术层面分析,Docker如何以“轻量级”的方式被大
  • LXC容器虚拟化技术研究性文档。
  • 介绍了Docker容器技术的背景和基本原理,以及如何定制化符合用户要求的Docker Daemon,增加安全性、提高效率
  • 容器原理架构详解

    千次阅读 2021-01-23 17:42:26
    1 容器原理架构:容器与虚拟化、容器应用/引擎架构、Namespace与Cgroups、镜像原理 2 K8S原理架构:K8S主要功能、K8S 系统架构、Pod原理与调度 3 K8S存储方案:容器存储类型、PVC与PV、PV创建与挂载 4 K8S网络...
  • Docker——Docker容器网络通信原理

    千次阅读 2021-12-13 11:54:02
    文章目录Docker——Docker容器网络通信原理1、前景知识1.1、ip addr命令的使用1.2、veth-pair 简介1.3、网络名字空间namespace1.4、docker 网络模式之bridge模式2、Docker容器通信原理分析2.1、主机与Docker容器通信...
  • Docker镜像原理、数据卷、数据卷容器介绍。
  • Docker容器技术

    千次阅读 2021-12-09 15:02:08
    2、Docker是 PAAS_提供商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 Github 上,基于go语言并遵从 Apache2.0协议开源 3、Docker设想是交付运行环境如同海运,OS 如同一个货轮,每一个在OS 基础上的...
  • 容器资源运维系统的工作原理是运用Mesos进行资源调度、运用Kubernetes进行容器编排、运用Marathon技术进行框架管理。这3种技术容器运维中相互关联、相互衔接,使得系统内部机制正常运转。深入阐述了这3项技术是...
  • 简单学习 Docker 容器核心原理

    千次阅读 2022-04-01 18:00:40
    作为一个 Java 开发人员来说,虽然在大厂里边都有专门的运维人员或者中间件团队去维护我们的一个容器化部署环境,或者是虚拟机的线上部署环境,不用我们 Java 的业务研发或者工程研发去操心和负责。 大部分大厂里边...
  • 云计算技术:容器技术概述

    千次阅读 2021-12-16 10:26:48
    容器技术为基础,开放诸如CPU、内存这些基本资源而不是虚拟机。是对传统数据中心资源分配粒度的变革。 IT资源分配发展趋势: IT资源分配发展经历了从裸机时代到虚拟机时代到如今的容器时代。 容器与虚拟机 ...
  • 本文件对docker容器技术进行了基本原理和技术实践的探讨。
  • IOC容器(底层原理解读)

    千次阅读 2020-11-28 17:08:10
    IOC的概念和原理 1.什么是IOC (1)控制反转: IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想 控制:IOC意味着将你设计好的对象交给IOC容器控制,而不是传统的在你的对象内部...
  • Docker容器技术架构实践 技术创新变革未来 目录 CONTENTS 01 Docker简绍 02 Docker可以做什么 03 Docker的工作原理 04 为何使用Docker 05 Docker的使用方法 06 将现有的服务容器化 Docker介绍 1 Docker是什么 ...
  • 容器技术(Docker)

    千次阅读 2022-04-17 16:38:39
    容器技术的核心就是通过对资源的**限制**和**隔离**把进程运行在一个沙盒中。并且这个沙盒可以被打包成容器镜像(Image),移植到另一台机器上可以直接运行,不需要任何的多余配置。其中docker是容器技术的事实标准...
  • 镜像、容器安装Ubuntu安装DockerWindows安装DockerDocker架构镜像加速源Docker命令服务相关命令镜像相关命令容器相关命令数据卷数据卷概念及其...部署reids镜像原理容器转为镜像Dockfile案例部署springboot项目自定义ce
  • docker容器网络通信原理分析

    千次阅读 2019-08-19 10:07:57
    而本文将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker。 docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的网...
  • 传统控制系统中,每个系统厂商都必须为不同的硬件开发一个驱动,造成重复开发;不同的软件开发商采用不同协议...OPC技术为工控软件制定了一套标准的对象、接口和属性,只要遵守OPC规范,就可实现不同系统间的数据交换。
  • ocker容器实战介绍了Docker容器技术的背景和基本原理,以及如何定制化符合用户要求的Docker Daemon,增加安全性、提高效率。.镜像提供了千差万别的服务,每一个镜像都是要满足用户的某种需求。如何制作出体积小、...
  • Spring框架技术—— 容器和bean的基本原理本章内容知识点掌握程度 难易程度传统组件调用方式理解理解为何使用IoC理解掌握理解Bean的定义和命名掌握Be
  • 虚拟化技术原理

    千次阅读 2020-12-21 15:33:26
    3. 2 虚拟化技术原理 到目前为止,虚拟化技术的各方面都有了进步,虚拟化也从纯软件的虚拟化逐深入到处理器级虚拟化,再到平台级虚拟化乃至输入/输出级虚拟化。对数据中心来说,虚拟化可以节约成本,最大化利用数据...
  • 容器技术:一句话来说明就是“进行了进程隔离和资源限制的进程” 一、什么是容器? 首先,从现实生活上说,容器是用来省东西的,如柴米油盐酱醋茶、洗发水护发素沐浴露等都需要各式各样的容器来盛装。...
  • 首先来看下什么是容器技术,容器是由英文 “Container” 翻译过来的,这个单词即有容器也有集装箱的意思,在这里其实更偏向于集装箱,这点也可以从Docker的Logo里看出来,不能说是毫无关系,可以说是一摸一样!...
  • 处理一个任务,带来的问题是资源利用率极其不足,计算机的潜能并不能完全发挥,而后多道批处理系统、分时系统相继出现,Unix、Linux 等操作系统成为了人类 “压榨” 计算机物理资源的神兵利器,而此时,虚拟化技术却...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 176,582
精华内容 70,632
热门标签
关键字:

容器技术的工作原理

友情链接: clipping_ccdf.rar