Docker极速上手使用教程

本文的目的在于让非专业普通家庭用户快速学会使用docker,轻松搭建家庭NAS所需的各种应用

Docker的图标是一头装满集装箱的鲸鱼在大海遨游

我们可以从docker的图标来理解docker究竟是什么。大海指的就是我们的电脑,叫做宿主主机。大海里面有各式各样的鱼,代指各种应用程序,而这条大鲸鱼就是其中的一个程序——docker。鲸鱼背上的集装箱就是docker容器。

作为普通家庭用户,把docker理解成为一个极其轻量的虚拟机即可。和直接在系统上运行的原生程序相比,docker损失的性能十分微小,对于docker带来的各种便利,这点损失微不足道。

由于各种NAS系统的docker管理界面都不一样,所以本文会用命令行来演示。如果你搞懂命令行各个选项的意义之后,再使用图形界面是轻而易举。新手一般看到命令行会比较畏惧,但是当你熟悉命令之后,再加上finalshell这种ssh工具的加成,效率真的会比使用图形界面还要来得高。下面以linuxserver/qbittorrent这个镜像作为例子。

由于默认的镜像(image)源地址在国外,要把动辄几百MB的镜像文件pull下来,几十上百K的下载速度简直要命了。 所以使用docker的第一件事情就是更改镜像源地址。在尝试过中科大、网易N多的源地址之后 我发现最快的是微软爸爸的地址 即使是冷门刚发布的镜像,下载速度也能维持1M+/s。至于怎么修改镜像源地址,自行根据自己系统搜索吧。

微软镜像地址 http://dockerhub.azk8s.cn

docker存储镜像的仓库叫做docker hub,我们可以在docker hub上面寻找需要的镜像,这些镜像的页面一般都包含了简单的使用说明。

docker hub地址 https://hub.docker.com/

dockerhub界面

我们也可以在命令行上查找镜像,使用命令docker search查找镜像

命令行的搜索结果按星标排序,比网页更加直观好用

在dockerhub直接搜索镜像名查看使用说明

镜像使用说明

在获取镜像之前,要查看该镜像是否包含你设备的架构。各种矿渣盒子的架构是arm64、armv8,而英特尔J1900、J3455就是x86-64

留意镜像是否支持你的设备

直接页面复制右上角的docker pull 命令,就可以把符合你设备架构的镜像从仓库pull(拉)到本地

没有特别标明tag,docker pull会默认获取tag为latest(最新)的镜像

 

要使用特定的版本可在tag页面下寻找,再复制右上角命令即可

docker images 命令可以查看本地的已经获取的镜像信息,删除镜像用的是docker rmi 镜像名

镜像的名字、tag(版本)、id创建时间,大小等信息

镜像的介绍页面一般都会有这么一长串的运行命令,先不要慌

了解每个选项的用途之后,看懂它十分的简单。docker create 命令是用来创建容器container)。我们之前下载的是镜像(image)。镜像生成容器,容器才是我们真正使用的程序。删除镜像的命令是docker rm 容器名,如果容器正在运行需要添加-f,即docker rm -f 容器名

--name 指定容器的名字,随便写,qbittorrent直接缩写成qb

-e(environment) 环境变量,设置一些参数,我设置了PUID为1000 GUID为100的用户li运行容器。同时还设置了时区、权限掩码,以及webui端口号。有些变量的参数是有默认值的,并不需要设置,例如这里的umask。具体看每个镜像的页面说明。

权限设置还是挺重要的,不明白PUID和GUID可以看我之前介绍Linux权限文章。

畅快玩转NAS 篇一:Linux权限简单讲解在上一篇文章中,我简单的介绍了一些常用的Linux命令。当你熟悉这些命令之后,对于非专业的普通家庭用户来说是足够折腾NAS了,你还可以去折腾VPS在使用NAS的过程中,搞懂Linux的权限对于使用NAS是比较关键的。权限设置不正确,会导致文件因缺少权限无法被访问删除,明明是按照之前的参数设置dockBlue_Kitty|46评论10收藏215查看详情

-p(ports)端口号, docker默认是以bridge网络模式运行的,-p选项完成了主机和容器的端口映射,前一个端口是宿主主机的端口,后一个是容器的端口,主机的端口可修改为你需要的端口,不要和现存的端口冲突即可。

-v(volumes) 数据卷,这是为了把容器所需要的数据保存到本机。即使容器被删除,数据也会保存下来。当你再生成新的容器时,依旧可以使用原来的数据。数据卷的设置和端口映射类似,前者为主机目录,后者为容器目录。这里的qbittorrent只写了一个downloads目录,如果要下载到其他目录的话,再添加数据卷即可,比如说-v /sharedfolders/movie:/movie,在qbtorrent的下载路径填写/movie,那么文件就会下载到/sharedfolders/movie。需要多少个下载目录,就添加多少个数据卷。

--restart 重启策略,unless-stopped当你手动停止容器后,下次开机该容器就不会自动启动,always总是自动启动。

 

创建名为qb容器

输入docker start qb就可以启动容器了,同理 docker stop 就是停止容器运行,docker restart则是重启容器

docker ps 显示正在运行的容器

用户li运行qbittorrent,权限设置正常

你会在其他镜像说明页面经常看见docker run命令。这个命令会直接创建并运行容器,如果本地没有对应的镜像,它会从docker hub下载该镜像,再创建容器。-d 是在后台运行容器。

之前说过docker可以看成是一个轻量的虚拟机。容器本身运行了一个精简版的linux,然后在这个基础之上再运行的qbittorrent。输入 docker exec -it qb bash 就进入了容器的系统。看下图红线部分,root后面主机名也变成了容器的id。

容器系统的目录结构

输入ls命令查看目录。对于了解Linux的人来说,这个目录结构再熟悉不过了。这正是Linux的根目录。除此之外还多了config、downloads、movie 这3个目录,这是在创建容器时添加的目录。所以在qb输入的下载目录是/downloads,而不是本机的目录/sharedfolders/downloads,qb容器并没有/sharedfolders/downloads这个目录。

切换到movie目录,新建一个叫做file的文件,这时在/sharedfolders/movie下也生成了一个fie文件

movie和/sharedfolders/movie其实是同一个目录

Alpine Linux是一个只有5MB的Linux系统,docker推荐它来当作基础镜像。linuxserver/qbittorrent这个镜像是基于ubuntu,和其他基于Alpine的镜像相比大不少。因此我们在寻找镜像的时候,偏向使用基于Alpine的镜像。这点也可以在镜像的页面找到。

荒野无灯的qb基于Alpine只有84MB,而linuxserver的qb足足300MB

我们再来看jellyfin官方的镜像说明

jellyfin

这是不是和上面qb的设置相似呢?-v是--volume的缩写,这里添加了3个数据卷。环境变量-e 设置PUID和PGID变成了--user ,这是因为有的镜像没有设置PUID和PGID,所以需要--user(缩写是-u) 来指定运行用户; --net=host 使用docker的host网络模式运行容器,这里就不需要设置端口映射了,docker会直接使用主机的端口,但要注意避免端口冲突。jellyfin的默认端口是8096。 --net=host 改成 -p 8096:8096也是一样可以运行的。

我们再看百度网盘下载工具的运行说明,它和qb的运行几乎一模一样,也是设置了环境变量、端口、数据卷这些参数。

当你看过这3个不同镜像的运行说明之后,会发现docker镜像的使用方法其实大同小异。几乎都是设置环境变量端口以及数据卷。也许你会问如果在群晖、qnap、unraid、omv这些系统又怎么设置呢?这些系统在命令行下的命令是一样的,这也是我推荐使用命令行的原因。你可以在张大妈上搜docker,那些教程在图形界面是不是也都是设置这几个参数呢

所以说搞懂原理之后可以做到触类旁通,图形界面下的设置也根本不在话下