私有云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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
FROM fedora:34
MAINTAINER vincent huatai <vincent@huatai.me>

ENV container docker

RUN --mount=type=bind,target=/sys/fs/cgroup \
    --mount=type=bind,target=/sys/fs/fuse \
    --mount=type=tmpfs,target=/tmp \
    --mount=type=tmpfs,target=/run \
    --mount=type=tmpfs,target=/run/lock \
    dnf -y update && dnf -y install systemd && dnf clean all

RUN dnf -y install openssh-server \
    which net-tools iputils procps-ng

# iputils: ping arping tracepath ...
# net-tools: arp ifconfig route ...

#RUN systemctl enable sshd

# add account "admin" and give sudo privilege
RUN groupadd -g 505 admin
RUN useradd -g 505 -u 505 -d /home/admin -m admin
RUN usermod -aG wheel admin
RUN echo "%wheel        ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers

# Add ssh public key for login
RUN mkdir -p /home/admin/.ssh
COPY authorized_keys /home/admin/.ssh/authorized_keys
RUN chown -R admin:admin /home/admin/.ssh
RUN chmod 600 /home/admin/.ssh/authorized_keys
RUN chmod 700 /home/admin/.ssh

EXPOSE 22 80 443

ENTRYPOINT [ "/usr/lib/systemd/systemd" ]
CMD [ "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连接被中断导致的。

具体解决稍后更新…