Dockerfile

FROM alpine:latest

# 安装OpenSSH服务
RUN apk add --no-cache openssh-server openssh-client sudo docker-cli util-linux bash
RUN ln -s /bin/bash /usr/bin/bash
RUN mkdir /var/run/sshd

# 生成主机密钥
RUN ssh-keygen -A
# 添加一个名为'sshuser'的用户,设置密码为'sshpassword',并将其添加到'sshuser'组
RUN adduser -D sshuser && \
    echo 'sshuser:sshpassword' | chpasswd && \
    addgroup sshuser wheel

RUN echo '%wheel ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

EXPOSE 22

# 拷贝entrypoint脚本到容器中
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# 指定entrypoint脚本作为容器启动时的执行命令
ENTRYPOINT ["/entrypoint.sh"]

使用的entrypoint.sh如下

#!/bin/sh

if [ -n "$USERNAME" ]; then
    adduser -D "$USERNAME"
    if [ -n "$PASSWORD" ]; then
        echo "$USERNAME:$PASSWORD" | chpasswd
    else
        echo "$USERNAME:sshpassword" | chpasswd
    fi
    addgroup "$USERNAME" wheel
    sed -i "s#^$USERNAME:\([^:]*\):#$USERNAME:/bin/bash:#" /etc/passwd
fi

/usr/sbin/sshd &
tail -f /dev/null

Usage

默认的用户名是sshuser 密码是sshpassword 启动容器后可以从外部使用ssh命令登录容器

# 创建镜像
docker build -t fake_linux_node:latest .
docker tag fake_linux_node:latest 2niuhe/fake_linux_node

# run container
docker run -d -p 9000:22 2niuhe/fake_linux_node
docker run -d -p 9001:22 -e USERNAME=test -e PASSWORD=test123 2niuhe/fake_linux_node

# ssh login
ssh sshuser@127.0.0.1 -p 9000 

ssh test@127.0.0.1 -p 9001

接着可以上传到dockerhub中,已经上传了一个arm版本的,可以如下pull使用

docker pull 2niuhe/fake_linux_node

其它用法可以参考Docker Hub

Ref

Publish your image | Docker Docs Docker Hub