制作可以ssh的镜像发布到k8s

制作可以ssh的镜像发布到k8s

一、制作可以ssh的镜像

1、下载镜像

docker pull centos:7

2、基于centos镜像,创建一个名为centos7ssh的容器

docker run -i -t -p 1022:22 -p 30080:80 --name sshchen centos:7 /bin/bash

3、进入容器后,升级并安装ssh服务端和客户端,服务端能让其他主机远程登录本机,客户端能让本机远程登录其他主机

yum -y update
yum install passwd openssl openssh-server vim openssh-clients -y

5、创建 /var/run/sshd/目录,要不然sshd服务启动会报错

mkdir -p /var/run/sshd

6、编辑sshd的配置文件/etc/ssh/sshd_config,将其中的UsePAM yes改为UsePAM no
修改后在启动sshd的时候可能报一个redhat版本不适用的错误,不影响使用。

sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config

7、修改允许root登陆

PermitRootLogin yes

8、创建公私密钥,输入命令后,直接按两次enter键确认就行了

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

9、开启ssh服务
编写启动脚本,方便从镜像启动
'''
注意很多文档上创建run.sh在根目录,实际测试启动容器
docker run -p 1022:22 -p 30080:80 -d centos7-ssh:latest /run.sh未知原因报错
starting container process caused "exec: "/run.sh": stat /run.sh: no such file or directory".

vim /root/run.sh
#!/bin/bash
/usr/sbin/sshd -D

chmod 755 /sshd.sh
修改root密码
echo "111111" | passwd --stdin "root"


10、测试
在从容器中执行ssh localhost

在宿主机执行ssh 宿主IP -p1022

注意是小P

测试成功。。。。

11、退出容器、提交新的镜像

docker ps -a |grep sshchen
docker commit dockerid centos7-ssh

12、用新的镜像启动容器并测试

docker run -t -i -p 1022:22 -p 30080:80 centos7-ssh:latest /bin/bash

docker run --restart=always -p 1022:22 -p 30080:80 -d centos7-ssh:latest /root/run.sh

13、打包镜像方便迁移到k8s或dockerhub

docker save centos7-ssh:4 -o centos7-ssh.4.tar

:4 本应该是latest,这里是因为我多次修改镜像保存的时候新设的版本

二、在k8s中发布

登陆k8s某节点,将镜像文件恢复到节点的docker上

docker load < /root/centos7-ssh.4.tar 绝对路径
docker tag 镜像id 镜像名字:镜像版本

使用dockerfile来修改镜像,因为需要启动容器启动ssh

mkdir dockerfile
touch Dockerfile
写入以下内容

#base image
FROM centos7-ssh:4
MAINTAINER zhaobw “zhaobowen@ict.ac.cn”

#add execute privilege
RUN yum install -y lsof
RUN echo "111111" | passwd --stdin "root"
RUN mkdir /root/data
EXPOSE 22

#start tomcat
ENTRYPOINT /root/run.sh

开始构建容器

cd dockerfile
docker build -t="centos7-ssh:8.0" .

在k8s集群中创建pod 选择镜像名 选择主机仅本机这里就是k8s节点

我用的rancher,选择镜像,选择映射端口就好啦。。

实例:
在10.60.1.93上创建一个可ssh的docker

docker run --restart=always -p 1022:22 -p 30080:80 -v /tmp/data:/root/data -d centos7-ssh:8.0 /root/run.sh
在宿主机执行ssh 宿主IP -p1022

原文地址:https://www.cnblogs.com/zhaobowen/p/13279089.html