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是2013年发行的一种容器技术。容器技术有什么用?我们知道,软件开发中最棘手的莫过于环境配置问题。很多时候,一个项目可以在我们的机器上跑了,但是其他人的机器由于环境配置、版本不兼容等问题,很难将项目移植到其他机器来运行。所以我们希望在将项目的打包的时候,能将当前的环境一并添加进去。

在Docker这类容器技术出现之前,虚拟机技术就是一种带环境安装的解决方案。但是虚拟机自身比较笨重,因为他需要独占一部分的内存和硬盘空间。在虚拟机运行的时候,这些资源就不能被其他进程使用了。而且虚拟机相当于虚拟化出一台机器,会涉及到很多系统级别的步骤(如用户登录),此外虚拟机速度很慢,因为他是和操作系统挂钩的。

为了解决虚拟机笨重的问题,容器技术应运而生。容器技术不是再模拟一个完整的操作系统,而是对进程进行隔离。每一个容器的开销小很多,不用给他们分配独立的内存和磁盘空间,而是直接使用宿主机内核。摒弃了操作系统级的虚拟化以后,容器就显得非常轻量级了,因为容器启动速度快(相当于进程而非os),占用资源少(只占用需要的资源,不用事先分配独享的资源),体积小(包含所需要的组件即可)。

Docker就是这样的一种容器技术。Docker将应用程序与该程序的依赖,打包到一个文件中,运行该文件就会生成一个虚拟容器。程序在此虚拟机上运行,给人感觉好像在真实的物理机上运行一样。有了Docker,就不用再担心环境问题。

在这里插入图片描述

Docker基本概念

镜像(image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

容器(container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像,可以类比于Maven仓库。

Docker常用命令

镜像相关

docker images # 列出本地images
docker search mysql #搜索仓库MySQL镜像
docker pull redis # 下载Redis官方最新镜像,相当于:docker pull redis:latest
docker rmi redis #单个镜像删除,相当于:docker rmi redis:latest
docker rmi -f $(docker images -q) #删除本地全部镜像

# 构建docker镜像:
#(1)编写dockerfile
cd /docker/dockerfile
vim mycentos
##(2)构建docker镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1

容器相关

docker run -i -t --name mycentos -p 9090:8080 -v /home:/usr/local #新建并启动容器,-i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;–name 为容器指定一个名称;-p 宿主机的端口映射到容器的端口;-v 容器数据卷(作用:数据持久化)的使用,将容器上的指定目录挂载到宿主机的目录,从而可以实现数据的同步(删除容器并不会删除其挂载的数据卷)
docker run -d mycentos #后台启动容器,参数:-d 已守护方式启动容器
docker ps # 列出正在运行的容器
docker ps -a #列出所有容器(包括未运行的)
docker start redis # 启动已经被停止的容器redis
docker restart redis # 重启容器redis
docker top redis # 列出redis容器中运行进程
docker logs rabbitmq #查看redis容器日志,默认参数
docker run -it centos /bin/bash #使用run方式在创建时进入
exit #关闭容器并退出
docker attach centos #直接进入centos容器启动命令的终端,不会启动新进程
docker exec -it centos /bin/bash #在centos容器中打开新的交互模式终端,可以启动新进程
docker inspect redis #获取镜像redis的元信息
docker stop redis #停止一个运行中的容器
docker kill redis #杀掉一个运行中的容器
docker rm -f redis #删除一个容器
docker cp rabbitmq:/[container_path] [local_path] #将rabbitmq容器中的文件copy至本地路径

Docker镜像详解

镜像是什么

镜像是一种轻量级、可执行的独立软件保,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某 个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。 将所有的应用和环境,直接打包为docker镜像,就可以直接运行。

Docker镜像加载原理

  1. UnionFs (联合文件系统)

UnionFs(联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下( unite several directories into a single virtual filesystem)。Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的 用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

  1. Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。 boots(boot file system)主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel, Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是 boots。这一层与我们典型的 Linux/Unix系统是一样的,包含boot加載器和内核。当boot加载完成之后整个内核就都在内存中了,此时 内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。 rootfs(root file system),在 bootfs之上。包含的就是典型 Linux系统中 的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu, Centos等等。

  1. 平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才几百M?

对于个精简的OS,rootfs可以很小,只需要包合最基本的命令,工具和程序库就可以了,因为底层直接用 Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的Linux发行版, boots基本是一致 的, rootfs会有差別,因此不同的发行版可以公用bootfs. 虚拟机是分钟级别,容器是秒级!

镜像分层

我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层层的在下载 。
在这里插入图片描述
容器分层的好处我认为是可以实现资源共享,例如有多个镜像都是从相同的Base镜像构建而来,那么宿主机只需要在磁盘上保留一份base镜像,内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层可以共享。

所有的 Docker镜像都起始于一个基础镜像层,当进行修改或培加新的内容时,就会在当前镜像层之上,创建新的镜像层。Docker 镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部。这一层就是我们通常说的容器层,容器之下的都叫镜像层。

容器数据卷

docker有一个问题,就是将容器删除的话,数据就会丢失。但我们需要数据的持久化,要将数据存储到本地。容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地。这就是卷技术,目录的挂载,将我们容器内的目录,挂载到Linux上面。

使用如上:docker run 后面加 -v aaa:bbb 表示指定卷挂载的目录,aaa表示宿主机目录,bbb表示容器目录,这种方式为指定路径挂载。当然还有如下两种挂载方式:

具名挂载和匿名挂载

# 三种挂载: 匿名挂载、具名挂载、指定路径挂载 
-v 容器内路径 #匿名挂载 
-v 卷名:容器内路径 #具名挂载 
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的

通过 docker volume ls 命令可以查看所有卷名。所有的docker容器内的卷,没有指定目录的情况下都是在宿主机 /var/lib/docker/volumes/xxxx/_data 目录下。

Reference:

https://www.bilibili.com/video/BV1og4y1q7M4?p=17&spm_id_from=pageDriver

https://www.cnblogs.com/DeepInThought/p/10896790.html

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:49:07  更:2021-10-21 12:49:36 
 
开发: 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 20:39:59-

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