Docker 基础

119 阅读4分钟

简介

Docker 使用 Google 公司推出的 Go语言 实现的,基于 Linux 内核的cgroup、 namesapce等技术对进程进行封装隔离,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等,极大的简化了容器的创建和维护。使得 Docker 比虚拟机更为方便快捷。

基本概念

镜像(image)

镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。因此,在构建镜像的时候,我们要尽量减少重复构建镜像层。

容器(container)

容器 是用镜像创建的实例,可以被启动、开始、停止、删除。容器之间相互隔离。可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、网络空间等)和运行在其中的应用程序。

容器与镜像的关系类似于面向对象编程中的类和对象,镜像好比是类,容器则是对象。

仓库(repository)

仓库就是存放镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来使用。
Docker 官方提供了 Docker Hub 仓库,提供了大量的基础镜像,方便我们下载使用。

使用镜像

我们使用 docker pull 来获取远端镜像, docker pull --help来查看具体获取方式
下面我们以获取 nginx 为例子讲解

获取镜像

docker pull nginx

执行成功后控制台输出如下

Using default tag: latest
latest: Pulling from library/nginx
e9995326b091: Pull complete
71689475aec2: Pull complete
f88a23025338: Pull complete
0df440342e26: Pull complete
eef26ceb3309: Pull complete
8e3ed6a9e43a: Pull complete
Digest: sha256:47a8d86548c232e44625d813b45fd92e81d07c639092cd1f9a49d98e1fb5f737
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

默认下载的是 latest 版本,在下载日志中我们可以看到,镜像的分层存储概念,每一层都有自己的ID,下载也是一层一层去下载的。

查看镜像

下载成功后执行 docker image ls 可以看到 nginx 镜像的具体信息:

REPOSITORY                                 TAG       IMAGE ID       CREATED         SIZE
nginx                                      latest    76c69feac34e   39 hours ago    142MB

删除镜像

使用 docker image rm <镜像Id>/<仓库名>:<标签> 来删除镜像,我们来删除上面下载的 nginx 镜像

docker image rm 76c69feac34e

批量删除使用,docker image rm 搭配 docker image ls 使用,我们来批量删除下所有 nginx 镜像

docker image rm $(docker image ls -q nginx)

制作镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像。这个脚本就是 Dockerfile

下面我们通过Dockerfile定制一个 nginx 镜像。

touch Dockerfile

Dockerfile 内容为

FROM nginx
RUN echo '<h1>Hello World</h1>' > /usr/share/nginx/html/index.html

其中FROM是继承基础镜像,RUN 是执行命令行命令。我们这里给页面中输出Hello World

接下来就是构建镜像,让他能够跑起来,在 Dockerfile 所在目录执行

docker build -t nginx:v1.0.0 

操作容器

启动容器

使用 docker run [OPTIONS] IMAGE 命令启动容器,例如启动上面的 nginx 容器

docker run nginx:v1.0.0 

终止容器

使用 docker container stop [OPTIONS] CONTAINER [CONTAINER...] 来终止容器

首先要看下容器的ID

docker container ls

这里我们默认容器ID前4位是6fa6

我们使用ID终止上面的nginx容器

docker container stop 6fa6

进入容器

使用 docker exec [OPTIONS] CONTAINER 命令来进入容器,例如进入上面的 nginx 容器

docker exec -it 6fa6 bash

其中的-i -t,是打开 Linux 命令提示符的

导出容器

我们使用 docker export [OPTIONS] CONTAINER 导出容器,例如导出上面的 nginx 容器

docker export 6fa6 > nginx.tar

参考资料

Docker 从入门到实践