内容简介:Linux服务器安装docker实践
背景:Linux服务器centos8.1
我们前几篇文章,已经介绍了如何搭建springboot应用,如何采用mybatis、druid等框架实现与数据库的交互,那么接下来我们就要试试怎么将应用部署到服务器上呢?
这里呢,我们就要提下docker了,现在很火的容器引擎。我们将把应用部署到docker上。首先介绍下docker的一些基本的理论,其更深的理论只是咱们就不在这里介绍,内容过于庞大,不是一篇两篇文章能讲完的,如果感兴趣可以去docker的官网多看看。官网链接见文章最后的参考资料。
show time.....

一、理论
1.docker是什么?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。

2.Docker vs VM
VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。

3.Docker 和 VM区别对比
1.速度:docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。
2.资源:docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。
3.内存占有:docker更轻量,docker的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker运行的镜像数远多于虚拟机数量。对系统的利用率非常高
4.隔离性:docker隔离性更弱,docker属于进程之间的隔离,虚拟机可实现系统级别隔离;
5.安全性: docker的安全性也更弱。Docker的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击。
6.可管理性:docker的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如VMware vCenter提供完备的虚拟机管理能力。
7.高可用和可恢复性:docker对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制,VMware可承诺虚拟机99.999%高可用,保证业务连续性。
8.快速创建、删除:虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。
9.交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化;Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署;
4.基本概念
1.镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
2.容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
3.Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
4.Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
5.Docker Registry:Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
二、实践
(一)容器的安装
这篇文章我们讲讲在阿里云服务器上怎么安装docker。
首先我们需要购买一台阿里云服务器,我买的是ECS服务器。

通过ssh登录到服务器,
1-检查是否已安装,卸载原有Docker
yum list installed | grep docker

2.删除安装的软件包
yum -y remove docker-ce.x86_64
3.查看内核版本 <Docker 要求 CentOS 系统的内核版本高于 3.10>
uname -r

4.把yum包更新到最新
sudo yum update (可直接跳到步骤7)
5.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
6设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
7.查看仓库中docker版本
yum list docker-ce --showduplicates | sort -r

8. 安装docker
sudo yum install docker-ce

等待安装完成

9.启动Docker,设置开机启动,停止Docker
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl stop docker
10.查看版本
docker version

11.查看日志状态成功日志
systemctl status docker.service ( 按q退出)

(二)容器的使用
1.获取镜像
如果我们本地没有 镜像,我们可以使用 docker pull 命令来载入镜像,如ubuntu镜像:
docker pull ubuntu
2.启动容器
使用 docker run 命令,通过docker run --help 查看具体的参数

3.启动已停止运行的容器
查看所有的容器命令: docker ps -a
使用 docker start 启动一个已停止的容器: docker start <容器ID>
4.停止运行的容器
停止容器的命令如下:docker stop <容器 ID>
5.导出和导入容器
如果要导出本地某个容器,可以使用 docker export 命令: docker export <容器ID> > ubuntu.tar
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1: cat docker/ubuntu.tar | docker import - test/ubuntu:v1
此外,也可以通过指定 URL 或者某个目录来导入,例如:docker import http://example.com/exampleimage.tgz example/imagerepo
6.删除容器
删除容器使用 docker rm 命令:docker rm -f <容器ID>
注意: 要删除docker部署的应用服务,就要先停止所有的container,这样才能够删除其中的images
(1)停止container
docker stop <容器ID> 停止所有是: docker stop $(docker ps -a -q)
(2)还要删除container
docker rm <容器ID> 删除所有是: docker rm $(docker ps -a -q)
(3)然后删除docker部署的应用
docker rmi <镜像ID>
(4)查看服务的ID号
docker images
(三)镜像的使用
1.列出本地主机上的镜像:docker images
2.获取一个新的镜像: docker pull 命令
3.查找镜像:
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。如查找ubuntu镜像:docker search ubuntu
4.删除镜像:docker rmi ubuntu
好了,关于docker的实践我们这期就讲到这里,下期我们就讲讲如何将springboot应用部署到docker上,see you....
参考资料
https://www.docker.com官方文档(最重要)
https://www.runoob.com/docker/docker-tutorial.html
https://blog.csdn.net/qq_41376740/article/details/98526896