Docker基础

本文介绍了Docker的基础知识,包括Namespace的MNT、IPC、UTS、PID、Net和User等类型在容器中的作用,以及Cgroups用于限制容器资源的原理。此外,还探讨了容器编排工具如Kubernetes和Docker Swarm,以及容器依赖技术如网络、服务发现、监控和数据管理。最后,讲解了如何基于Dockerfile制作Nginx镜像。
部署运行你感兴趣的模型镜像

1. Namespace、Cgroups在容器中的作用

- Namespace

namespace 是Linux系统的底层概念,在内核层实现,各个docker容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机的一样的相互隔离的运行空间,目前主要通过以下技术实现 容器运行空间的相互隔离

隔离类型功能
MNT Namespace提供磁盘挂载点和文件系统的隔离能力
IPC Namespace提供进程间通信的隔离能力
UTS Namespace提供主机名隔离能力
PID Namespace提供进程隔离能力
Net Namespace提供网络隔离能力
User Namespace提供用户隔离能力
MNT Namesapce

每个容器都要有 独立的根文件系统独立的用户空间,以实现在容器里面启动服务并且使用容器的运行环境,即一个 ubuntu环境 宿主机可以创建一个 centos环境 容器并运行 nginx服务。

在容器里面是不能访问宿主机的资源,宿主机是使用了 chroot 技术把容器锁定到一个指定的运行目录中

IPC Namespace

一个容器内的进程间通信,允许一个容器内的不同进程的(内存、缓存等)数据访问,但是 不能跨容器 访问其他容器的数据。

UTS Namespace

包含 hostname 和 域名domainname,它使得一个容器拥有属于自己 hostname 标识,这个主机名标识独立于宿主机系统和其上的其他容器。

PID Namespace

在每个容器内有一个父进程来管理其下属的子进程,那么多个容器的进程通过 PID namespace 进程隔离(比如 PID 编号重复、容器内主进程生成与回收子进程等)。

Net Namespace

每一个容器都类似于虚拟机一样有自己的网卡、监听端口、TCP/IP 协议栈等。

Docker 使用 network namespace 启动一个 vethX 接口,这样你的容器将拥有它自己的桥接 ip 地址,通常是 docker0,而 docker0 实质就是 Linux 的虚拟网桥(网桥是在 OSI 七层模型的数据链路层的网络设备,通过 mac 地址对网络进行划分,并且在不同网络之间传递数据。)

User Namespace

User Namespace 允许在各个宿主机的各个容器空间内创建相同的用户名以及相同的用户 UID 和 GID,只是会把用户的作用范围限制在每个容器内

- Cgroups(Linux control groups)

在一个容器,如果不对其做任何资源限制,则宿主机会允许其占用无限大的内存空间,有时候会因为代码 bug 程序会一直申请内存,直到把宿主机内存占完。为了避免此类的问题出现,宿主机有必要对容器进行资源分配限制,比如CPU、内存等

Linux Cgroups 的全称是 Linux Control Groups,它最主要的作用就是 限制一个进程组能够使用的资源上限 ,包括 CPU、内存、磁盘、网络带宽等等。此外,还能够对进程进行优先级设置,以及将进程挂起和恢复等操作。

k8s 1.24版本后 开始启用 systemd 替代 cgroup,于 /etc/docker/daemon.json 中改:“exec-opts”: [“native.cgroupdriver=systemd”]

2. 容器编排工具和容器依赖技术(docker)

- 编排工具

容器编排:通常包括容器管理、调度、集群定义和服务发现等功能。

容器编排引擎(工具):实现对容器的统一管理、动态伸缩、故障自愈、批量执行等功能。

现在主流的编排工具为:Kubernetes(k8s)、docker swam(不怎么用了)

- 依赖技术

容器网络

docker 自带的网络 docker network 仅支持管理单机上的容器网络,多主机运行时需要使用第三方开源网络,例如 calico、flannel 等。

服务发现

容器的动态扩容特性决定了容器 IP 也会随之变化,因此需要有一种机制开源自动识别并将用户请求动态转发到新创建的容器上,kubernetes 自带服务发现功能,需要结合 kube-dns 服务解析内部域名。

容器监控

可以通过原生命令 docker ps/top/stats 查看容器运行状态,另外也可以使用 heapster/ Prometheus 等第三方监控工具监控容器的运行状态。

数据管理

容器的动态迁移会导致其在不同的 Host 之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用 逻辑卷/存储挂载 等方式解决。

日志收集

docker 原生的日志查看工具 docker logs,但是容器内部的日志需要通过 ELK/EFK 等专门的日志收集分析和展示工具进行处理。

3. 基于Dockerfile制作的nginx镜像

背景:已安装harbor

1)centos基础镜像:安装基础环境和依赖包,确保时区正确

root@k8s-master:/opt/k8s_data/dockerfile/system/centos# ll
total 11644
drwxr-xr-x 2 root root     4096 Jul 11 02:35 ./
drwxr-xr-x 3 root root     4096 Jul 12  2022 ../
-rwxr-xr-x 1 root root      146 Jul  4 08:35 build-command.sh*
-rw-r--r-- 1 root root      602 Jul  4 08:32 Dockerfile
vim Dockerfile

#制作基础镜像,centos:v7.9是基于官方centos 7.9镜像更改tag并上传到Harbor服务器的最原始官方镜像
FROM 192.168.37.106/baseimages/centos:v7.9.2009

MAINTAINER www@hotmai.com

RUN  yum install -y vim wget tree  pcre pcre-devel gcc gcc-c++  zlib zlib-devel openssl openssl-devel net-tools iotop unzip zip iproute ntpdate nfs-utils tcpdump telnet traceroute
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

执行镜像构建

vim build-command.sh 

#!/bin/bash
docker build -t 192.168.37.106/baseimages/centos-base:v7.9.2009 .
sleep 1
docker push 192.168.37.106/baseimages/centos-base:v7.9.2009
root@k8s-master:/opt/k8s_data/dockerfile/system/centos# bash build-command.sh

2)nginx基础镜像

root@k8s-master:/opt/k8s_data/dockerfile/pub-images/nginx-base# ll
total 1008
drwxr-xr-x 2 root root    4096 Jul 11 02:36 ./
drwxr-xr-x 5 root root    4096 Jul 12  2022 ../
-rwxr-xr-x 1 root root     160 Jul  4 08:51 build-command.sh*
-rw-r--r-- 1 root root     475 Jul  4 08:42 Dockerfile
-rw-r--r-- 1 root root 1015384 Jul 12  2022 nginx-1.14.2.tar.gz

vim Dockerfile

#Nginx Base Image
FROM 192.168.37.106/baseimages/centos-base:v7.9.2009

MAINTAINER  www@hotmail.com

RUN yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.14.2.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.14.2 && ./configure  && make && make install && ln -sv  /usr/local/nginx/sbin/nginx /usr/sbin/nginx && useradd nginx -u 2001 &&rm -rf /usr/local/src/nginx-1.14.2.tar.gz

执行镜像构建

vim build-command.sh

#!/bin/bash
docker build -t 192.168.37.106/pub-images/nginx-base:v1.14.2  .
sleep 1
docker push  192.168.37.106/pub-images/nginx-base:v1.14.2
root@k8s-master:/opt/k8s_data/dockerfile/pub-images/nginx-base# bash build-command.sh

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值