Docker的使用

DOCKER

Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。使用docker可以快速搭建transmission(bt下载),nextcloud(网盘)等服务。

Docker+图形界面portainer

以下操作以debian系统为基础

安装Docker

官方参考文档

卸载旧版:

1
sudo apt-get remove docker docker-engine docker.io containerd runc

安装准备:

1
2
3
4
5
6
7
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release

添加GPD key:

1
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

安装docker:

1
2
3
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

利用image验证docker是否安装成功(非必要):

1
sudo docker run hello-world

卸载Docker

卸载Docker Engine, CLI, 和 Containerd packages

1
sudo apt-get purge docker-ce docker-ce-cli containerd.io

删除 all images, containers, 和 volumes

1
2
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

安装portainer

portainer官方文档

portainer在Docker中

1
2
3
4
5
6
7
docker pull portainer/portainer-ce #将安装包下到服务器中

#portainer部署
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

#端口9000是portainer界面的入口

至此已经安装好docker和portainer了,登录 http://(服务器ip):9000

设置账号密码后进入portainner,管理服务器上的docker

安装mariaDB+nextcloud

nextcloud是网盘,开发者来自德国,完全开源免费,有着不亚于百度盘的界面,还可以同步手机数据到网盘上。nextcloud需要配合数据库mariaDB来使用。

参考youtube视频

参考blog

安装mariaDB

进入portainer->Networks

添加自定义网络,取个名字不用设置参数直接创建

进入Stack

以下配置会同时在 Docker 中部署 MariaDB 和 Adminer 两个应用容器,在执行一键部署之前,在上一步已经创建好了手动创建一个名为 mynet(随便一个名字) 的桥接类型网络。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#请将配置中的 `ROOT_ACCESS_PASSWORD` 
#替换成要给 root 用户设置的密码。

---
version: "2"
services:
mariadb:
image: linuxserver/mariadb
container_name: mariadb
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=ROOT_ACCESS_PASSWORD
- TZ=Asia/Shanghai
volumes:
- mariadb_data:/config
networks:
- mynet
restart: unless-stopped

adminer:
image: adminer
container_name: adminer
environment:
- ADMINER_DEFAULT_SERVER=mariadb
ports:
- 8080:8080
networks:
- mynet
restart: unless-stopped

networks:
mynet:
external:
name: mynet

创建数据库

完成后进入http://(服务器ip):8080

输入:

  • 系统:MYSQL
  • 服务器:mariadb
  • 用户名:root
  • 密码:配置文件中 MYSQL_ROOT_PASSWORD 项的值

点击创建数据库

数据库名称nextcloud utf8mb4_general_ci 点击保存

注意事项

volume路径可以在服务器上创建新文件夹自己指定路径,否则docker自动分配路径

LinuxServer 维护的 Docker 镜像都有 PUIDPGID 这两个环境变量,他们主要用来设置挂载到容器中的存储的所有权。填0则表示是root,UID表示用户,GID表示用户组,可以在服务器中输入id查看当前用户的UID和所在用户组GID,输入id (用户名)可以查看特定用户的UID和GID

设置中端口,例如:

1
2
3
4
ports:
- 8080:8080
#前面的端口是外部访问通过的端口,端口被占用改前面端口
#后面的端口是进入容器需要通过的端口

安装NextCloud

进入Stack

添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
---
version: "2"
services:
nextcloud:
image: linuxserver/nextcloud
container_name: nextcloud
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /path/to/appdata:/config
- /path/to/data:/data
networks:
- mynet
ports:
- 443:443
restart: unless-stopped

networks:
mynet:
external:
name: mynet

配置nextcloud

完成后进入:http://(服务器ip):443 (444,详情看注意)

上面填入自定义用户名密码

下面配置数据库选MySQL/MariaDB

  • 数据库用户:root
  • 数据库密码:之前设置过的
  • 数据库名:nextcloud
  • 数据库主机:mariadb

点击安装完成

注意

443端口被占用则改前面的端口配置,如改成444

安装transmission

docker官方transmisson项目

进入portainer->Container->Add container

对照transmission项目添加参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- TRANSMISSION_WEB_HOME=/combustion-release/ #optional
- USER=username #optional
- PASS=password #optional
volumes:
- <path to data>:/config
- <path to downloads>:/downloads

#其中
#/downloads是下载默认路径
#optional是设置登入下载页面的用户名密码
#TRANSMISSION_WEB_HOME是页面UI配置
#UI可选 /combustion-release/, /transmission-web-control/, /kettu/ , /flood-for-transmission/

建议把/downloads加进nextcloud的/data/用户名

使用注意事项

除了在nextcloud中上传的文件,其他的文件,如服务器端中的文件无法被读取到网盘中,造成了transmission下载的文件不能直接从nextcloud中读取到。

应对方法如下:

进入服务器后输入代码即可扫描nextcloud下的所有文件

1
docker exec -u 1000 nextcloud php /config/www/nextcloud/occ files:scan --all

建议将这项操作添加到定时表中,这样就不用每次下载都要亲自输一遍代码去扫描了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#创建sh文件到指定文件如
/home/autoScanNC.sh

#写入后保存
docker exec -u 1000 nextcloud php /config/www/nextcloud/occ files:scan --all

crontab -e

#写入

*/3 * * * * /bin/sh /home/autoScanNC.sh
#每三分钟运行一次脚本

#保存退出