10. 基于Docker的功能拓展

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中, 然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口,并且性能开销极低。

我们可以使用Docker对DoorNet方便且简单的进行功能拓展。

10.1. portainer

为了方便大家操作,我们安装一个基于WEB的Docker管理工具。虽然基于Luci的Dcoker管理工具已经很优秀了, 但是他的功能还是有一定的局限性,这里我们推荐使用portainer来对Docker进行管理。 同时portainer本身就是就是一个Docker镜像,通过portainer的安装过程,来体验如何安装我们的第一个Docker镜像。

10.1.1. portainer安装

打开终端,输入以下命令,拉取镜像并启动容器。

1
2
3
4
5
#拉取Docker镜像
docker pull portainer/portainer-ce:linux-arm64

#运行Docker容器
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data  --name portainer portainer/portainer-ce:linux-arm64
docker-install

在以上操作完成之后,打开 Docker -> 容器,查看portainer是否成功启动并运行。

docker-run

如果正常运行,我们打开 http://192.168.1.1:9000 进入portainer。

10.1.2. 创建管理用户

首先我们要给portainer创建一个管理用户,设置好用户名和密码之后,我们点击 Create user 创建用户。

提示

太简单的密码会导致用户创建失败

portainer

创建管理账户之后,我们选择连接到Docker容器,就能进入到portainer的主界面了。

connect-docker

在portainer的主界面,显示了已经连接的机器的基本参数,使用portainer可以进行Docker集群的管理, 这里只有local一个,我们可以点开查看详情。

portainer-local

10.1.3. 基础操作

在local的详细页面中,可以查看已经拉取的镜像,创建的容器,以及存储映射和网络等。 这里我们简单的演示一下镜像的拉取及运行,更详细的使用方法请查看 https://www.portainer.io

portainer-base

这里以Ubuntu系统的Docker镜像为例。

10.1.3.1. 获取镜像

Docker镜像可以自己使用Dockerfile构建或在镜像托管仓库找到。

这里我们在Docker镜像托管网站 https://hub.docker.com 得到Ubuntu的Docker镜像。

访问dockerhub之后,我们在页面顶部搜索栏输入Ubuntu,找到官方仓库。

ubuntu

点击Tags,查看不同的版本标签来选择。我们使用的操作系统的Linux,处理器架构为arm64,要选择对应版本。

我们拉取最新的镜像,也就是TAG标签为latest。可以看到这个镜像支持Linux和arm64/v8架构。

ubuntu-arch

10.1.3.2. 拉取镜像

返回portainer,打开image条目,在image一栏输入我们要拉取的镜像及其标签, 点击 Pull the Image 开始拉取镜像。

ubuntu-latest

镜像拉取完成后会在下面的 Images 中出现拉取的镜像。

docker-pull

10.1.3.3. 创建容器

我们来到Container条目,开始创建一个新的容器。

docker-pull

点击 Add container ,输入创建容器的相关参数。

  • Name:容器创建后显示的名称

  • Image:创建容器所用的镜像

  • Always pull the image:每次创建容器时都会拉取镜像,保证镜像处于最新版本。

  • Network ports configuration:网络端口转发,这里不需要所以未设置。

  • Access control:访问控制,创建的容器只允许特定的用户或用户组访问。

docekr-run-base

高级设置部分,可详细设置启动容器执行的命令,磁盘映射,网络等高级设置, 这里我们只设置:

  • Console:Interactive&TTY 使用交互式终端

docker-run-advanced
  • Network:网络使用host模式,与宿主机共享网络。

docker-run-advanced-network

然后点击 Deploy the contalner 创建容器。创建成功之后会自动跳转到 Container list

Containerlist

10.1.3.4. 交互

如何证明我们运行Ubuntu的容器正常运行呢?我们使用交互式终端进入Ubuntu系统, 使用一些命令来对Ubuntu进行操作。

点击 >_ 按钮进行设置。

Containerlist-console

默认设置即可,我们点击Connect进入终端。

Container-consolepage

我们尝试给Ubuntu安装软件,可以看到不管是更新软件包列表还是安装软件,都是没有问题的。

apt-update apt-install

10.1.3.5. 删除容器

当我们不再使用创建的Docker镜像时,为了不占用资源,就会选择删除。

具体的操作是:

  • 选中要删除的容器。

  • 点击 Remove 按钮。

  • 弹出的确认界面选择Remove。

docker-rm

10.1.3.6. 删除镜像

当镜像的版本发生了更新或者不再有容器使用这个个镜像时,为了释放存储空间,会选择删除这个镜像。

具体的操作是:

  • 打开 Image list 页面。

  • 选中要删除的镜像。

  • 点击 Remove 按钮。

docker-rmi