一、什么是docker
Docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术实现高效的文件操作(类似虚拟机的磁盘比如分配500g实则不占用磁盘的500g)
1、namespaces名称空间
运行空间的隔离,分为六项
UTS:主机名和域名隔离
IPC:信号量、消息队列和共享内存隔离
PID:进程编号隔离
NETWORK:网络设备、网络栈、端口等隔离
MOUNT:挂载点(文件系统)隔离
USER:用户和用户组隔离(3.8以后的内核才支持)
2、CGROUP控制组
物理资源的隔离(CPU、内存、磁盘、IO等)
资源限制:可以对任务使用的资源总额进行限制
优先级分配:通过分配的 cpu 时间片数量以及磁盘 IO 带宽大小,实际上相当于控制了任务运行优先级
资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
任务控制:cgroup 可以对任务执行挂起、恢复等操作
3、Linux Container
Linux Container 是Linux系统提供的容器化技术,简称LXC,它结合 Namespace 和 CGroup 技术为用户提供了更易用的接口来实现容器化。
LXC仅为一种轻量级的容器化技术,它仅能对部分资源进行限制,无法做到诸如网络限制、磁盘空间占用限制等。
Docker实现资源管控的技术
因为Docker依赖Linux内核的以下技术,至少使用3.8或更高版本的内核才能运行Docker容器,官方建议使用3.10以上的内核版本
Chroot
Chroot 就是 Change Root Directory (更改 root 目录),能在 container 里构造完整的 Linux 文件系统;也就是改变程序执行时所参考的根目录位置。
Chroot 可以增进系统的安全性,限制使用者能做的事
在 linux 系统中,系统默认的目录结构都是以 /,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为/ 位置。
Docker 与传统虚拟化技术的区别
Docker部署简单,秒级启动,性能和物理机几乎一样,镜像小,管理简单,隔离性高,单进程。
kvm组件多部署复杂,分钟级启动,vm会占用一些资源,虚拟镜像大,彻底隔离,完整的系统管理借助neutron可以灵活组件各类网络管理。
Docker 基本概念
引擎:创建和管理容器的工具,通过读取镜像来生成容器,并负责从仓库拉取镜像或提交镜像到仓库中;
镜像:类似于虚拟机镜像,一般由一个基本操作系统环境和多个应用程序打包而成,是创建容器的模板;
容器:可看作一个简易版的Linxu系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子;
仓库:集中存放镜像文件的场所,分为公共仓库和私有仓库,目前最大的公共仓库是官方提供的Docker Hub,此外国内的阿里云、腾讯云等也提供了公共仓库;
宿主机:运行引擎的操作系统所在服务器。
Docker 基础操作系统
BusyBox:一个极简版的Linux系统,集成了100多种常用Linux命令,大小不到2MB,被称为“Linux系统的瑞士军刀”,适用于简单测试场景;
Alpine:一个面向安全的轻型Linux发行版系统,比BusyBox功能更完善,大小不到5MB,是官网推荐的基础镜像,由于其包含了足够的基础功能和体积较小,在生产环境中最常用;
Debian/ubuntu:Debian 系列操作系统,功能完善,大小约170MB,适合研发环境;
CentOS/Fedora:都是基于Redhat的Linux发行版,企业级服务器常用操作系统,稳定性高,大小约200MB,适合生产环境使用。
Docker安装
1、安装Docker环境
[root@server2 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2、安装 Docker 源
[root@server2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@server2 ~]# yum makecache fast
3、安装 Docker-CE
[root@server2 ~]# yum -y install docker-ce
4、启动 Docker 服务
[root@server2 ~]# systemctl enable docker --now
Docker 基础命令操作
1、查看 docker 相关信息
[root@server2 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
2、配置docker镜像加速
#文件本身是没有的需要自己创建
[root@server2 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://mb8n4btz.mirror.aliyuncs.com"]
}
3、开启内核网络转发
[root@server2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@server2 ~]# sysctl -p
启动第一个容器
##测试docker
[root@server2 ~]# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
##看到这个结果证明我们的docker是正常的
[root@server2 ~]# docker run -d -p 8000:80 --name nginx-web nginx
47097938e6db755991cdd51fd95fa563a2f421804929bbd6a19b6c13a99e43c6
这里我们对参数进行一个总结
run:创建并运行一个容器,是pull+create+start结合通常我们是直接用run的。
-d:放到后台运行
-p:指定映射端口,8000是宿主机的端口(可以自定义)80是容器的端口(不能自定义)。
--name:指定容器的名称
nginx:镜像
在docker中如果没有进程的容器他会立马没杀死,所以在创建没有进程的容器时我们需要加一个参数-it 最后加/bin/bash
i是交互式t是终端bash是方式
Docker镜像生命周期
这里的Containers是容器,images是镜像,backup.tar是打包的文件,大鲸鱼就是远程仓库
整个图片诠释了如何将容器做成镜像打包成文件和发送到远程仓库,又如何把文件解压成镜像再还原成容器。
在这里我们对docker的命令做一个总结
获取镜像:docker pull centos
查看当前主机镜像列表:docker images
拉第三方镜像方法:docker pull index.tenxcloud.com/tenxcloud/httpd #路径是不同的这里我随机选的
导出镜像:docker image save centos > centos.tar.gz
删除镜像:docker image rmi centos:latest
导入镜像:docker image load -i centos.tar.gz
查看镜像的详细信息:docker image inspect centos
运行一个容器:docker run nginx
启动容器:docker run -d -p 80:80 --name nginx nginx
查看正在运行的容器:docker ps
查看所有容器:docker ps -a
停止容器:docker stop 容器名称/id
退出/离开容器:ctrl+p & ctrl+q 或者exit或者ctrl+d
exec 进入容器方法(推荐使用): docker exec -it 47097938e6db /bin/bash /bin/bash
删除所有容器
docker rm -f `docker ps -a -q`
多出来的时间,把想做的事情一一做好,不用太恐慌和焦虑。想看的书和电影,想学的语言和乐器,好好护肤好好练形体,在春暖花开的时候在好好的奖励自己,悄悄努力,默默长大,渐渐厉害。