概念
Docker是什么
Docker 类似于轻量的虚拟机,但与虚拟机模拟出一个完整操作系统不同,Docker 主要关注点是提供应用运行所需的最小环境。两者的结构区别如下:
虚拟机:
即虚拟机控制器在宿主机操作系统上虚拟出一套硬件并在其上建立完整的 Guest OS以及一些依赖库。如果你只想在一个独立环境中运行一个程序,用虚拟机的代价比较高。
Docker:
Docker 的结构中没有 Guest OS 一层,仅提供软件运行的必需库,磁盘占用比虚拟机少,新建速度也快。
Docker没有Guest OS却能提供类似虚拟机的独立且不同的运行环境,主要有两方面原因:1. 共享宿主机Linux kernel( Windows 和 macOS 环境的 Docker 使用虚拟机的方式运行 Linux kernel);2. 使用 Linux kernel 提供的几种隔离机制。具体细节本文不讨论,有兴趣的可以查阅相关资料。
Docker 基本概念
容器 container
在 docker 中运行的独立环境。
镜像 image
容器运行所需的文件实体,里面包含了程序,库,配置等内容。
仓库 Registry
统一放镜像的地方。默认使用官方提供的仓库。
使用
安装
直接根据官方教程安装即可。
运行
终端下输入:
docker
会显示docker的简要帮助。运行容器的命令为docker run
,尝试运行ubuntu容器下的ps -ef
命令:
1 | >>docker run ubuntu ps -ef |
运行容器需要先指定镜像,此处ubuntu
就是我们指定的镜像名,由于本地没有这个镜像,docker 默认从官方源下载了lastest版本的ubuntu
镜像。下载完成后直接执行后面的ps -ef
命令。
可以通过docker images
命令查看本地已有的镜像。
要单独安装镜像可使用以下命令:
docker pull ubuntu
如果想进入容器中的交互环境可以加上 -it 参数:
docker run -it ubuntu bash
定制镜像
前面安装的都是官方镜像,且容器运行结束后就会自动删除,不会保留修改。如果要将当前容器中的修改保存到镜像中可以通过docker commit
命令,但这种方式可能会附带很多垃圾文件,一般用Dockerfile
定制镜像。Dockerfile
是一个脚本文件,里面记录了你需要在基础镜像上做的修改操作。
此处直接使用参考资料中的示例,构建一个带redis
的debian
镜像。新建一个目录debianredis
,里面新增文件Dockerfile
:
1 | FROM debian:jessie |
其中FROM
指定了基础镜像,RUN
表明需运行的命令。RUN
中使用&&
符号连接多条bash
命令是为了减少构建层,多条rm
命令则是清理垃圾文件以减少镜像体积。
用以下命令构建镜像:
docker build -t debianredis .
docker
会直接使用指定环境(此处为. 即当前目录)下的Dockerfile
构建镜像。
以下命令可以将镜像打包为tar方便传输:
docker save debianredis | gzip > debianredis-latest.tar.gz
将打包好的tar文件传输到其他机器,再使用以下命令载入:
docker load -i debianredis
即可看到刚刚构建的镜像。
参考资料: