第一章 Docker 概述

  • 什么时Docker

Docker 为什么出现?

开发加运维—— 开发打包部署上线,一套流程

java - jar(环境) - 镜像 - Docker 仓库 - 下载发布镜像
Docker 给以上问题提出了解决方案
image.png

Docker 通过隔离机智,可以将服务器利用到极致

本质:所有的技术都是因为出现了问题,需要去解决

Docker历史

容器技术出来之前,使用的虚拟机技术

vm: linux centos 原生镜像, 需要开启多个虚拟机
dockers, 隔离 镜像(最核心的环境)

Docker 基于Go 开发的
Docker
docker hub

Docker能干嘛

  • 虚拟机技术
    image.png
  • 资源占用多
  • 冗余步骤多
  • 启动很慢

= 容器化技术
容器化技术不是模拟的一个完整的操作系统
image.png

比较Docker和虚拟机技术

  • 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在宿主机的内容,容器没有自己的内核,没有虚拟硬件,所以就轻便了
  • 每个容器间时互相隔离,每个容器内都有属于自己的文件系统,互不影响

DevOps

  • 应用更快速的交付和部署
    传统:一堆帮助文档,安装程序
    Docker:打包镜像发布测试,一件运行
  • 更便捷的升级和扩缩容
    使用Docker,部署应用就和搭积木一样
    项目大包围一个镜像,扩展服务器
  • 更简单的系统运维
    在容器化之后,我们的开发,测试环境都是高度一致的
  • 更高效的计算资源利用
    Docker是内核级别的虚拟化, 可以在一个物理机上运行很多容器实例

Docker 安装

Docker中的名词概念

Docker的基本组成

image.png

  • image 镜像
    Docker镜像 好比是一个模板,可以通过这个模板来创建容器服务
    通过这个镜像可以创建多个容器。
  • container 容器
    Docker利用容器技术,独立运行一个或者一组应用,通过镜像创建的。
  • repository 仓库

    安装Dokcer

    环境准备

Docker 帮助文档
image.png

镜像加速

运行流程

底层原理

  • Docker 是怎么工作的?

Docker是一个CLient-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问。

Docker server 接收到Docker CLient的指令,就会执行进程。

image.png

  • Docker 为什么比虚拟机快?

image.png

1、 Docker有着比虚拟机更少的抽象层
2、 Docker利用的是宿主机的内核,vm需要的是Guest OS
所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载GUestOs 分钟级别的,而daocker是利用宿主机的操作系统,省略了这个复杂过程,秒级。

image.png

Docker 常用命令

docker --help
docker version
docker info

镜像命令

官网

docker images # 查看镜像
docker search  # 搜索镜像
docker pull # 下载镜像 
docker dmi # 删除镜像

image.png

容器基本命令

docker pull centos

新建容器并启动

docker run [] image

常用的其他命令

后台启动容器

docker run -d

查看docker 日志

docker logs -f -t--tail

-tf 显示日志
-0-tail 要显示日志的条数

查看容器中进程信息

docker top **** 容器id

检查镜像的元数据

docker inspect **** 容器id

进入当前正在运行的容器

docker exec -it ****(容器 id) /bin/bash

docker exec -it 容器id bashShell
docker attach 容器id

docker exec 进入容器后开启一个新的终端
docker attach 进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

docker  cp 容器id:容器内的路径  主机路径

命令小结

image.png

端口暴露

image.png

我们每次改动nginx配置文件都需要进入容器内部,十分麻烦,可以再容器外面提供要给映射路径,达到再容器修改文件名,容器内部就可以自动修改?

image.png

Portainer 可视化管理工具

docker run -d -p 8088:9000 \  --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true protainer/portainer

镜像原理之联合文件系统

  • 镜像是什么
    镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需的所有内容、包括代码、运行时、库、环境变量和配置文件

所有应用,直接打包docker 镜像,就可以直接跑起来。
如何得到镜像

从远程仓库加载
拷贝
自己制作 DockerFile

docker 镜像加载原理

Union FS 联合文件系统
是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同事可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统时Docker镜像的基础,镜像可以通过分层来进行集成,基于基础镜像,可以制作各种具体的应用镜像。

特点: 一次同事加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统——Union FS

bootfs(root file system)主要包含bootloader和kernel bootloader主要是引导加载 kernel Linux刚启动时,会加载bootfs文件系统。再Docker镜像的最底层时bootfs,这一层与我们典型的Linux Unix系统时一样。 包含boot加载器和内核,当boot加载完成之后,整个内核就都再内存中了,此时内存的使用权已由 bootfs转交给了内核,此时系统也会卸载bootfs。

rootfs 再bootfs之上,包含的就是典型的Linux系统中的 /dev /proc /bin /etc 等标准目录和文件。 rootfs就是各种不同的操作系统发行版, 如 ubantu centos

image.png

对于一个精简的os, rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host 的 hernel,自己只需要提供rootfs就可以. 由此可见,对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别。

镜像原理之分层理解:

镜像为什么要采用分层的结构?
最大的好处就是共享资源。

理解:

所有的镜像都起始于一个基础镜像层,当进行修改活增加新的内容是,就会再当前镜像层上,创建新的镜像层。

image.png

Docker通过存储引擎(新版本采用快照机制) 的方式来实现镜像层堆栈, 并保证多镜像对外展示为统一的额文件系统。

Linux上可用的存储引擎由 AUFS、 Overlay2、 Device Mapper、 Btrfs以及Zfs。
Docker 再Windows上仅支持windowsfilter 一种存储引擎。

  • 特点:

Docker镜像都是只读的, 当容器启动时,一个新的可写层被加载到镜像层的地步,这一层就是我们通常所说的容器层,容器之下的都是镜像层。
image.png

Commit 镜像

docker commit -m="提交的描述信息" -a="作者" 容器id 目标敬香茗: 【TAG】

容器数据卷

数据都在容器中,如果我们容器删除,数据据就会丢失
需求: 数据可以持久化
MySQL : MYSQL数据可以存储在本地

Docker容器之间可以有一个数据共享的技术, Docker容器中产生的容器,同步到本地
这就是卷技术, 即目录挂载,将我们容器内的目录,挂载到Linux上面

image.png
容器的持久化和同步操作。 容器间也是可以数据共享的

使用数据卷

1、使用命令挂载 
docker run -it -v 主机目录:容器内目录

Docker File

Docker 网络


沂狰码农
16 声望1 粉丝

CODE BETTER