Docker

Docker是什么?干什么用的

虚拟化资源,最初目的是提高硬件资源利用率,目前有灵活、方便扩容、缩容,可以以软件形式模拟物理硬件设备的功能。

Docker是一种轻量级的“虚拟机”,是一种再Linux容器里运行应用的开源工具

Docker的使用场景一般为打包应用程序简化部署、可脱离底层硬件任意迁移。

Docker与虚拟机的区别

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

docker资源消耗低,不需要像虚拟化再做一个完整的系统。
在这里插入图片描述
封装程序 只打包项目代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机隔离

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

如何判断应用与应用之间的隔离

根据六个名称空间隔离判断
容器隔离了6个名称空间(namespace资源隔离-用容器化技术封装)

mount文件系统,挂载点管理文件系统挂载点
user操作进程的用户和用户组
pid进程编号进程隔离
uts主机名和主机域}隔离内核和版本标识符
ipc信号量、消息队列、共享内存管理访问IPC资源(IPC:进程间通信)
net网络设备、网络协议栈、端口等管理网络接口

注意 :最晚的一个名称空间是3.8版本,所以没有Centos6的事了

docker的底层原理

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

cgroups是linux内核态中资源管理的模块,管理一些系统资源
docker引擎对内核版本的要求至少是3.8+,因为那个版本有cgroups

cgroups资源控制和namespaces结合控制管理了6个名称空间资源

做docker有什么意义(实现3个统一)

docker引擎统一了基础设施环境→images
docker引擎同意了程序打包(装箱)方式-docker镜像→images
docker引擎统一了程序部署(运行)方式-docker容器→基于镜像→运行为容器(可运行的环境)
统统资源整合成Image

实现了一次构建、多次、多出使用

docker的三要素/组件

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

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

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

仓库:存放image镜像,仓库大类:1、公共仓库→docker hub
2、私有仓库→registry harbor

docker的引擎

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

运行原理
1、docker client 客户端连接到了服务的(服务端是一个守护进程的形式跑在操作系统里面的)restful api 典型的C/S架构
2、由docker服务端的守护进程从docker hub 上下载了镜像
3、服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用
4、docker 服务端把这些信息流(传递)返回到客户端并展示出来, (展示在终端上)。
docker client 可以是多种形式,比如"docker"命令工具所在的终端

安装docker

安装依赖包

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

设置阿里云镜像源

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker-ce社区版

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

配置环境

systemctl stop firewalld
systemctl disable firewalld

setenforce 0

vim /etc/selinux/config
SELINUX=disabled

systemctl start docker
systemctl enable docker

docker十条管理命令(运维常用命令)

#查询docker版本
docker version 
docker info

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

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

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

#下载镜像
docker pull 镜像名称
docker pull nginx

在这里插入图片描述

#查看镜像列表
docker images   查看当前docker下的下载镜像信息

在这里插入图片描述

#获取镜像信息
docker inspect 镜像ID

在这里插入图片描述

#添加镜像标签
docker tag nginx:latest nginx:lnmp

在这里插入图片描述
相当于做了一个软链接

#删除镜像
docker rmi 镜像名称
docker rmi 镜像标签

在这里插入图片描述

#镜像导出
docker save -o 文件名 镜像名
docker save -o nginx_docker nginx:latest

在这里插入图片描述

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

在这里插入图片描述

#查询容器
docker ps -a

在这里插入图片描述

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

在这里插入图片描述

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

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

#停止容器
docker stop 容器ID

在这里插入图片描述

#持续后台运行
docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"

在这里插入图片描述

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

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

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

#容器导出
docker export 容器ID > 文件名

在这里插入图片描述

#容器导入(生成镜像)
docker import 导出的文件名(容器)指定镜像名称

在这里插入图片描述

#删除容器
docker rm 容器ID
#强制删除容器(正在运行的)
docker rm -f 容器ID

在这里插入图片描述

#批量删除容器
docker ps -a | awk '{print "docker rm "$1}' | bash
这个其实是删除所有不在运行时的容器
# 删除所有非running的容器
docker rm `docker ps -q`              

对于有标签的容器,先要删除带标签的名称容器,在删除容器ID,否则会报错
在这里插入图片描述

#批量删除“exit”状态的容器
for i in `docker ps -a | grep -i exit | awk '{print $1}'`; do docker rm -f $i;done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值