Docker中操作

更新时间 🔔🕙 2024年4月17日

保证中文正常显示

ENV  \
    # 时区
    TZ=Asia/Shanghai

RUN apt-get update && \
    # 安装网络工具
    apt-get install -y net-tools iputils-ping traceroute&& \
    # 安装编辑器,时区设置,支持命令行中文显示
    apt-get install -y nano tzdata locales && \
    # 修改时区为GMT+8
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    locale-gen zh_CN.UTF-8 && \
    # 安装相关工具包
    apt-get install -y curl wget bash-completion sudo && \
    # 清理apt下载的包
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

ENV LANG=zh_CN.UTF-8 \
    LANGUAGE=zh_CN:zh \
    LC_ALL=zh_CN.UTF-8

开启openssh-server

# 安装SSH服务
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd

# 生成SSH主机密钥
RUN ssh-keygen -A

# 设置root用户的密码(请替换为更安全的密码)
RUN echo 'root:YOUR_SECURE_PASSWORD' | chpasswd

# 取消root用户登录限制(出于安全考虑,请谨慎使用)
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH登录时不检查和要求客户端提供的主机密钥
RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd

# 暴露22端口
EXPOSE 22

创建一个普通用户

# 创建一个新的用户 'myuser' 和用户组 'mygroup',--gecos "" 表示创建用户时跳过所有额外信息的填写
RUN groupadd -r mygroup && \
    adduser --disabled-password --gecos "" myuser --ingroup mygroup && \
    usermod -a -G sudo myuser && \
    echo "myuser:pass123" | chpasswd
# 更改文件/目录的所属关系,以便新用户可以访问
RUN chown -R myuser:mygroup /data
# 切换到非root用户
USER myuser

安装poetry的python虚拟环境包管理

ENV PATH="/home/myuser/.local/bin:$PATH" \
    # VIRTUAL_ENV这个环境变量设定后,poetry会自动使用该目录指定的env
    VIRTUAL_ENV=/data/cusvenv
RUN  \
    # 安装poetry
    curl -sSL https://install.python-poetry.org | python3.10 - && \
    # 创建venv环境,如果是自己在docker中命令行,可以执行【source /data/cusvenv/bin/activate】进入
    python3.10 -m venv ${VIRTUAL_ENV}

清理docker 的build cache

随着编译的docker镜像增多,即使本地删除了image,build cache仍然会保留。比较麻烦的是/var/lib/docker/overlay2经常与/根目录共用一个磁盘,导致根目录磁盘占满,需要及时清理。

# 参考网址:https://docs.docker.com/reference/cli/docker/builder/prune/
# 有时候docker的build cache缓存太多,需要手动清理一下,一般是保存在【/var/lib/docker/overlay2】目录下
docker builder prune -a
# 带有filter的清理,-f表示不弹出确认信息
docker builder prune -f --filter until=144h
转载请备注引用地址:编程记忆 » Docker中操作