我与Docker的‘相爱相杀’,一篇带你全了解~~~(持续更新)

Posted 可乐卷儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我与Docker的‘相爱相杀’,一篇带你全了解~~~(持续更新)相关的知识,希望对你有一定的参考价值。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、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 Engine)

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

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

5、docker三大组件:

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

6、docker底层原理

  • 名称空间( Namespaces):提供容器的隔离工作区的技术
    • 容器完美的实现了6个名称空问隔离(namespace资源隔离-用容器化技术封装)
      • mount:文件系统,挂载点
      • user:操作进程的用户和用户组
      • pid:进程编号
      • uts:主机名和主机域
      • ipc:信号量、消息队列,共享内存(理解,不同的应用调用的时候应该使用不同的内存空间)
      • net:网络设备、网络协议栈、端口等
  • 控制组(Control groups):资源管理功能,将应用程序限制为一组特定的资源
    • 控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束

二、部署20版docker

1、安装docker

  1. 环境配置
systemctl stop firewalla
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
vim /etc/reslov.conf
nameserver 114.114.114.114
  1. 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
 		##device-mapper-persistent-data:存储驱动
		##lvm2:控制工具
设置阿里云镜像源
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  1. 安装docker-ce社区版
yum install -y docker-ce
  1. 开启docker
systemctl start docker
systemctl enable docker

2、设置镜像加速

官方镜像加速器(阿里云网站)
关于加速器的地址,您登录容器镜像服务控制台后,在左侧导航栏选择镜像工具 ----> 镜像加速器,在镜像加速器页面就会显示为您独立分配的加速器地址
https://t466r8qg.mirror.aliyuncs.com
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

mkdir -p /etc/docker
直接命令行输入以下内容:
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://t466r8qg.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

3、网络优化

vim /etc/sysctl.conf
	net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
docker images 或 docker image ls	##查询镜像列表

4、相关命令–查看

1. 查看docker版本

docker -v		
docker version

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

docker info


☆☆这里引申一些配置文件的内容

vim /etc/docker/daemon.json		##docker配置文件还可以添加以下的建立配置:
	{
	"graph": "/data/docker",					##数据目录
	"storage-driver": "overlay2",				##存储引擎;版本迭代:LXC——>overlay——>overlay2(overlayfs:文件系统,解决docker镜像分层)
	"insecure-registries": [" registry.access.redhat.com", "quary.io"]	##私有仓库位置
	"registry-mirrors": ["https://q***"]		##镜像加速
	"bip": "172.7.5.1/24",		##docker网络;控制网段的位置;需要创建新的网桥,系统默认的docker0是不变的
	"exec-opts": ["native.cgroupdriver-systemd"],		##启动时候的额外参数(驱动)
	"live-restore":true		##当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)
systemctl daemon- reload
systemctl restart docker

三、Docker镜像相关操作

1. 运行镜像

docker run hello-world		##运行hello-world镜像


命令详解:

  1. The Docker client contacted the Docker daemon. dockerclient客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的)restfulapi典型的C/s架构
  2. The Docker daemon pulled the “hello-world” image from the Docker Hub.(amd64)
    由docker服务端的守护进程从docker hub上下载了镜像(服务端会先检查本地系统是否有此镜像)
  3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
    服务端创建了一个新的容器,然后从拉取的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用
  4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
    docker服务端把这些信息流(传递)返回到客户端并展示出来,( 展示在终端上)
    docker client 可以是多种形式,比如"docker"命令工具所在的终端

2. 删除镜像
若需要删除镜像需要先删除容器

docker rm  **	##删除容器ID
docker rmi  **  ##删除镜像ID

3. 搜索镜像-search

docker search nginx		##搜索镜像nginx
docker search centos: 7		##搜索镜像centos:7

4. 下载镜像-pull

docker pull 镜像名称
docker pull nginx		##下载nginx最新的镜像

  1. docker images ##查看镜像列表

  2. docker inspect 镜像ID ##查看当前docker下的镜像详细信息


docker ps -a ##显示所有的容器,包括未运行的 ![在这里插入图片描述](https://img-blog.csdnimg.cn/c172a59a3f784e46a0832284e4db5c36.png)

以上是关于我与Docker的‘相爱相杀’,一篇带你全了解~~~(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

我与Python的相爱相杀-类与对象

[ C++ ] 一篇带你了解C++中动态内存管理

Markdown语法入门 一篇带你了解基本语法

Java - 一篇带你了解类成员(基本数据类型/包装类/对象/数组)默认值

Java - 一篇带你了解类成员(基本数据类型/包装类/对象/数组)默认值

docker + kubernetes=共生?相爱相杀?