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安装和基本使用
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 stop 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安装启动的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch学习笔记,常用操作,docker安装