Docker的基础使用
近些年虚拟化技术比较火热,通过逛各种论坛发现在制作家用NAS的时候往往会接触到一部分,但是并没有学习过相关的技术,因此在这里总结一下。
Docker的简介
Docker是容器虚拟化技术的代表。通过容器技术可以在相同硬件条件下运行更多的服务,而且可以更方便地打包和发布程序,方便移植,可以做到一次部署多机互用。并且使用Docker的时候往往比直接在系统中应用时花费的内存、cpu以及硬盘的资源会更少,成本更低。
核心概念
Docker的核心概念有三个,分别为:镜像、容器、仓库
镜像
> 类似于虚拟机的镜像,本身是只读的,但只有Docker引擎才可以进行读取。在使用的时候通过在镜像最上层创建一个可写层,实现对镜像的部署以及操作等等,并且不会修改镜像本身的内容。
容器
> Docker使用容器运行和隔离应用。容器时基于镜像创建的应用实例,而每个容器可以看为一个轻量级的应用沙箱,各个容器之间是相互隔离互不可见的。
仓库
> 仓库是用于存储镜像的场所。根据存储的镜像公开与否,分为公开仓库和私有仓库。最大的公开仓库是**Docker Hub**,如果不想公开镜像文件的化,可以在本地网络内创建私有仓库。
特点
以宿主机操作系统内核中的特性为支撑完成虚拟化。(利用操作系统中的namespace、Cgroups等功能,对系统的部分空间进行隔离,并对系统的内存和CPU等资源进行分配、控制和记录。)而在迁移服务器时,可以利用容器对应用进行打包,大大降低了部署过程中的风险。
与传统虚拟机的区别
Docker是一种轻量级的容器虚拟化技术,可以与虚拟机一样实现对系统资源和环境的隔离,但是在技术架构与运行上存在差异。
架构差异
根据上图可知,传统虚拟机在运行时除了运行我们所需要的应用,还需要从底层虚拟出一个新的计算机并加载相应的操作系统,无形之间就占用了相当大的资源。
运行差异
在运行方面存在的差异主要分为以下几方面:启动速度、资源使用、内存代价、运行密度、性能、隔离性、迁移性。
这些差异的源头在于架构差异。主要是因为传统虚拟机在使用时的资源消耗过大。
Docker使用
个人用户在日常使用中往往是通过两步:
- 镜像
- 容器
而docker的命令格式如下:docker [OPTIONS] COMMAND
其中选项为
管理命令为:
常规命令为:
镜像相关(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**