01.Docker 入门
Docker 入门
Docker 介绍
Docker 和虚拟机区别?
虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。Docker 是不携带操作系统的,所以 Docker 的应用就非常的轻巧。另外在调用宿主机的 CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用 Hypervisor 去虚拟化内存,整个调用过程是虚拟内存 ->虚拟物理内存 ->真正物理内存,但是 Docker 是利用 Docker Engine 去调用宿主的的资源,这时候过程是虚拟内存 ->真正物理内存。
传统虚拟机 | Docker 容器 | |
---|---|---|
磁盘占用 | 几个 GB 到几十个 GB 左右 | 几十 MB 到几百 MB 左右 |
CPU 内存占用 | 虚拟操作系统非常占用 CPU 和内存 | Docker 引擎占用极低 |
启动速度 | (从开机到运行项目)几分钟 | (从开启容器到运行项目)几秒 |
安装管理 | 需要专门的运维技术 | 安装、管理方便 |
应用部署 | 每次部署都费时费力 | 从第二次部署开始轻松简捷 |
耦合性 | 多个应用服务安装到一起,容易互相影响 | 每个应用服务一个容器,达成隔离 |
系统依赖 | 无 | 需求相同或相似的内核,目前推荐是 Linux |
Docker 应用场景
- 容器化技术
- 系统级别虚拟化技术
- 轻便、容器间隔离
DevOps
- 一键运行
- 打包镜像,发布
- 便捷升级和扩、缩容
- 高效的计算资源利用
- …
Docker 核心架构
Docker 架构图
 |
镜像image:
一个镜像代表一个应用环境,他是一个只读的文件,如 mysql 镜像,tomcat 镜像,nginx 镜像等容器container:
镜像每次运行之后就是产生一个容器,就是正在运行的镜像,特点就是可读可写;Docker 利用容器技术,独立运行一个或一组通过镜像来创建的应用。容器具备启动、停止、删除等的基本命令;可理解为简易的 Linux 系统。仓库repository:
用来存放镜像的位置,类似于 maven 仓库,也是镜像下载和上传的位置;公有仓库:Docker Hub
。国内访问需采取加速措施。dockerFile:
docker 生成镜像配置文件,用来书写自定义镜像的一些配置tar:
一个对镜像打包的文件,日后可以还原成镜像
概念 | 说明 |
---|---|
Docker 镜像 (Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器 (Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端 (Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机 (Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 **latest** 作为默认标签。标签>仓库名> |
Docker Machine | Docker Machine 是一个简化 Docker 安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装 Docker,比如 VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker 原理
C-S 架构,容器之间互相隔离,通过 Socket 进行通信。
Docker 快于 VM 的原理
比 VM 更少的抽象层
 - Docker 利用宿主机的内核, VM 需要 Guest OS
Docker 镜像、容器和仓库
容器是由镜像实例化而来。简单来说,镜像是文件,容器是进程。容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。
docker 的镜像概念类似虚拟机的镜像。是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。
docker 利用容器来运行应用:docker 容器是由 docker 镜像创建的运行实例。
docker 容器类似虚拟机,可以执行包含启动,停止,删除等。每个容器间是相互隔离的。容器中会运行特定的运用,包含特定应用的代码及所需的依赖文件。可以把容器看作一个简易版的 linux 环境(包含 root 用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
在 Docker 的生命周期中,最核心的两个部分,一个是镜像 Images,一个是容器 Containers。 镜像运行起来就是容器。
容器服务运行的过程中,基于原始镜像做了改变,比如安装了程序,添加了文件,也可以提交回去 (commit) 成为镜像。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 mysql 或用户需要的其他应用程序。
docker 镜像实际上是由一层一层的系统文件组成,这种层级的文件系统被称为UnionFS( Union file system 统一文件系统),镜像可以基于 dockerfile
构建,dockerfile
是一个描述文件,里面包含了若干条命令,每条命令都会对基础文件系统创建新的层次结构。
docker 提供了一个很简单的机制来创建镜像或更新现有的镜像。用户甚至可以从其他人那里下载一个已经做好的镜像直接使用。(镜像是只读的,可以理解为静态文件)
相对于镜像来说容器是动态的,容器在启动的时候创建了一层可写层次作为最上层。
` docker create <image -id > `:为指定的镜像添加一个可读写层,构成一个新的容器;
docker 仓库: 如果使用了 git 和 github 就很容易理解 docker 的仓库概念。docker 仓库概念和 git 类似。 docker 仓库是用来包含镜像的位置,docker 提供了一个注册服务器(register)来保存多个仓库,每个仓库又可以包含多个具备不同 tag 的镜像, docker 运作中使用的默认仓库是 docker hub 公共仓库。仓库支持的操作类似 git,当用户创建了自己的镜像之后就可以使用 push 命令将它上传到共有或者私有的仓库。这样下次再另外一台机器上使用这个镜像的时候只需要从仓库里面 pull 下来就可以了。
Docker 安装
https://docs.docker.com/get-docker/
Linux
1
2
3
4
5
6
7
8
9
10
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都输入 y
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
Mac
Windows
https://docs.docker.com/desktop/install/windows-install/
镜像加速源
设置镜像
设置镜像步骤
- 登录阿里云服务器,找到
容器镜像服务
- 设置 Registry 登录密码
- 找到镜像加速器
- 配置使用
1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pi9dpp60.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
国内镜像:
镜像加速器 | 镜像加速器地址 |
---|---|
Docker 中国官方镜像 | https://registry.docker-cn.com |
DaoCloud 镜像站 | http://f1361db2.m.daocloud.io |
Azure 中国镜像 | https://dockerhub.azk8s.cn |
科大镜像站 | https://docker.mirrors.ustc.edu.cn |
阿里云 | https://ud6340vz.mirror.aliyuncs.com |
七牛云 | https://reg-mirror.qiniu.com |
网易云 | https://hub-mirror.c.163.com |
腾讯云 | 轻量应用服务器 安装 Docker 并配置镜像加速源-实践教程-文档中心-腾讯云 |
设置 Docker 镜像命令:
1
2
3
4
5
6
7
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json
{
"registry-mirrors": ["加速地址"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker Desktop 设置镜像
常见的国内源有:
Docker 国内镜像源:https://registry.docker-cn.com
中科大源:https://docker.mirrors.ustc.edu.cn
网易源:https://hub-mirror.c.163.com
百度源:https://mirror.baidubce.com
腾讯源:https://ccr.ccs.tencentyun.com
阿里源:需要登陆 cr.console.aliyun.com
创建单独的镜像源链接,
 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
使用如下命令查看 Docker 配置,如下图所示镜像源配置成功:
 |
Docker 镜像
- 见 [[Docker 应用]]
Docker 命令
- 见 [[Docker 命令]]
Dockerfile
- 见 [[Dockerfile]]
网络配置
端口映射
容器内的网络服务和外部机器不能直接通信;外部机器和宿主机可以直接通信;宿主机和容器可以直接通信。
当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的端口,从而间接访问容器的服务。
这种操作称为:端口映射。
Docker Compose
见 [[Docker Compose]]