关于 …
关于 Webui 升级
每次重启容器时,容器内部的 nvx 工具会自动检测并下载最新版 Webui,无需手动操作,但你可能需要解决一下网络问题。
你也可以直接使用 docker pull hansyou/open-webui 来拉取最新的镜像,不过该镜像在创建容器和重启容器时本身就会进行升级,因此没有拉取新镜像的必要,作者很少更新镜像,就算更新也是小修小补,没必要。
fedora-dev
这个镜像是为了轻量化开发而准备的。
在此之前,我一直使用一个 fedora-server 的虚拟机进行开发,但是存在几个无法忽视的问题:
- 不够轻量化:虚拟机非常吃性能,总体来说并不利于开发,并且对于非系统底层开发,许多操作系统的底层功能用不上。对于我个人来说,主要就是 gcc,g++,clang,python 等等。
- 独立 IP:这个需要辩证看待。对于我来说,不涉及网络开发的话,虚拟机的独立 IP 并没有什么作用,我最终也只是使用了它的一个端口而已。
- 数据不易管理:虚拟机的数据都在虚拟机磁盘里面,很难从外部读取,如果用网络映射的话,速度又过慢,4k 性能极差,无法接受。
而使用容器开发,可以解决上面的几个问题。但如果做 web 开发,涉及到各类端口占用,请务必使用虚拟机。
说明
基于官方 fedora 镜像制作的开发环境,仅安装 code-server 和 neovim,软件包自动升级到最新
code-server 官方不推荐使用 root 用户,因此容器新建了一个 user 用户 (1000:1000)
root 和 user 用户默认密码都是 123456,网页登录密码也为初始 123456
其余需求需要自行定制
docker 命令
docker run -itd --privileged -p 8080:8080 -v ./data:/home/user/ --name fedora-dev --user=1000:1000 hansyou/fedora-dev:latest /start.sh
–user 必须使用 uid:gid 的形式,否则映射的目录将权限不足,–privileged 参数必须添加。
所有映射了目录的 docker 非 root 用户容器都应采用这种形式。
docker-compose
version: "3"
services:
fedora-dev:
image: hansyou/fedora-dev:latest
container_name: fedora-dev
user: "1000:1000"
privileged: true
ports:
- "8080:8080"
volumes:
- ./data:/home/user/
tty: true
stdin_open: true
command: /start.sh
文件映射
fedora 新建用户中有以下几份文件,应手动添加这些文件一并映射,避免出现环境问题,虽然我们用的是 zsh,但还是以防万一。
data/.bash_logout data/.bash_profile data/.bashrc
######### ~/.bash_logout
######### .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
######### .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]; then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc
然后添加一份 data/.config/code-server/config.yaml,以下是一份 config.yaml 模板
bind-addr: 0.0.0.0:8080
auth: password
password: "SuperStrongPassword"
cert: false
必须监听 0.0.0.0 或者,否则其他主机无法访问。password 一定要用字符串括起来。
最终,data 下面应该有三个 .bash 开头的隐藏文件和一个 .config/code-server/config.yaml 文件。
❯ tree -a
.
├── .bash_logout
├── .bash_profile
├── .bashrc
└── .config
└── code-server
└── config.yaml
3 directories, 4 files
数据备份与迁移
在我的 docker-compose 中,直接映射了整个~目录,因此直接打包备份即可,重装之后,用户级别的配置都会保留,包括 code-server 插件、neovim 配置、zsh 配置等。
如果容器内~的权限乱掉
sudo chown -R user:user /home/user
SSL
code-server 建议使用 https 访问,http 访问有些功能无法使用,为了方便建议反向代理。
升级 code-server
每次启动时,会自动升级所有的软件,包括 code-server
也可以手动进行升级:
curl -fsSL https://code-server.dev/install.sh | sh

