你要的docker来了!

Posted 龙少。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你要的docker来了!相关的知识,希望对你有一定的参考价值。

一.容器技术的产生背景

以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务例如: pid=2 --> python pid=3–>java pid4–>php ,三个服务可能会相互影响
使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本。

延伸出能否将这三种服务分别封装起来——》KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境。
随着技术发展,虚拟化技术开销较大(例如:只要运行一个python脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)
延伸出容器技术;
虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销。
docker引擎对内核版本是有要求的(至少是3.8+)
docker 需要cgroups(Linux内核态中资源管理的模块) 的资源管理功能

二.docker基础简介

1.docker概述

Dcoker是基于容器技术的轻量级虛拟化解决方案,docker是由容器引擎,把linux的cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行Cli、api等) C/s

2,.docker的优势

(1)docker引擎统一了基础设施环境:docker环境------》image------>封装一个简易的操作系统(3.0+G)

(2)docker引擎统一了封装应用(装箱/封装-类比于集装箱)方式:docker镜像一》 images

(3)docker 引擎统一了运行时环境:docker容器一 》基于镜像——》运行为容器(可运行的环境)
实现了一次构建、多次、多处使用

3.docker的使用场景

流程:war jar------>Igithub gitlab私有仓库(代码仓库)----> jenkins ( 测试)
(应用程序封装/构建镜像)一》 运维使用镜像下载,使用容器技术进行运行/发布
可以实现:

(1)打包应用程序简单部署
(2)可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
(3)持续集成和持续交付(CI/CD):开发到测试发布
(4)部署微服务
(5)提供PAAS产品(平台即服务) {OpenStack的 云主机类似于阿里云的ECS,属于IAAS;Docker (K8S) 属于PAAS

4.docker与虚拟化的区别

三.docker架构

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

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

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

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

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

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

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

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

四.docker引擎

Docker Engine是具有以下主要组件的C/S客户端—服务器应用程序:

server端:服务器是一种长期运行的程序,称为守护程序进程(dockerd命令)
CLIENT端: REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口
通过client客户端传入命令,比如以下:
docker run:运行
docker start:开启
docker rm:删除
与sever端进行交互,控制server端进行应命令的操作

五.docker三大组件

1.镜像

模板;组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板

2.容器(Docker container)

基于镜像的一种运行时状态

3.仓库(Docker reqistry)

存放image镜像模板;仓库分类: 1、公共仓库一》docker hub,2、私有仓库registry harbor

六.底层原理

cgroup和namespaces两者构成了docker底层原理

1.名称空间

容器完美的实现了6个名称空问隔离(namespace资源隔离-用容器化技术封装)
mount:文件系统,挂载点
user:操作进程的用户和用户组
pid:进程编号
uts:主机名和主机域
ipc:信号量、消息队列,共享内存(理解,不同的应用调用的时候应该使用不同的内存空间)
net:网络设备、网络协议栈、端口等

2.控制组

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

七.docker20版本部署

1.环境配置

[root@localhost ~]# hostnamectl set-hostname docker
[root@localhost ~]# su
[root@docker ~]# systemctl stop firewalld
[root@docker ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@docker ~]# setenforce 0

2.安装依赖包

[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

3.设置阿里云镜像

[root@docker ~]# cd /etc/yum.repos.d/

[root@docker yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo

[root@docker yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@docker yum.repos.d]# 

4.安装docker-ce社区版

[root@docker yum.repos.d]# yum install -y docker-ce

5.设置镜像加速

[root@docker yum.repos.d]# mkdir -p /etc/docker

[root@docker yum.repos.d]# tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://3zj1eww1.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://3zj1eww1.mirror.aliyuncs.com"]
}
[root@docker yum.repos.d]# systemctl daemon-reload
[root@docker yum.repos.d]# systemctl restart docker
[root@docker yum.repos.d]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://3zj1eww1.mirror.aliyuncs.com"]
}
[root@docker yum.repos.d]# 

6.网络优化

[root@docker yum.repos.d]# vim /etc/sysctl.conf

net.ipv4.ip_forward=1

[root@docker yum.repos.d]# sysctl -p
net.ipv4.ip_forward = 1
[root@docker yum.repos.d]# systemctl restart network

7.启动,基础常规命令

(1)重启docker

[root@docker yum.repos.d]# systemctl restart docker

(2)查看docker版本

[root@docker yum.repos.d]# docker -v
Docker version 20.10.8, build 3967b7d

(3)查看镜像

[root@docker yum.repos.d]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker yum.repos.d]# docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker yum.repos.d]# 

(4)查看容器

[root@docker yum.repos.d]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker yum.repos.d]# docker ps -aq

(5)查看docker系统级信息

用于显示 docker 的系统级信息,比如内核,镜像数,容器数等

[root@docker yum.repos.d]# docker info

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.8
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: e25210fe30a0a703442421b0f60afac609f950a3
 runc version: v1.0.1-0-g4144b63
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-957.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 1.777GiB
 Name: docker
 ID: 32SA:LEYD:GEQO:NLQH:VOXC:KMPD:DEJS:TRXP:XPCE:PY2V:AFIU:5B2Y
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://3zj1eww1.mirror.aliyuncs.com/
 Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

以上是关于你要的docker来了!的主要内容,如果未能解决你的问题,请参考以下文章

你要的docker来了!

你要的快速排序来了!

大数据基础-求锤得锤,你要的一致性hash来了(下)[附代码]

你要的调度云原生能力来了

你要的Django, Python, MySQL和Postgres各版本关系对应图来了!

你要的Django, Python, MySQL和Postgres各版本关系对应图来了!