Docker学习笔记(一)docker简介及安装
新手站主第一次建站,笔记由站主查询资料、借鉴前辈笔记制作,初衷全在于锻炼自己和分享经验,如果文中有错别字、错误内容或者有缺点之处,麻烦在评论区进行评论,望与诸君共同进步,在此共勉。
1. docker简介
谈到 Docker,不论我们是否实践过,都应该对它或多或少有一个印象,即“环境一次创建,多端一致性运行”,因为它正解决了曾经困扰我们已久“这段代码在我电脑上运行没问题啊”的烦恼。首先,简单介绍一下 Docker 技术是什么。
1.1. 什么是docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或 Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
我们可以通过 docker 来做到什么?
- 快速部署 Java、MySQL、Tomcat,远离繁多重复配置
为什么要用docker来安装?为什么不直接通过 传统虚拟机 安装?我们需要知道 传统虚拟机 是什么。
- 传统虚拟机:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
为什么我们需要知道虚拟机?
- 作为新兴虚拟化方式 docker 出名之初就在于相比于传统虚拟机技术它更加的 “轻”
为什么说它轻?没有对比就没有伤害,下面是两种虚拟化技术使用应用的流程
-
虚拟机:安装软件 ==> 软件中模拟一个完整功能的操作系统 ==> 系统中下载应用 ==> 运行软件
-
docker:安装 docker ==> 从docker hup 中下载镜像 ==> 运行容器中的进程(运行软件)
1.2. 为什么要用 docker?
因为 docker 相比于 传统的虚拟机技术 有诸多的优势
1、方便快捷、避免过多的配置
- 它支持将 软件编译成一个镜像 文件
- 允许使用他人配置好环境的镜像,以实现一键安装
2、能更高效的利用服务器的资源
- docker 通过容器运行的进程远远低于虚拟机运行 占用的内存
3、可轻松迁移
- 因为 docker 确保了环境的一致性,使应用的迁移变得更加简单
- docker 可以在很多平台上运行 笔记本、云、虚拟机 等,运行结果一致
- 所以用户可以轻松进行迁移
4、对比传统虚拟机总结
特性 | 虚拟机 | 容器 |
---|---|---|
隔离级别 | 操作系统级 | 进程级 |
系统资源 | 5~15% | 0~5% |
启动时间 | 分钟级 | 秒级 |
镜像存储 | GB-TB | KB-MB |
性能 | 接近原生 | 弱于 |
系统支持量 | 上百 | 一般几十个 |
高可用策略 | 备份、容灾、迁移 | 弹性、负载、动态 |
2. docker的核心概念
docker的核心概念:
- 镜像(
Image
):从仓库中拉取过来的各个应用的底层root
文件系统 - 容器(
Container
):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用 - 仓库(
Repository
):用来保存各种镜像并提供镜像下载
2.1. 镜像
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载
root文件系统为其提供用户空间支持。
而 Docker 镜像(Image),就相当于是一个
root文件系统。比如官方镜像
ubuntu:18.04就包含了完整的一套 Ubuntu 18.04 最小系统的
root文件系统。
而镜像还有一个特点:可以以
root文件系统作为基础,在上面配置如 Java、Mysql等环境后,将其构成新的镜像,然后可以发布这个新的镜像给其他有需要的人使用,这也就是 docker 的优点之一:下载已配好部分环境的镜像避免过多重复性的环境配置
2.2. 容器
容器相当于 镜像 的实例化,即安装包和软件的区别;但是与我们平常使用的软件不同的是
- 手机app:app应用使用时有部分数据缓存会存储到手机中,卸载应用再重新进行安装,应用会读取缓存的数据,不是全新的app
- 容器:容器会以镜像为基础层,在其上创建一个当前容器的存储层,为容器的读写操作做存储。但删除容器后,该数据存储内容会随着容器消失。所以类似于 MySQL容器 需要将存储位置绑定宿主目录,直接对宿主进行读写操作,卸载容器后不会影响数据
2.3. 仓库
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个 仓库(
Repository);每个仓库可以包含多个 标签(
Tag);每个标签对应一个镜像(相当于不同版本的软件)。
我们可以在 Docker Registry 仓库中筛选我们所需要镜像,常见的 Registry 仓库:
- 官方的 Docker Hub
- CoreOS 的 Quay.io
由于某些原因,在国内访问这些服务速度可能比较慢,所以我们可以通过 阿里云加速器、DaoCloud 加速器 来提高我们访问的速度
当然国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库 等。
3. docker安装、运行与加速
使用步骤:
- 安装Docker;
- 去Docker仓库找软件对应的镜像;
- 使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
- 对容器的启动停止就是对软件的启动停止
3.1. 安装 docker(Ubuntu)
官方网站上有各种环境下的 安装指南,这里只介绍 Ubuntu 的安装。
安装方法有三种
-
在软件源内添加docker,并且安装,这样安装和升级比较方便,官方推荐。
-
官方一键安装脚本,不建议在生产环境下使用。
-
下载RPM包手动安装,手动升级,一般在与互联网隔绝的情况下使用此方法。(这里不实现此方法的安装,具体可以看官网的三种安装方法)
方法一:软件源内添加docker,并且安装
1、卸载旧版本
- 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:
$ sudo apt-get remove docker docker-engine docker-ce docker.io
2、 由于
apt源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。
# 更新 apt 索引 $ sudo apt-get update # 使apt可以通过HTTPS使用存储库(repository) $ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
3、为了确认所下载软件包的合法性,需要添加软件源的 GPG
密钥。
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看
# 国内源 $ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # 官方源 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4、 然后,我们需要向 source.list
中添加 Docker 软件源
$ sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) \ stable" # 官方源 # $ sudo add-apt-repository \ # "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ # $(lsb_release -cs) \ # stable"
以上命令会添加稳定版本的 Docker CE APT 镜像源,如果需要测试或每日构建版本的 Docker CE 请将 stable 改为 test 或者 nightly。
5、 更新 apt 软件包缓存,并安装 docker-ce
$ sudo apt-get update $ sudo apt-get install -y docker-ce
方法二:使用脚本进行安装(禁止在生产环境中使用)
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,如果是你是懒人,可以在服务器版本直接执行官方出品的一键安装脚本(脚本会区分不同的操作系统且脚本会安装体验版**(edge版)而不是稳定版(stable版)且最好不要用于生产环境**,脚本Github地址)。 另外可以通过
--mirror选项使用国内源进行安装:
$ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh # $ sudo sh get-docker.sh --mirror Aliyun
3.2. 启动 Docker CE
- 将docker服务设为开机启动
$ sudo systemctl enable docker
- 启动docker
$ sudo systemctl start docker
- 关闭docker
$ sudo systemctl stop docker
3.3. 建立 docker 用户组
默认情况下,
docker命令会使用 Unix socket 与 Docker 引擎通讯。而只有
root用户和
docker组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用
root用户。因此,更好地做法是将需要使用
docker的用户加入
docker用户组。
建立
docker组:
$ sudo groupadd docker
将当前用户加入
docker组:
$ sudo usermod -aG docker $USER
3.4. 添加国内的镜像源
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:
由于镜像服务可能出现宕机,建议同时配置多个镜像。各个镜像站测试结果请到 docker-practice/docker-registry-cn-mirror-test 查看。
国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务,具体请参考官方文档。
本节我们以 Azure 中国镜像
https://dockerhub.azk8s.cn为例进行介绍。
在 /etc/docker/daemon.json
中写入以下内容(如果没有此文件请创建)
{ "registry-mirrors": [ "https://dockerhub.azk8s.cn", "https://hub-mirror.c.163.com" ] }
注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。
之后重新启动服务。
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
资料来源:
https://docs.docker.com/install/
https://yeasy.gitbooks.io/docker_practice/
- docker学习笔记(一)——docker简介及安装
- Docker学习笔记——(一)docker简介与docker安装
- Docker学习笔记 — Compose简介、安装与简单使用
- django学习笔记1-简介与安装
- Node.js 学习笔记之简介、安装及配置
- nodejs学习笔记一 nodejs简介与安装
- django学习笔记1-简介与安装
- 【Docker】Docker学习笔记(1)-Windows下的配置与安装
- docker 学习笔记入门(安装docker-io)
- docker学习笔记1---Centos7安装docker
- Docker学习笔记(1)-- 如何安装Docker
- NFC学习笔记2——Libnfc简介及安装
- 1.docker学习笔记:docker的安装和基本使用
- Docker学习笔记(1):Docker简介及其组件介绍
- Docker学习笔记——binary安装(2)
- docker 学习笔记(一)Docker的介绍与安装使用
- Docker学习笔记(二)安装与卸载
- Docker学习笔记 — Docker安装(Ubuntu 64bit)
- OpenCL学习笔记(三):OpenCL安装,编程简介与helloworld
- docker 学习笔记 简介