IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker简介 -> 正文阅读

[系统运维]Docker简介


前言

docker的英文意思是 码头工人,意思就是搬运东西的意思,其实这和docker的特点是一样的,docker提供的就是一种容器化搬运东西(我们的软件、程序)的过程。docker自己本来是运行在操作系统上一个程序软件,它会提供一个容器环境,使我们的程序独立地运行在容器中。
Docker在2013年一炮而红,直到现在,已经成为容器技术的代名词

以linux而言,linux操作系统会有一个主进程pid=1 派生出其他进程来控制不同服务;例如:pid=2 --> python pid=3–>java pid4–>php ,三个服务可能会相互影响
使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本
延伸出——》能否将这三种服务分别封装起来————》虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境
随着技术发展—》虚拟化技术开销较大(例如:只要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)

虚拟化层的抽象层(用户层)剥离,使用docker engine 来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销

一、Docker 是什么?

1.docker概述

Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。是一个开源的应用容器引擎,让开发者可以打包方式封装应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机上,也可以实现虚拟化。容器是完全使用沙箱机制(隔离机制),相互之间不会有任何接口。
沙箱(Sandbox):在计算机安全领域,沙箱是一种程序的隔离运行机制
Docker从一开始就以提供标准化的运行时环境为目标,真正做到“build once, run anywhere”,可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦(不吃操作系统)。在此基础上还进一步发展出了CaaS(容器即服务)技术。

2.docker 与 虚拟机区别 之一(资源利用率/损耗)

在这里插入图片描述 在这里插入图片描述

(1)虚拟机技术的缺点

1.资源占用太多

2.冗余步骤多

3.启动很慢

(2)容器化技术

1.服务器资源利用率高

2.比较轻量化

3.打包镜像测试,一键运行

(3)比较Docker和虚拟机技术不同

? 1.传统虚拟机,虚出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件

? 2.容器内的应用之间运行在 宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以久轻便了

? 3.每个容器间是互相隔离的,每个容器内都有属于自己的文件系统,互不影响

? 4.安全性,docker的安全性更弱,

? 5.与虚拟机相比,docker隔离性更弱,docker属于进程之间的隔离,虚拟机可实现系统级别隔离

? 6.可管理性:docker的集中化管理工具还不算成熟,各种虚拟化技术都有成熟的管理工具,例如Vm提供完备的虚拟机管理能力

? 7.docker创建时秒级的,docker的快速迭代性,无论是开发、测试、部署都可以节约大量时间

docker 把容器化技术做成了标准化平台CAAS (docker 统一/指定了容器化技术的标准化平台

(4)使用docker有什么意义(实现了3个统一)

docker 引擎统一了基础设施环境-docker环境 即image ;封装一个简易的操作系统(3.0+G )。
docker 引擎统一了程序打包(装箱/封装-类比于集装箱)方式-docker镜像 即images。
docker 引擎统一了程序部署(运行)方式-docker 容器 ,基于镜像;运行为容器(可运行的环境)。
实现了一次构建、多次、多处使用。

3.名称空间(namespace)

**简述:**Docker使用一种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一组 名称空间。
容器完美的实现了6个名称空间隔离(namespace资源隔离-用容器化技术封装)
这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。

mount 文件系统,挂载点 ——》》一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域
ipc 信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
net 网络设备、网络协议栈、端口等

cgroups linux 内核态中资源管理的模块
cgroups 管理一些系统资源

该pid命名空间:进程隔离(PID:进程ID)。
该net命名空间:管理网络接口(NET:网络)。
该ipc命名空间:管理访问IPC资源(IPC:进程间通信)。
该mnt命名空间:管理文件系统挂载点(MNT:mount)。
该uts命名空间:隔离内核和版本标识符。(UTS:Unix时间共享系统)。

docker 引擎 对内核版本是有要求的 :3.8

docker 需要cgroups 的资源管理功能

二、Docker得使用场景

K8S image镜像 + container容器的方式

(1)war jar ——>github gitlab 私有仓库(代码仓库) ——>jenkins(测试) (应用程序封装/构建镜像)——>运维下载,使用容器技术进行运行/发布

(2)打包应用程序简单部署

可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云持续集成和持续交付(CI/CD):开发到测试发布

(3)部署微服务

提供PAAS产品(平台即服务){OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker(K8S) 属于PAAS}

1.Docker三要素

镜像——>模板
容器——>基于镜像,运行状态/运行时状态
仓库——>存放镜像模板

2.Docker引擎(Docker Engine)

Docker Engine是具有以下主要组件的C/S客户端-服务器应用程序
server端 :服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
CLIENT端 :REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
命令行界面(CLI)客户端(docker命令)。
docker run
docker start
docker rm


三、Docker的架构(Docker architecture)

(1)Docker使用客户端-服务器架构。Docker 客户端与Docker 守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。

(2)Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快

(3)Docker Client:客户端/提供一个与用户交互,展示的平台+ 管理、控制docker服务端(功能)的工具 docker

(4)Docker客户端(docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令时docker run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用Docker API。Docker客户端可以与多个守护程序通信。
Docker daemon:守护进程

(5)Docker守护程序(dockerd)侦听Docker API请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。

Docker images:镜像

cgroups namespace

容器可以被打包成镜像
Docker container:容器
Docker registry:镜像仓库(yum仓库)

yum install
docker pull nginx

注:存储镜像的地方,默认在公共的Docker Hub上查找,可以搞个人仓库 (registry harbor)

1、docker 三大组件

**镜像:**一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板
**容器:**基于镜像的一种运行时状态
**仓库:**存放image 镜像 ,仓库大类:1、公共仓库——>docker hub 2、私有仓库 registry harbor

yum 仓库 rpm包
公共仓库
本地yum仓库

docker hub : lnmp lnmp

docker 镜像
docker hub 公共仓库
docker-harbor 上传下载方便、安全

github:github ——》404——》延迟
gitlab:
svn
gitee
码云 代码仓库

vm 256
物理硬件 256

centos : 依赖包、应用程序

2、docker 和vm ,解决了虚拟机的什么问题:

(1):docker 解决了 vm 的 一个环境孤岛的问题
(2):docker 可以自定义传参(创建-创建镜像/容器、启动(基于镜像启动)之前)

四、控制组(Control groups)

Linux上的Docker引擎还依赖于另一种称为控制组 (cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。

五、部署docker

1、安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2
在这里插入图片描述

2、设置阿里云镜像源

cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
在这里插入图片描述

3、安装docker-ce 社区版

yum install -y docker-ce
在这里插入图片描述

4、环境配置

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

hostnamectl set-hostname docker
su
vim /etc/selinux/config
SELINUX=disabled

systemctl start docker
systemctl enable docker

5、镜像加速

tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://jqqwsp8f.mirror.aliyuncs.com”]
}
EOF
systemctl daemon-reload
systemctl restart docker

#镜像加速注册地址
https://help.aliyun.com/document_detail/60750.html

6、网络优化

vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p
systemctl restart network
systemctl restart docker
在这里插入图片描述
#docker-server端配置文件 daemon.json
{

“graph”: “/data/docker”, 数据目录 默认:/var/lib/docker/containers(image)
“storage-driver”: “overlay2”, 存储引擎 LXC -》overlay ——》overlay2(存储驱动/引擎)
“insecure-registries”: [“registry.access.redhat.com”,“quary.io”] 私有仓库
“registry-mirrors”: [“https://q”] 镜像加速
“bip”: “172.7.5.1/24”, docker网络 (172.17.0.1 docker 0)
“exec-opts”: [“native.cgroupdriver=systemd”], 启动时候的额外参数(驱动,k8s使用)
“live-restore”: true 当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)
}
以上是建议的配置项
docker 容器网络生产经验
docker 的网络建议 和宿主机的IP“对照”
比如宿主机 10.2.5.6 容器的地址就可以修改为172.5.6.1,这样方便在故障发生时,更容易定位故障节点位置

systemctl daemon-reload
systemctl restart docker

六、docker镜像操作

docker run hello-world

run :
① pull dockerhub 仓库中 项目/库/镜像
② start hello-world-image

1、docker client 客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的)restful api
典型的C/S架构

2、由docker 服务端的守护进程从docker hub 上下载了镜像(PS:服务端会先检查本地系统是否有这个镜像)

3、服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用(client)

4、docker 服务端把这些信息流(传递)返回到客户端并展示出来,(展示在终端上)

docker client 可以是多种形式,比如"docker"命令工具所在的终端

yum 仓库,如何开启缓存,软件包保存在哪

linux 系统中的命令 记10条(cd ls pwd mv cp )
docker 十条管理命令(运维常用的命令)

(1)、查询docker 版本

docker version && docker info
在这里插入图片描述

(2)、搜索镜像

docker search nginx
docker search centos:7
在这里插入图片描述
在这里插入图片描述

——》自己制作镜像,然后上传到docker hub 上
优化
有效减少镜像大小

(3)、下载镜像(默认是从docker hub)

docker pull 镜像名称,例如:
docker pull nginx
在这里插入图片描述

查看镜像列表
docker images——查看当前docker下的下载镜像信息
在这里插入图片描述

(4)、获取镜像信息

docker inspect 镜像ID
在这里插入图片描述

(5)、添加镜像标签

docker tag nginx:latest nginx:lnmp

(6)、标题删除

docker rmi 镜像名称
docker rmi 镜像标签

docker rmi docker images -q

(7)、镜像导出

docker save -o 文件名 镜像名
示例:
docker save -o nginx_docker nginx:latest

(8)、镜像导入

docker load < nginx
使用场景,有的生产环境,企业不直接使用docker 私有仓库,而是存放在一个ftp服务器中,按需上传下载

应用场景

ftp winscp ssh 登陆VPN

七、容器操作

(1) 查询容器

docker ps -a

(2)创建容器

docker create -it nginx:latest /bin/bash
-i 让容器的标准输入保持打开
-t 分配一个伪终端
-d 后台守护进程的方式运行

(3)启动容器

docker start 容器id

启动容器(一次性执行)
docker run centos:7 /usr/bin/bash -c ls /

(4)停止容器

docker stop 容器ID

(1)持续后台运行

docker run -d centos:7 /bin/bash -c “while true;do echo hello;done”

(5)进入容器

① 使用run
docker run -it nginx:latest /bin/bash
② exec(容器必须为开启状态)
docker exec -it 容器ID /bin/bash

exec 和shell 是两种运行模式

PS:
docker run -it 会创建前台进程,但是会在输入exit后终止进程。
docker attach 会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程.
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。

(6)容器导出

docker export 容器ID > 文件名
示例:
docker export 容器ID > nginx_a

(7)容器导入(生成镜像)

docker import 导出的文件名(容器) 指定镜像名称
示例:
docker import nginx_a nginx:latest
cat 文件名(容器) | docker import - nginx:latest

批量删除容器&&批量删除镜像

(8)删除容器

docker rm 容器ID

①强制删除容器(正在运行的)

docker rm -f 容器ID

②批量删除容器(正则匹配)

docker ps -a | awk ‘{print "docker rm "$1}’ | bash

③删除非up状态的 rm -f : 强制删除所有

docker rm docker ps -q

④批量删除“exit”状态(指定状态)的容器

for i in docker ps -a | grep -i exit | awk '{print $1}'; do docker rm -f $i;done

created

(9)容器打包为镜像

docker run -it --name Nginx.01 nginx:latest /bin/bash

docker commit 39eaa5aa7332 nginx-v1beta

八、Docker网络模式

docker0网络
docker容器的 虚拟网关

loopback :回环网卡、TCP/IP网卡是否生效

virtual bridge:linux 自身继承了一个虚拟化功能(kvm架构),是原生架构的一个虚拟化平台,安装了一个虚拟化平台之后就会系统就会自动安装虚拟网卡
(示例:安装workstation (虚拟化平台)之后,会在网络适配器中会多出VMnet1 VMnet8 VMnet0)

docker 0 : 容器的网关,绑定物理网卡,负责做NAT 地址转换、端口映射
docker 0 本身也是一种容器

1 docker四种网络模式

host模式 –net=host 容器和宿主机共享Network namespace。
container模式 –net=container:NAME_or_ID 多个容器共享一个Network namespace。
none模式 –net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。
bridge模式 –net=bridge (默认为该模式)

2 docker自定义网络

(1)查看网络列表

docker network ls

(2)查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)

docker inspect 容器ID

#指定分配容器IP地址
docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash
(以上会报错)

#自定义网络固定IP
docker network create --subnet=172.18.0.0/16 mynetwork
docker run -itd --name test2 --net mynetwork --ip 172.18.0.100 centos:latest /bin/bash

#暴露端口
-p 自定义端口 ( 宿主机端口:容器内端口)
-P 随机端口 (-P 49153起始 49153到65535)
docker run -itd -p 333:80 nginx /bin/bash (docker 0)
docker run -itd -P nginx /bin/bash

#在宿主机环境执行容器内命令
docker exec -it 容器ID /bin/bash -c ‘nginx’
docker exec 容器ID/容器name 执行的命令

(3)进入容器没有systemctl 命令解决:添加–privileged=true (指定此容器是否为特权容器),使用此参数,则不能用attach

示例:
docker run -itd --name test3 --privileged=true centos /sbin/init

/sbin/init 内核启动时主动呼叫的第一个进程

可以使用docker inspect 容器ID

docker ps -a

docker exec -it 容器id /bin/bash
yum install httpd -y
systemctl status httpd

九、Docker 数据卷

docker pull centos

//宿主机目录/var/www 挂载容器中的/data1
docker run -v /var/www:/data1 --name web1 -it centos /bin/bash

[root@202dd484fd62 /]# cd /data1/

[root@202dd484fd62 data1]# touch test123

//返回宿主机进行查看
[root@localhost ~]# ls /var/www/

应用场景:
原理:将容器内部的配置文件目录,挂载到宿主机指定目录下
作用:
① 修改配置文件例如,nginx.conf /usr/local/nginx/conf/nginx.conf —> /container_nginx/conf/nginx.conf
② 容器内部产生的日志,如何收集 将容器内部存方日志文件的目录挂载到宿主机指定目录下/container_nginx/log/access_log/access_log
③ 传入变量 挂载到宿主机 在宿主机上添加变量内容,将变量放入共享目录,在容器中/etc/profile 直接加载就可以
export xxdir=/data/data1/xx.

1、数据卷容器

//数据卷容器
docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash
//新容器挂载数据卷容器web100
docker run -it --volumes-from web100 --name db1 centos /bin/bash

原理:让两个容器实现数据共享

php ——》mysql 之间想要通讯 借助于socket 通讯文件

2、端口映射

docker run -d -P httpd:centos

docker run -d -p 49280:80 httpd:centos

docker ps -a

6d461287c25d httpd:centos “/run.sh” 7 seconds ago Up 7 seconds 0.0.0.0:49280->80/tcp zen_swanson

3、容器互联(使用centos镜像)

docker run -itd -P --name web1 centos /bin/bash //创建并运行容器取名web1,端口号自动映射

docker run -itd -P --name web2 --link web1:web1 centos /bin/bash //创建并运行容器取名web2,链接到web1和其通信

进web2 容器 ping web1

哨兵 ——》监控 redis
哨兵和redis包括哨兵和哨兵之间相互监控,会使用ping命令

十、Dockerfile

创建镜像的几种方式
① 基于已有的模板文件进行创建 ,镜像导出、导入 docker save 、docker load
② 基于已有的镜像进行创建
③ dockerfile

1、dockerfile分层原理

(1)、docker镜像分层(基于AUFS构建):
Docker 镜像位于bootfs之上
每一层镜像的下一层成为父镜像
第一层镜像成为base image(操作系统环境镜像)
容器层(可读可写),在最顶层(writable)
容器层以下都是readonly

contaier 读写层
images (只读)
base image
bootfs + rootfs + aufs (kernel)

2、涉及技术

① bootfs(boot file system) 内核空间
主要包含bootloader和kernel

bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs

这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs

在linux操作系统中(不同版本的linux发行版本),linux加载bootfs时会将rootfs设置为read-only,系统自检后会将只读改为读写,让我们可以在操作系统中进行操作

② rootfs (root file system) 内核空间
在bootfs之上(base images,例如centos 、ubuntu)

包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件

rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:20:15  更:2022-05-06 11:22:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:45:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码