Docker学习笔记——Docker安装启动

Posted 爱敲代码的三毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker学习笔记——Docker安装启动相关的知识,希望对你有一定的参考价值。

文章目录


一、虚拟化分类

1. 主机虚拟化和容器虚拟化的优缺点

  • 主机虚拟化
    • 应用程序运行环境强隔离
    • 虚拟机操作系统与底层操作系统无关化
    • 虚拟机内部操作不会影响到物理机
    • 拥有操作系统会占用部署资源以及存储
    • 网络传输效率低
    • 当应用程序需要调用硬件响应用户访问时间延迟较大
  • 容器虚拟化
    • 可以实现应用程序的隔离
    • 直接使用物理机的操作系统可以快速响应用户请求
    • 不占用部署时间
    • 占用少量磁盘空间
    • 网络控制与主机虚拟化有所区别、服务治理

2. 容器所涉及内核技术

NameSpce

NameSpce :Namespace 可以为容器提供系统资源隔离能力,把不同的资源放到不同的命名空间里,这些资源是相互隔离的。

什么是命令空间?

应用程序运行环境隔离的空间,就是一个命名空间,每个空间都将拥有UTS、IPC、Mount、Net、User、PID,6大命名空间,也可以叫做6大子命名空间。每个容器就是一个命名空间

  • UTS:每一个NameSpace都拥有独立的主机或域名,可以把每个NameSpace认为一个独立主机
  • IPC:每个容器依旧使用linux内核中进程交互的方法,实现进程间通信
  • Mount:每个容器的文件系统是独立的
  • Net:每个容器的网络是隔离
  • User:每个容器的用户和组ID是隔离,每个容器都拥有root用户
  • PID:每个容器都拥有独立的进程树,由容器是物理机中的一个进程,所以容器中的进程是物理机的线程

CGroups

Control Group(控制组),是LInux内核的一个特性,主要用俩对共享资源进行隔离、限制、审计等、只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争,控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管理,控制组的设计目标是为不同的应用情况提供统一的接口,从控制单一进程到系统机虚拟化。

具体来看控制组提供

  • 资源限制:可以将组设置不为超过设定的内存限制,比如内存子系统可以为进程组设定一个内存使用上限,一旦进程组的内存到到上限再申请内存,就会发出 Out of Memory警告
  • 优先级:通过优先级让一些组优先得到CPU的资源调度
  • 资源审计:用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进村组使用的CPU时间
  • 隔离:为组隔离命令空间,这样一个组不会看到其它组的进程、网络连接和文件系统
  • 控制:挂起、恢复和重启等操作

9大子系统

  • 把资源定义为子系统,可以通过子系统对资源进行限制
  • CPU 可以让进程使用CPU的比例
  • memory 限制内存使用,例如50Mi,150Mi
  • blkio 限制块设备的IO
  • cpuacct 生成Cgroup使用CPU的资源报告
  • cpuset 用于多CPU执行Cgroup时,对进程进行CPU分组
  • devices 允许或拒绝设备的访问
  • freezer 暂停或恢复Cgroup运行
  • net_cls 标记每个网络包
  • ns 名称空间子系统

Cgroup应用案例

安装

# yum install libcgroup* -y
# systemctl start cgconfig
# systemctl enable cgconfig
  • Cgroup限制对CPU使用的步骤

    使用cpu子系统创建2个cgroup
    # vim /etc/cgconfig.conf
    group lesscpu 
    	cpu 
    		cpu.shares=200;
    	 
     
    group morecpu 
    	cpu 
    		cpu.shares=800;
    	
    
    
    # systemctl restart cgconfig
    
    # cgexec -g cpu:lesscpu md5sum /dev/zero
    #终端1
    # cgexec -g cpu:morecpu sha1sum /dev/zero
    #终端2
    # top
    #终端3
    

  • Cgroup内存限制

    # vim /etc/cgconfig.conf
    group lessmem 
        memory 
            memory.limit_in_bytes=26214400;
            memory.memsw.limit_in_bytes=26214400;
    	 
    
    
    # systemctl restart cgconfig
    
    # mkdir /mnt/mem_test
    # df -h
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 908M     0  908M   0% /dev
    tmpfs                    920M     0  920M   0% /dev/shm
    tmpfs                    920M  9.0M  911M   1% /run
    tmpfs                    920M     0  920M   0% /sys/fs/cgroup
    /dev/mapper/centos-root   17G  1.5G   16G   9% /
    /dev/sda1               1014M  150M  865M  15% /boot
    tmpfs                    184M     0  184M   0% /run/user/0
    # mount -t tmpfs /dev/shm /mnt/mem_test
    # df -h
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 908M     0  908M   0% /dev
    tmpfs                    920M     0  920M   0% /dev/shm
    tmpfs                    920M  9.0M  911M   1% /run
    tmpfs                    920M     0  920M   0% /sys/fs/cgroup
    /dev/mapper/centos-root   17G  1.5G   16G   9% /
    /dev/sda1               1014M  150M  865M  15% /boot
    tmpfs                    184M     0  184M   0% /run/user/0
    /dev/shm                 920M     0  920M   0% /mnt/mem_test
    # cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file1 bs=1M count=200
    200+0 records in
    200+0 records out
    209715200 bytes (210 MB) copied, 0.297781 s, 704 MB/s
    [root@docker ~]# rm -rf /mnt/mem_test/file1
    [root@docker ~]# cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file1 bs=1M count=500
    Killed
    

二、Docker安装和基本使用

DocKer官网

1. 获取yum源

1.安装一些必要的系统工具

# yum install -y yum-utils device-mapper-persistent-data lvm2

2.通过yum-config-manager获取docker-ce.repo

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo      CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo    docker-ce.repo

2.安装docker-ce

# yum repolist
docker-ce-stable                                                   | 3.5 kB  00:00:00     
(1/2): docker-ce-stable/7/x86_64/updateinfo                        |   55 B  00:00:01     
(2/2): docker-ce-stable/7/x86_64/primary_db                        |  82 kB  00:00:01     
repo id                                   repo name                                 status
base/7/x86_64                             CentOS-7 - Base                           10,072
docker-ce-stable/7/x86_64                 Docker CE Stable - x86_64                    169
extras/7/x86_64                           CentOS-7 - Extras                            516
updates/7/x86_64                          CentOS-7 - Updates                         4,244
repolist: 15,001

# yum -y install docker-ce

3. 启动docker


# 启动docker
[root@docker ~]# systemctl start docker
[root@docker ~]# systemctl enable docker

[root@docker ~]# docker version          
Client: Docker Engine - Community
 Version:           20.10.18
 API version:       1.41
 Go version:        go1.18.6
 Git commit:        b40c2f6
 Built:             Thu Sep  8 23:14:08 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.18
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.6
  Git commit:       e42327a
  Built:            Thu Sep  8 23:12:21 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.8
  GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  
  
如果出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
# 重启docker
# systemctl restart docker

下一篇docker管理容器

以上是关于Docker学习笔记——Docker安装启动的主要内容,如果未能解决你的问题,请参考以下文章

Docker学习笔记——Docker安装启动

Docker 学习笔记 - 安装

Docker 学习笔记 - 安装

elasticsearch学习笔记,常用操作,docker安装

elasticsearch学习笔记,常用操作,docker安装

elasticsearch学习笔记,常用操作,docker安装