私有云docker环境

备注

我重新部署的基于 HPE ProLiant DL360 Gen9服务器 云计算环境,采用虚拟机运行Docker和Kubernetes。不过,我也在物理主机上部署了一个用于日常开发学习的Docker环境,主操作系统是 Ubuntu Linux ,实践如下。

安装Docker运行环境

  • 参考 Linux环境安装Docker 完成Docker软件初始安装:

    sudo apt install docker.io
    
  • 将个人用户账号 huatai 添加到 docker 用户组方便执行docker命令:

    sudo usermod -aG docker $USER
    
  • 然后验证docker运行:

    docker ps
    

将Docker存储迁移到Btrfs

为了能够充分发挥SSD性能,并且学习和实践 Btrfs ,采用 Docker btrfs 存储驱动 将Docker存储迁移到Btrfs中。

创建运行容器

../../docker/admin/docker_studio/ssh/Dockerfile
 1FROM fedora:34
 2MAINTAINER vincent huatai <vincent@huatai.me>
 3
 4ENV container docker
 5
 6RUN --mount=type=bind,target=/sys/fs/cgroup \
 7    --mount=type=bind,target=/sys/fs/fuse \
 8    --mount=type=tmpfs,target=/tmp \
 9    --mount=type=tmpfs,target=/run \
10    --mount=type=tmpfs,target=/run/lock \
11    dnf -y update && dnf -y install systemd && dnf clean all
12
13RUN dnf -y install openssh-server \
14    which net-tools iputils procps-ng
15
16# iputils: ping arping tracepath ...
17# net-tools: arp ifconfig route ...
18
19#RUN systemctl enable sshd
20
21# add account "admin" and give sudo privilege
22RUN groupadd -g 505 admin
23RUN useradd -g 505 -u 505 -d /home/admin -m admin
24RUN usermod -aG wheel admin
25RUN echo "%wheel        ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers
26
27# Add ssh public key for login
28RUN mkdir -p /home/admin/.ssh
29COPY authorized_keys /home/admin/.ssh/authorized_keys
30RUN chown -R admin:admin /home/admin/.ssh
31RUN chmod 600 /home/admin/.ssh/authorized_keys
32RUN chmod 700 /home/admin/.ssh
33
34EXPOSE 22 80 443
35
36ENTRYPOINT [ "/usr/lib/systemd/systemd" ]
37CMD [ "log-level=info", "unit=sysinit.target" ]
  • 构建docker镜像并运行(采用 自动启动Docker容器 ):

    export DOCKER_BUILDKIT=1
    docker build -t local:fedora34-systemd-ssh .
    
    docker run --privileged=true --hostname fedora34-dev --name fedora34-dev \
        -p 222:22 -p 280:80 -p 2443:443 -v /home/huatai/dev:/home/admin/dev --restart unless-stopped \
        -dti local:fedora34-systemd-ssh
    

备注

fedora34-dev 作为开发环境

警告

上述运行命令存在一个严重问题,容器的控制台会和物理主机的控制台重合,导致相互竞争。最终的影响是物理主机重启时如果同时自动运行容器,会导致ssh无法登陆物理主机(或登陆极其缓慢),经常提示报错:

kex_exchange_identification: Connection closed by remote host

原因参考 kex_exchange_identification Connection Closed by Remote Host ,是因为物理主机的ssh连接被中断导致的。

具体解决稍后更新…