文章目录
Docker是种Linux Containers
Docker解决了因机器不一样,而导致应用程序运行环境不一样的尴尬。docker采用了一种虚拟化容器技术,将应用容器化,实现进程隔离。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。在正常进程外添加一层保护层,对于容器内的进程来说,所有的资源都是虚拟的,共享内核从而实现了隔离。
容器化越来越受欢迎的原因:
- 灵活:即使最复杂的应用也可以容器化
- 轻量级:容器利用和共享主机内核,使系统资源使用比VM更高效
- 便携:本地构建,云端部署并且能处处运行
- 松耦合:单个容器的资源属于自给自足,对某一个进行修改不影响其他容器运行
- 可扩展:可以在数据中心自动分配和增加容器副本
- 安全的:容器对进程应用主动约束和隔离,而不需要用户进行任何配置。
镜像和容器
容器是一个正在运行的进程,在应用上进行了封装,每一个容器都有自己的私有文件系统进行交互,文件系统由Docker镜像提供,同时提供程序所需要的东西–代码或二进制文件
容器与虚拟机
容器在主机上运行与其他容器共享主机的内核,其次每一个容器运行都是一个进程不用占用更多的内存,因此它是轻量级的。
相对虚拟机,容器启动优势:
- 启动快容器本质是启动底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
- 资源占用少容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。
- 体积小容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
- 一处构建处处运行,容器只需要导出或通过
Dockerfile
构建或者导出镜像,即可随时随地在有docker环境的平台运行,虽然虚拟机也可以进行打包,但是虚拟机需要更高的环境资源
虚拟机需要运行一个完整的操作系统,通过虚拟机程序对主机资源进行访问,虚拟机程序所占用的资源有可能远远超过一个应用程序所占用的资源开销。
相对容器来说,虚拟机存在如下缺陷:
1.资源占用多虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。
2. 冗余步骤多虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。
3. 启动花费时间过长,启动操作系统时间+应用启动时间=整个服务启动时间需要多久。
Containers | virtual machines |
---|---|
![]() | ![]() |
安装Docker Engine For CentOS
根据官方文档推荐进行安装,且本次安装是在CentOS系统上,需要准备 CentOS7
操作系统,且 centos-extras
必须被启动,默认情况下是被启动的,官方推荐存储驱动为 overlay2
,接下来就开始安装吧~
卸载老版本
首先用 yum
检查或卸载旧版本的docker,否则将有可能导致新版装装不上去,在这块要注意卸载的包,包括 docker 或 docker-Engine 以及其相关依赖
$ yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
docker中的images, containers , volumes 和 network都是被保存在 var/lib/docker
目录中,且Docker-Engine-Community 包现在改名为 docker-ce
安装docker
安装docker有三种不同的方式,可以依据你所需要的方式进行安装:
- 最多的使用者使用设置docker的仓库,即
set up Docker's repositories
进行安装,这种安装和更新任务会比较简单,也是推荐的安装方法 - 下载
rpm
二进制包进行手动安装,这种在没有网络的情况下进行离线安装 - 在测试和开发环境下,有一些用户采用自动的便利脚本进行安装
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
使用仓库进行安装
1. 设置yum仓库
在服务器第一次安装docker之前需要设置一下仓库,然后你才能通过仓库进行更新和安装。
- 安装之前所需要的包,
yum-utils
用于提供yum-config-manager
实用工具,device-mapper-persistend-data
和lvm2
包用于通过devicemapper
映射存储驱动。
$ yum install -y yum-utils device-mapper-persistent-data lvm2
- 给yum仓库添加一个稳定的repository
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
夜间或测试仓库默认情况是被禁用的,你可以通过以下命令对这些仓库进行启用
$ sudo yum-config-manager --enable docker-ce-nightly
# 启用docker的nightly
$ sudo yum-config-manager --enable docker-ce-test
# 启用测试通道
$ sudo yum-config-manager --disable docker-ce-nightly
# 也可以通过 --disable 用来禁用
2. 安装新版本docker-ce
- 安装最新版本的
docker-ce
和containerd
$ sudo yum install docker-ce docker-ce-cli containerd.io
- 安装指定版本的
docker-ce
# 列出并排序在你仓库中可用的版本
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
# 填充全包名指定的版本号
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
填充全包名是
docker-ce
加上从第一个冒号:
开始一直到第一个连字符-
结束,如:docker-ce-18.09.1
3. 启动Docker
$ sudo systemctl start docker
4. 验证是否启动docker
$ docker version
# 将会显示docker的版本
Client:
Version: 17.12.1-ce
API version: 1.35
Go version: go1.9.4
Git commit: 7390fc6
Built: Tue Feb 27 22:15:20 2018
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.1-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.4
Git commit: 7390fc6
Built: Tue Feb 27 22:17:54 2018
OS/Arch: linux/amd64
Experimental: false
通过rpm包安装
- 访问docker官方下载页面,根据页面提示下载你所需要版本的
.rpm
安装包 - 安装docker-ce,将下方的路径替换为你下载的
.rpm
包路径
$ sudo yum install <YOUR_PACKAGE_PATH>
# For exmple following
$ sudo yum install /opt/docker-ce-18.09.5-3.el7.x86_64.rpm
- 启动docker服务
$ sudo systemctl start docker
4.通过运行 hello-world
镜像来验证docker-ce是被正确的安装
$ sudo docker run hello-world
这个命令将会运行下载一个测试镜像,并运行在一个容器中,当容器运行时将会打印一个信息消息并退出
使用script进行安装
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
如果你想要使用 非root
用户应用docker,你应该考虑添加一个用户到某一个用户组中,如下
sudo usermod -aG docker tennyson
卸载Docker Engine - Conmmunity
1. 卸载docker包
$ sudo yum remove docker-ce
2. 删除镜像,容器和卷
镜像,容器,卷和自定义的配置文件都在你的主机上不会自动移除,所以要手动进行全部删除
$ sudo rm -rf /var/lib/docker
参考资料: