Docker的基础使用


近些年虚拟化技术比较火热,通过逛各种论坛发现在制作家用NAS的时候往往会接触到一部分,但是并没有学习过相关的技术,因此在这里总结一下。

Docker的简介

Docker是容器虚拟化技术的代表。通过容器技术可以在相同硬件条件下运行更多的服务,而且可以更方便地打包和发布程序,方便移植,可以做到一次部署多机互用。并且使用Docker的时候往往比直接在系统中应用时花费的内存、cpu以及硬盘的资源会更少,成本更低。

核心概念

Docker的核心概念有三个,分别为:镜像、容器、仓库

镜像

> 类似于虚拟机的镜像,本身是只读的,但只有Docker引擎才可以进行读取。在使用的时候通过在镜像最上层创建一个可写层,实现对镜像的部署以及操作等等,并且不会修改镜像本身的内容。

容器

> Docker使用容器运行和隔离应用。容器时基于镜像创建的应用实例,而每个容器可以看为一个轻量级的应用沙箱,各个容器之间是相互隔离互不可见的。

仓库

> 仓库是用于存储镜像的场所。根据存储的镜像公开与否,分为公开仓库和私有仓库。最大的公开仓库是**Docker Hub**,如果不想公开镜像文件的化,可以在本地网络内创建私有仓库。

特点

以宿主机操作系统内核中的特性为支撑完成虚拟化。(利用操作系统中的namespace、Cgroups等功能,对系统的部分空间进行隔离,并对系统的内存和CPU等资源进行分配、控制和记录。)而在迁移服务器时,可以利用容器对应用进行打包,大大降低了部署过程中的风险。

与传统虚拟机的区别

Docker是一种轻量级的容器虚拟化技术,可以与虚拟机一样实现对系统资源和环境的隔离,但是在技术架构与运行上存在差异。

架构差异

docker容器 window mysql Docker容器技术与应用_版本号

根据上图可知,传统虚拟机在运行时除了运行我们所需要的应用,还需要从底层虚拟出一个新的计算机并加载相应的操作系统,无形之间就占用了相当大的资源。

运行差异

在运行方面存在的差异主要分为以下几方面:启动速度、资源使用、内存代价、运行密度、性能、隔离性、迁移性。

这些差异的源头在于架构差异。主要是因为传统虚拟机在使用时的资源消耗过大。

Docker使用

个人用户在日常使用中往往是通过两步:

  1. 镜像
  2. 容器

而docker的命令格式如下:docker [OPTIONS] COMMAND

其中选项为

docker容器 window mysql Docker容器技术与应用_版本号_02

管理命令为:

docker容器 window mysql Docker容器技术与应用_docker_03

常规命令为:

docker容器 window mysql Docker容器技术与应用_版本号_04

镜像相关(image)

搜索

使用 search 命令,其格式为 docker search [名称,例如busybox,Ubuntu等]

下载

使用 pull 命令,格式为 docker pull [名称]:[版本号]

版本号可不填,默认为latest

查看

使用 images 命令,格式为 docker images

通过这条命令可以查看相关的镜像信息

运行

使用 run 命令,格式为 docker run [镜像名]/[–参数] [内容]

注:一般在使用时会在这一步分配相关的属性例如:重启 --restart 参数、分配网络参数 --network 参数、还有声音、内存等等具体相关命令可以通过docker run --help进行查看

创建镜像

创建镜像有三种方式:

分别为 基于本地模板导入镜像、基于已有镜像的容器创建镜像、基于Dockerfile创建镜像

这里主要介绍第二种

使用 commit 命令,格式为 docker commit 参数 容器 镜像名

保存

使用 save 命令,格式为 docker save -o 目标名称 镜像:版本号

这个命令会将保存的镜像保存在目前所在的文件目录下

加载

使用 load 命令,格式为 docker load --input 指定导入镜像的文件名

可以使用 < 代替 --input

删除

使用 rmi 命令,格式为 docker rmi 镜像名

可以删除指定版本,其格式为 docker rmi 镜像名:版本号

在删除镜像时需要将相关容器停止运行

容器相关(container)

新建并启动容器

有两种方式分别介绍

第一种:使用 run 命令直接创建容器并运行

第二种: 使用 create 命令创建容器,再通过 start 命令运行

查看容器

使用 ps 命令查看容器状态

停止容器

使用 stop 命令停止容器

重启容器

使用 restart 命令重启容器

进入容器

使用 exec 或者 attach 命令进入容器,并执行相应操作

注:如果不加参数的话会在退出容器时,使容器变为停止状态

使用 docker exec -ti 容器名 /bin/bash 时,退出不会停止容器的运行。

导入导出容器

导出:使用 export 命令,可以导出容器

其格式为:docker export 容器名>目标名称

导入:使用 import 命令,可以导入上面导出的镜像

其格式为:docker import 文件名称 目标镜像名称

删除容器

使用 rm 命令,具体用法与删除镜像用法相似。


在日常的使用中,容器往往是独立运行的,因此我们还需要注意相关的端口映射、容器之间相互连接的配置以及Docker的网络配置

端口映射以及容器相互连接的配置都在执行run命令时配置,相关的参数分别为**–publish list以及–link list**