2.Docker安装
v认识Docker
Docker自2013年以来非常火热,无论是从 github上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。
1.0 Docker 架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

图片来源于网络,侵删。
|
Docker 镜像(Images) |
Docker 镜像是用于创建 Docker 容器的模板。 |
|
Docker 容器(Container) |
容器是独立运行的一个或一组应用。 |
|
Docker 客户端(Client) |
Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
|
Docker 主机(Host) |
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
|
Docker 仓库(Registry) |
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 |
|
Docker Machine |
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
1.1 Docker 特性
由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。
- 构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为copy on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
- PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础
- 因为其标准化构建方法(buildfile)和良好的REST API,自动化测试和持续集成/部署能够很好的集成进来
- 因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源
1.2 Docker 应用场景
- Automating the packaging and deployment of applications(使应用的打包与部署自动化)
- Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
- Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
- Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)
1.3 Docker到底是什么?
来举个简单的例子。docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后一个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。
v安装Docker
2.0 版本检测
正如上文所说,Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本

2.1 安装docker
官网:Install Docker Engine on CentOS | Docker Documentation
1.确定是CentOS7及以上版本
2.卸载旧版本
3.yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
4.安装需要的软件包
yum install -y yum-utils
5.设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.更新yum软件包索引
yum makecache fast
7.安装Docker CE
yum install docker-ce docker-ce-cli containerd.io
8.启动Docker
systemctl start docker
9.测试
docker version
docker run hello-world
卸载Docker
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
配置镜像加速器
进入阿里云官网查看自己的镜像加速器:https://p453w1e6.mirror.aliyuncs.com

mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://p453w1e6.mirror.aliyuncs.com"] } EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.5 设置docker开机自动启动
systemctl enable docker

docker已经成功启动,至此,docker已经安装完毕。
v探索Hello World
3.0 docker hello world
可以使用docker run 命令来在容器内运行一个应用程序,比如输出Hello World。
docker run centos /bin/echo "Hello World"

参数解析:
docker: Docker 的二进制执行文件。run:与前面的 docker 组合来运行一个容器。centos:指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 centos 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world" ,然后输出结果。
3.1 运行交互式的容器
我们通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力 docker run -i -t centos /bin/bash
参数解析:
-t:在新容器内指定一个伪终端或终端。-i:允许你对容器内的标准输入 (STDIN) 进行交互。
此时我们已进入一个centos系统的容器.我们尝试在容器中运行命令cat /proc/version和 ls 分别查看当前系统的版本信息和当前目录下的文件列表

我们可以通过运行exit命令或者使用CTRL+D来退出容器。
3.2 启动容器(后台模式)
使用 docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done" 命令创建一个以进程方式运行的容器

a2274d84c6e8025623a17d1262f1a65dfaa9ce982de94d2301f4c0fff049ed7e 这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。
我们需要确认容器有在运行,可以通过 docker ps 来查看

CONTAINER ID :容器ID; NAMES :自动分配的容器名称
在容器内使用docker logs命令,查看容器内的标准输出 docker logs a2274d84c6e8

3.3 停止容器
我们使用 docker stop命令来停止容器

至此,docker hello world就完毕了。

浙公网安备 33010602011771号