code-server / Dockerfile
sft0farid's picture
Update Dockerfile
b13bc28 verified
Raw
History Blame Contribute Delete
2.28 kB
FROM codercom/code-server:latest
USER root
RUN apt-get update && apt-get install -y \
tzdata \
&& rm -rf /var/lib/apt/lists/*
ENV TZ=Europe/Oslo
RUN mkdir -p /data
# Короткий промпт
RUN echo "export PS1='\[\033[01;32m\]farid\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /home/coder/.bashrc && \
chown coder:coder /home/coder/.bashrc
# Скрипт сохранения HOME (весь /home/coder — конфиги, vscode, extensions, opencode и т.д.)
RUN cat <<'EOF' > /usr/local/bin/home-save
#!/bin/sh
set -e
tar -czpf /data/home-backup.tar.gz.tmp -C /home/coder .
mv /data/home-backup.tar.gz.tmp /data/home-backup.tar.gz
EOF
# Скрипт восстановления HOME
RUN cat <<'EOF' > /usr/local/bin/home-restore
#!/bin/sh
set -e
if [ -f /data/home-backup.tar.gz ]; then
tar -xzpf /data/home-backup.tar.gz -C /home/coder
fi
EOF
# Демон: бэкап каждый день в 04:00 по Europe/Oslo
RUN cat <<'EOF' > /usr/local/bin/home-save-daemon
#!/bin/sh
LOG=/data/home-backup.log
while true; do
now=$(date +%s)
next=$(date -d "today 04:00:00" +%s)
if [ "$next" -le "$now" ]; then
next=$(date -d "tomorrow 04:00:00" +%s)
fi
sleep "$((next - now))"
{ echo "[$(date '+%Y-%m-%d %H:%M:%S %Z')] scheduled backup"; home-save; } >> "$LOG" 2>&1
done
EOF
RUN chmod +x /usr/local/bin/home-save /usr/local/bin/home-restore /usr/local/bin/home-save-daemon
USER coder
WORKDIR /home/coder
EXPOSE 7860
# Сбрасываем entrypoint базового образа — иначе CMD ниже игнорируется
ENTRYPOINT []
CMD ["/bin/sh", "-c", "\
mkdir -p /data; \
mkdir -p /home/coder/.vscode/user-data /home/coder/.vscode/extensions; \
home-restore; \
home-save-daemon & \
code-server \
--bind-addr 0.0.0.0:7860 \
--auth password \
--config /home/coder/.vscode/config.yaml \
--user-data-dir /home/coder/.vscode/user-data \
--extensions-dir /home/coder/.vscode/extensions \
/home/coder & \
CODE_PID=$!; \
trap 'echo [$(date \"+%Y-%m-%d %H:%M:%S %Z\")] shutdown signal, saving >> /data/home-backup.log; home-save; kill -TERM $CODE_PID 2>/dev/null; wait $CODE_PID' TERM INT; \
wait $CODE_PID \
"]