什么是 Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
为什么要使用 Docker Docker 的图标是一个 ,上面放了很多箱子。通过 Docker 的图标和中文,我们可以基本了解 Docker 的含义。 Docker 是一种引擎,基于这个引擎,开发者能让他们开发的应用处于一个有隔离性的、可移植性的容器中,以便于发布于各种机器中而无需考虑兼容性问题。开发者可以使用 Docker 搭建一个测试环境,在每次测试时,只要运行 Docker 镜像就可以有一个已经搭建完毕并且干净的测试环境,减少人力资本。
Docker 也可以用于自动化测试,在 RT-Thread-Studio 的 sdk-index 仓库,就是基于 Docker 构建的自动化测试。
使用流程 这里介绍一下在 linux 环境下 docker 的使用流程。
安装 Docker 打开 linux 终端,输入命令 sudo apt install docker.io 安装 docker。 安装成功后,输入命令 docker --help 验证安装成功:
Docker 镜像的使用
拉取镜像 使用命令 sudo docker pull name:tag 拉取 docker 镜像,没有输入 tag,默认拉取 latest 版本,如果你的 docker 镜像没有 latest 版本,就会报错哦:
查看镜像 使用命令 docker images 来列出本地主机上的镜像:
容器与镜像 Docker 容器与镜像是什么关系? 简单来说,Docker 镜像是一个类,容器是镜像的实例化对象;通过镜像,可以创建无数个容器。Docker 的生命周期是由镜像(image),容器(container),仓库(repository)三部分组成。
启动容器 输入命令 docker run 来启动容器,如果本地没有该镜像,docker 会自动去 dockerhub 拉取镜像仓库:
删除容器 删除所有容器
删除镜像 该镜像没有启动的容器才可以被删除。 删除所有镜像
制作镜像
创建镜像仓库 如同 Github 操作一样,我们需要先创建一个 docker 镜像仓库,才能向该仓库推送代码; 打开 dockerhub 网站,注册一个账号: 创建镜像仓库:
构建镜像 通过上面的步骤,我们创建了一个镜像仓库;这一步,我们要构建一个镜像,镜像中会有我们需要的环境。
Dockerfile 的使用 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。示例:
上面是一个安装好 arm-gcc 工具链的 docker 镜像。我们来了解一下 FROM 与 RUN 指令的含义。Dockerfile 还有其他很多的指令,请在 Docker 查看指令的用法。
FROM FROM 指令初始化一个新的构建阶段,并为后续指令设置基本镜像。因此,一个有效的Dockerfile 必须以 FROM 指令开始。映像可以是任何有效的镜像—从公共存储库中提取镜像开始尤其容易。 在这里,我们以 python:3.6-slim-buster 为基础镜像。
RUN RUN 指令将在当前图像之上的新层中执行任何命令。 在这里,我们使用 RUN 指令拉取了 arm-gcc 工具链。
推送镜像 在本地推送镜像的方式不再介绍,在这里,我们使用 CI 的方式自动化完成 Docker 镜像的构建以及推送。
搭建 CI 创建 github 仓库,拉取到本地; 将刚才的 Dockerfile 文件放在 github 仓库; 构建 CI 流程;Docker 的账号,密码以及 tags,都通过加密环境变量的方式保存在 github 仓库。Ci 示例:
DOCKERHUB_USERNAME:dockerhub 的用户名 DOCKERHUB_PASSWORD:dockerhub 的密码 DOCKERHUB_REPO:仓库名和 tag;例如: DOCKERHUB_REPO :realthread/utest:v1.0
设置环境变量 推送代码到 Github: 查看 Ci 日志;arm-gcc 的 版本号打印出来了,说明我们的 dockerfile 文件是没有问题的,等待镜像推送完成: CI 构建完成后,打开我们的 dockerhub 仓库,发现一个新的 tag 已经被推送成功:
验证镜像
登录 在本地 ubuntu 打开终端,输入命令 docker login 登录 docker:
拉取镜像 输入命令 docker pull 拉取我们刚才创建的镜像:
启动容器 输入命令 docker run 启动容器; 查看 arm-gcc 版本:
可以看到,我们已经成功的构建了一个 Docker 镜像,这个镜像里面有 python3.6 还有 arm-gcc 工具链。
原作者:Papalymo
|