docker
1   docker的基础命令操作
命令 | 功能 | 注释 |
---|---|---|
docker ps | 列出当前正在运行的容器 | |
docker ps -a | 列出所有容器(包括已停止的容器) | |
docker logs container_name | 查看指定容器的日志 | |
docker inspect container_name/image | 获取指定容器或镜像的详细信息 | |
docker exec -it container_name /bin/bash | 进入指定容器的交互式终端 | -i: 交互式操作 -t: 终端 -it:以交互式终端运行容器,例如 docker exec -it container_name bash |
docker stop container_name | 停止一个或多个容器 | |
docker kill container_name | 立即停止一个或多个容器 | 直接发送 SIGKILL 信号给容器的主进程,导致容器立即停止 docker kill -s SIGTERM container_name等同于stop -s, --signal: 发送给容器的信号(默认为 SIGKILL) SIGKILL: 强制终止进程(默认信号) SIGTERM: 请求进程终止 SIGINT: 发送中断信号,通常表示用户请求终止 SIGHUP: 挂起信号,通常表示终端断开 |
docker rm container_name | 删除一个或多个容器 | |
docker rmi image-name:tag | 删除一个或多个镜像 | 不加tag则会删除所有 |
docker run image-name --name container_name -d | 启动一个新的容器并运行命令 | |
docker start container_name | 启动已停止的容器 | |
docker restart container_name | 重启一个容器 | |
docker version | 显示 Docker 客户端和守护进程的版本信息 | |
docker network ls | 列出所有 Docker 网络 | |
docker volume ls | 列出所有 Docker 卷 | |
docker images ls | 列出本地存储的所有镜像 | |
docker compose -f docker-compose.yml up -d | 启动多容器应用(从 docker-compose.yml 文件) | -d:后台运行容器,例如 docker run -d ubuntu |
docker compose -f docker-compose.yml down | 停止并删除由 docker-compose 启动的容器、网络等 | |
docker compose logs -f docker-compose.yml | 查看指定compose的运行日志 | |
docker info | 显示 Docker 系统的详细信息 | |
docker stats | 显示容器的实时资源使用情况 | |
docker system df | 查看docker各组件硬盘占用 | |
docker builder prune -f | 删除所有未被使用的构建缓存 | -f:强制删除,跳过确认提示 |
docker builder prune --filter 'until=240h' | 删除所有未被使用的构建缓存,并保留最近10天的缓存 | |
docker image prune -a -f | 强制删除所有未被使用的镜像 | -a:所有镜像,不单只dangling镜像 -f:强制删除,跳过确认提示 |
docker container prune -f --volumes | 删除所有停止运行的容器 | --volumes:同时删除与容器关联的匿名卷,注意备份好数据 -f:强制删除,跳过确认提示 |
docker volume prune | 删除所有未被挂载的卷 | |
docker network prune | 删除所有未使用的网络 | |
docker system prune | 清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像) | |
docker system prune -a | 比上面命令清理得更加彻底,没有容器使用Docker镜像都会被删掉 |
2   使用apt仓库为Debian安装docker
2.1   添加Docker的官方GPG密钥
1 | apt update |
2.2   添加Docker的官方仓库
1 | echo \ |
2.3   安装Docker
1 | apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y |
2.4   验证Docker版本
1 | docker -v |
2.5   修改Docker镜像源
1 | mkdir -p /etc/docker |
2.6   重启相关服务
1 | systemctl daemon-reload |
3   Docker部署Dockge(docker compose可视化管理)
- 创建stacks文件夹(建议加上
-xxx
后缀以方便标识):1
mkdir -p /opt/stacks/dockge
- 创建
dockge
的docker-compose.yml
文件:nano /opt/stacks/dockge/docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21services:
dockge:
image: louislam/dockge:latest
container_name: dockge
restart: unless-stopped
ports:
- 5001:5001
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /root/dockge_data:/app/data
# Stacks Directory
# ⚠️ READ IT CAREFULLY. If you did it wrong, your data could end up writing into a WRONG PATH.
# ⚠️ 1. FULL path only. No relative path (MUST)
# ⚠️ 2. Left Stacks Path === Right Stacks Path (MUST)
- /opt/stacks:/opt/stacks
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
# Tell Dockge where to find the stacks
- DOCKGE_STACKS_DIR=/opt/stacks
- DOCKGE_ENABLE_CONSOLE=true - 进入到对应
dockge-[xxx]
路径,运行dockge服务:docker compose -f docker-compose.yml up -d
。 - 访问dockge网页管理后台:
http://10.10.10.10:5001
。初次访问会提示创建用户和密码。
4   Docker部署DDNS-GO
4.1   Docker宿主机配置一览
笔者是直接跟RustDesk server部署在同一个宿主机上。
硬件类别 | 配置 |
---|---|
CPU | 2核 |
内存 | 1GB |
SWAP | 1GB |
硬盘 | 5GB |
4.2   创建开源版DDNS-GO的docker-compose.yml文件
1 | services: |
访问网页管理后台:http://10.10.10.10:9876,首次访问需要设置帐号和密码。
4.3   DDNS-GO的配置
- 选择DNS服务器:笔者用的是
Dynv6
。- Token查看:
My Zones
->Instructions
->ddclient
->password
或者右上角帐号
->Keys
->HTTP Tokens
->Token
->Details
(这两个实际是相同,当然也可以Keys
中生成新的Token) - TTL:保持默认的自动。
- Token查看:
- Ipv4:取消勾选「是否启动」
- Ipv6
- 勾选「是否启动」
- 获取IP方式:通过网卡获取
- 匹配正则表达式:留空
- Domains:填写在
Dynv6
申请得到的域名
- 其他保持默认,当前配置可以重命名保存,注意点击底下的保存按钮。若有其他局域网设备也需要做DDNS,则添加一个新的配置,局域网设备获取IPV6的方式需要支持EUI-64(IPv6后半部分包含ff:fe),具体参看通过命令获取IP参考。
- 一般默认Linux系统的网卡配置就默认支持EUI-64,通过
ip addr
查看具有8组长度(每组16位的十六进制数)的Ipv6地址。 ip -6 route | awk '{print $1}' | awk '/240:?/' | awk -F::/ '{print $1 ":填写后面四组的十六进制数,包含ff:fe"}'
5   Docker部署开源版RustDesk server
5.1   Docker宿主机配置一览
硬件类别 | 配置 |
---|---|
CPU | 2核 |
内存 | 1GB |
SWAP | 1GB |
硬盘 | 5GB |
5.2   理解开源版RustDesk server端口用途
需要开放路由器防火墙和docker映射的端口一览:
TCP(21115, 21116, 21117, 21118, 21119)
UDP(21116)
hbbs监听端口:
- 21115(tcp):hbbs用作NAT类型测试
- 21116(tcp/udp):UDP是hbbs用作ID注册与心跳服务,TCP是hbbs用作TCP打洞与连接服务
- 21118(tcp):支持网页客户端
hbbr监听端口:
- 21117(tcp):hbbr用作Relay中继服务
- 21119(tcp):支持网页客户端
5.3   创建开源版RustDesk server的docker-compose.yml文件
5.3.1   host
宿主机网络版:
1 | services: |
5.3.2   rustdesk-net
隔离网络版:
1 | networks: |
6   Docker部署code-server(VS Code in The Browser)
- codercom/code-server:由Coder公司开发并维护的基于微软开源的Visual Studio Code (VS Code)构建的网页版开发环
- linuxserver/code-server:基于codercom/code-server的Docker容器化封装,支持多平台架构(x86-64/arm64)
- LinuxServer.io镜像依赖Coder的底层更新,因此功能迭代略滞后于官方。Coder镜像是LinuxServer.io镜像的上游版本。
关于哈希密码的生成:
- 在其他有装npm的机器上安装
argon2-cli
包:npm install argon2-cli
- 生成哈希密码:echo -n "your-password" | npx argon2-cli -e
- 程序输出哈希(这整串就是哈希,但是填入docker-compose.yml文件中时,需要用
$$
替换$
符号):$argon2i$v=19$m=4096,t=3,p=1$52d7tDyHRAFyqt+1k4fJsA$NvGfhHZ084v4rwGYTspIxP0uFX4qfeFRCVhsvKqN52E
docker-compose.yml文件内容:
1 | services: |
访问网页管理后台:http://10.10.10.9:8080
7   Docker搭建Gitea
7.1   创建Gitea的mysql数据库数据文件夹
在root
账户路径下,创建mysql
文件夹和子目录:mkdir -p /root/mysql/conf.d
创建my.ini
:nano /root/mysql/conf.d/my.ini
1 | ###### [client]配置模块 ###### |
7.2   创建Gitea数据文件夹和配置文件
在root
账户路径下,创建gitea
文件夹和子目录:mkdir -p /root/gitea/gitea/conf
创建app.ini
文件:nano /root/gitea/gitea/conf/app.ini
1 | APP_NAME = Gitea: Git with a cup of tea |
7.3   创建actions_runner配置文件
1 | nano /root/actions_runner_config.yaml |
actions_runner_config.yaml
内容:
1 | # Example configuration file, it's safe to copy this as the default config file without any modification. |
7.4   启动Docker-Compose
1 | nano /root/docker-compose.yml |
docker-compose.yml
内容:
1 | networks: |
7.5   迁移Gitea的mysql数据库和git仓库数据
- 备份其他服务器上的Gitea的mysql数据库、git仓库数据和gitea其他资产数据。
- 进入mysql容器,并使用备份sql文件恢复mysql数据库。
- 停止docker-compose
- 迁移Gitea的git仓库数据和其他资产数据(例如avatars,actions_logs等),
- Git仓库数据路径:
/root/gitea/git/repositories
- Git仓库lfs数据路径:
/root/gitea/git/lfs
- Gitea资产数据路径:
/root/gitea/gitea/attachments
/root/gitea/gitea/repo-archive
/root/gitea/gitea/actions_logs
/root/gitea/gitea/conf
/root/gitea/gitea/actions_artifacts
/root/gitea/gitea/jwt
/root/gitea/gitea/indexers
/root/gitea/gitea/tmp
/root/gitea/gitea/repo-avatars
/root/gitea/gitea/queues
/root/gitea/gitea/packages
/root/gitea/gitea/home
/root/gitea/gitea/avatars
/root/gitea/gitea/log
- Git仓库数据路径:
- 重新运行docker-compose
7.6   Gitea搭建和使用的踩坑
7.6.1   actions_runner容器无法正常启动,日志提示未注册runner
问题现象:docker logs runner
查看日志提示如下,同时,gitea管理后台查看runner也无法看到有正常在线的runner。
1 | level=error msg="fail to invoke Declare" error="unknown: rpc error: code = Unauthenticated desc = unregistered runner" |
问题原因:/root/actions_runner
路径下有一个隐藏文件夹.runner
,该文件夹存储runner配置数据,但该数据是旧的,gitea实例无法识别,因此runner容器无法成功注册。
解决方法:
- 停止docker-compose
- 删除
.runner
文件夹:rm -rf /root/actions_runner/.runner
- 重新运行docker-compose
- 之后在gitea管理后台就能看到正常在线的新runner了
7.6.2   “版本发布”下,自己上传的文件url错误
背景说明:Gitea构建在子局域网IP
10.10.10.10
,然后外部网络访问该Gitea服务是通过IP192.168.1.10
(宿主机IP192.168.1.10
已设置路由表转发3000
端口到IP10.10.10.10
,即192.168.1.10:3000
->10.10.10.10:3000
)
问题现象:在版本发布内容中,上传的资产文件assets
下载路径链接指向http://10.10.10.10:3000/xxx.zip
。
问题原因:Gitea的配置文件app.ini
中的ROOT_URL
未设置参数,导致下载路径链接自动指向http://10.10.10.10:3000/xxx
。
解决方法:编辑app.ini
文件,将[server]
小节中的ROOT_URL
参数设置为http://192.168.1.10:3000
即可。
7.6.3   Gitea管理后台提示当前访问的url和app.ini配置url不同
问题现象:Gitea管理后台提示警告,你的app.ini
的ROOT_URL
是http://10.10.10.10:3000
,但当前访问的url是http://192.168.1.10:3000
。你应该正确设置ROOT_URL
,否则网络服务可能无法正常运行。
问题原因:Gitea的配置文件app.ini
中的ROOT_URL
未设置参数或者设置错误的url,导致下载路径链接自动指向http://10.10.10.10:3000/xxx
。
解决方法:编辑app.ini
文件,将[server]
小节中的ROOT_URL
参数设置为当前访问URL即可,例如http://192.168.1.10:3000
。
8   Docker搭建Redis
8.1   Redis容器清理缓存
1 | # 通过可交互终端进入redis容器 |
9   Docker搭建DataEase
请提前为宿主机安装好Docker以及配置好镜像源,这里不作介绍。
9.1   下载DataEase部署脚本。
最新的DataEase V1.x部署脚本并解压(本文示例为v1.18.27版本)。
dataease-release-v1.18.27.tar.gz
和dataease-v1.18.27-online.tar.gz
这两个文件数据完全一致,随意下载,本人解压并比对过文件哈希值。
v2.x开源社区版不支持创建用户,代码层面写死只有一个admin账户,若有用户管理的需求,可以不用考虑v2.x版本或者考虑商业版的v2.x。
9.2   修改配置文件install.conf
安装模式模式修改为local
,端口这些自行根据需求改,如下配置文件是修改为8100。
1 | # 基础配置 |
9.2.1   不同安装模式的区别
9.3   安装DataEase
运行命令安装DataEase,并查看对应docker容器是否正常运行。
1 | bash ./install.sh |
9.4   创建DataEase的踩坑记录
9.4.1   doris-be容器状态一直为unhealthy
问题:doris-be容器状态一直为unhealthy,一直在尝试反复启动。docker logs doris-be
查看到如下日志输出:
1 | doris_role:be |
可以查看上述日志输出提示Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'.
原因:Doris作为分布式数据库,对于内存映射数量有要求,Linux系统默认参数值无法满足,例如PVE系统默认的vm.max_map_count=262144
。
- 解决方法1:请在运行doris容器的宿主机上设置
vm.max_map_count
内核参数。若宿主机本身也是容器化的虚拟机,例如PVE的LXC容器,可以直接在PVE上运行命令修改参数。1
2
3
4
5
6
7
8
9
10
11
12# 持久化设定,永久生效,推荐使用该方式
nano /etc/sysctl.conf
# 在/etc/sysctl.conf最底部添加如下参数,保存文件
vm.max_map_count=2000000
# 从文件中加载参数,不指定文件默认加载读取 /etc/sysctl.conf 的内容,会立即应用其中的内核参数(无需重启系统)
sysctl -p
# 临时设置生效,重启PVE后会恢复到默认值,而不是2000000
sysctl -w vm.max_map_count=2000000
# 查看参数值
sysctl vm.max_map_count - 解决方法2:换DataEase v2版本,v2系列不需要部署Doris。
9.4.2   在DataEase添加Excel数据集后,预览数据界面无法加载,并一直提示Access denied for user 'root@172.19.0.4'
原因:修改过install.conf
的MySQL和Doris的密码都会导致出现该故障。据5939的issue反馈该问题在1.18.23已修复,但本人使用1.18.27版本部署,修改密码仍会出现该问题。
解决方法:不修改install.conf
的MySQL和Doris的密码,直接使用模板预设的默认密码完成部署。
9.5   DataEase使用踩坑纪录
- 变更/删除数据集,均会导致丢失仪表盘的过滤器参数
- 仪表盘的视图在超过1000条数据时则无法全部导出excel表格(比如实际导出的excel表格行数为1001,有一行是表头)
- 建议导出操作,使用数据集的导出功能。
- excel数据源若有几万行,则无法成功导入dataease作为数据集,在数据同步阶段会失效(可能是内存溢出的问题,有待排查验证)
- V2社区开源版不支持创建多用户
10   Docker Desktop(Windows)
10.1   Docker Unexpected error
问题:无法启用Docker Desktop,提示报错Docker Unexpected error
。
原因:之前有安装并卸载过Docker Desktop。重新安装Docker Desktop有可能触发此问题。
解决方法:
1 | wsl --unregister docker-desktop |
11   参考文献
[1] Docker Unexpected error[EB/OL]. https://github.com/docker/for-win/issues/14034.
[2] Install Docker Engine on Debian[EB/OL]. https://docs.docker.com/engine/install/debian/#install-using-the-repository.
[3] DockerHub 国内加速镜像列表[EB/OL]. https://github.com/dongyubin/DockerHub.
[4] Docker 容器使用[EB/OL]. https://www.runoob.com/docker/docker-container-usage.html.
[5] [Question]配置doris数据源提示错误:Access denied for user 'root@172.19.0.4' (using password: YES)[EB/OL]. https://github.com/dataease/dataease/issues/5939.
[6] 安装模式[EB/OL]. https://dataease.io/docs/v1/installation/installation_mode/#11.
[7] Docker Build Cache 缓存清理[EB/OL]. https://blog.csdn.net/catoop/article/details/128002962.
[8] docker下redis容器清理缓存[EB/OL]. https://blog.csdn.net/weixin_44662304/article/details/114694451.
[9] “版本发布”下,自己上传的文件url错误[EB/OL]. https://forum.gitea.com/t/url/8030/1.
[10] 反向代理[EB/OL]. https://docs.gitea.com/zh-cn/administration/reverse-proxies.
[11] 使用 Docker 安装[EB/OL]. https://docs.gitea.com/zh-cn/next/installation/install-with-docker.
[12] Act Runner[EB/OL]. https://docs.gitea.com/zh-cn/next/usage/actions/act-runner.
[13] 备份与恢复[EB/OL]. https://docs.gitea.com/zh-cn/next/administration/backup-and-restore.
[14] 求助:Docker-compose部署act_runner出现错误[EB/OL]. https://forum.gitea.com/t/docker-compose-act-runner/8525.
[15] Runner Will Not Register via Docker Compose[EB/OL]. https://gitea.com/gitea/act_runner/issues/550.
[16] runner: level=error msg="Cannot ping the Gitea instance server" error="unknown: 500 Internal Server Error"[EB/OL]. https://gitea.com/gitea/act_runner/issues/400.
[17] 使用docker-compose 部署 MySQL(所有版本通用)[EB/OL]. https://blog.csdn.net/weixin_44606481/article/details/132840940.
[18] Can I store my password hashed?[EB/OL]. https://github.com/coder/code-server/blob/main/docs/FAQ.md#can-i-store-my-password-hashed.
[19] 【学习笔记 - code-server】通过docker-compose配置code-server(一)[EB/OL]. https://blog.csdn.net/kirigirihitomi/article/details/132859159.
[20] 完全免费利用家宽IPV6和个人电脑搭建rustdesk-server-windows服务器实现远程控制[EB/OL]. https://www.npspro.cn/27999.html.
[21] docker-compose自建RustDesk远程控制服务器 [EB/OL]. https://www.cnblogs.com/zwgbk/p/16648073.html.
[22] 安装[EB/OL]. https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-oss/install/.
[23] DDNS-GO[EB/OL]. https://github.com/jeessy2/ddns-go.