一.介绍

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

  • docker与虚拟机的区别
    主要区别如下:

1、启动速度

启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢;

而启动 Docker 相当于启动宿主操作系统上的一个进程。

2、占用资源

虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU 资源,一台机器只能开启几十个的虚拟机。而 Docker 只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。

3、隔离性

与虚拟机相比,docker隔离性更弱,docker属于进程之间的隔离,虚拟机可实现系统级别隔离。

4、安全性

docker的安全性也更弱。Docker的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击

  • 优势

除了启动速度快以及占用资源少之外,Docker 具有以下优势:

1、更容易迁移

提供一致性的运行环境。已经打包好的应用可以在不同的机器上进行迁移,而不用担心环境变化导致无法运行。

2、更容易维护

使用分层技术和镜像,使得应用可以更容易复用重复的部分。复用程度越高,维护工作也越容易。

3、更容易扩展

可以使用基础镜像进一步扩展得到新的镜像,并且官方和开源社区提供了大量的镜像,通过扩展这些镜像可以非常容易得到我们想要的镜像。

  • 使用场景

1、持续集成

持续集成指的是频繁地将代码集成到主干上,这样能够更快地发现错误。

Docker 具有轻量级以及隔离性的特点,在将代码集成到一个 Docker 中不会对其它 Docker 产生影响。

2、提供可伸缩的云服务

根据应用的负载情况,可以很容易地增加或者减少 Docker。

3、搭建微服务架构

Docker 轻量级的特点使得它很适合用于部署、维护、组合微服务。

  • 镜像与容器

镜像是一种静态的结构,可以看成面向对象里面的类,而容器是镜像的一个实例。

镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,每一层都是只读的(read-only layers)。构建镜像时,会一层一层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制。

构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。

二.安装

Docker支持64位版本的CentOS 7和CentOS 8及更高版本,它要求Linux内核版本不低于3.10。

#检查内核版本
$ uname -r

docker与shell脚本的区别 docker vs_docker与shell脚本的区别

Docker的自动化安装

# 官方的一键安装方式:
$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 国内 daocloud一键安装命令:
$ curl -sSL https://get.daocloud.io/docker | sh

启动docker

# 启动docker
$ systemctl start docker
# 查看docker运行状态
$ systemctl status docker

docker与shell脚本的区别 docker vs_docker与shell脚本的区别_02

docker安装完成

三.卸载

停止docker

# 查看docker运行状态
$ systemctl status docker
# 停止docker服务
$ systemctl stop docker

docker与shell脚本的区别 docker vs_容器_03

查看yum安装的docker文件包

$ yum list installed |grep docker

docker与shell脚本的区别 docker vs_docker与shell脚本的区别_04

查看docker相关的rpm源文件

$ rpm -qa |grep docker

docker与shell脚本的区别 docker vs_.net_05

删除所有安装的docker文件包

$ yum -y remove docker-ce.x86_64
$ yum -y remove docker-ce-cli.x86_64

docker与shell脚本的区别 docker vs_.net_06


docker与shell脚本的区别 docker vs_docker_07

删除docker的镜像文件,默认在/var/lib/docker目录下

$ cd /var/lib/docker
$ rm -rf /var/lib/docker

docker与shell脚本的区别 docker vs_docker与shell脚本的区别_08

卸载完成

四.docker常用命令

镜像操作

# 查看所有镜像
$ docker images
# 构建镜像
# test.api(镜像名称) 1.0(镜像版本) .(当前DockerFile目录)
$ docker build -t test.api:1.0 .
# 删除镜像(删除前需先删除依赖容器)
$ docker image rm 镜像ID

容器操作

# 启动容器
$ docker start 
# 重启容器
$ docker restart 容器ID
# 查看正在运行的容器
$ docker ps
# 查看所有的容器
$ docker ps -a
# 停止容器
$ docker stop 容器ID
# 删除容器(删除前需停止)
$ docker rm 容器ID
五.部署dotnet core项目

新建一个Web API项目,添加DockerFile文件

  • 源码构建镜像DockerFile
  • 发布文件构建镜像Dockerile

构建镜像

  • 发布文件构建镜像

将Dockerfile设置为始终复制到输出目录

docker与shell脚本的区别 docker vs_容器_09

发布项目,上传到Linux服务器

docker与shell脚本的区别 docker vs_容器_10

构建镜像。第一次比较慢,需要去下载依赖包。

$ docker build -t test.api .
# -t 镜像名 或 -t 镜像名:版本号

docker与shell脚本的区别 docker vs_.net_11

  • 源码构建镜像

将源码拷贝到Linux服务器

$ docker build -t test.api2 -f ./Test.API/Dockerfile .
# -t 镜像名 或 -t 镜像名:版本号
# -f 指定Dockerfile所在目录

docker与shell脚本的区别 docker vs_.net_12


docker与shell脚本的区别 docker vs_docker_13

生成容器

$ docker run -d -p 3312:80 -v /var/tmp/pubsh:/app --name test-service test.api
# -d 后台运行
# -p 指定端口号 宿主机端口号:容器端口号(与Dockerfile设置对应)
# -v 将运行文件挂在到宿主机(宿主机目录:容器目录)
# --name 容器名称
# test.api 镜像名称

docker与shell脚本的区别 docker vs_docker_14


docker与shell脚本的区别 docker vs_docker与shell脚本的区别_15

部署完成