dockerfile创建ssh镜像模板

创建一个ssh_dockerfile工作目录

[root@localhost ~]# mkdir sshd_dockerfile
[root@localhost ~]# ls
anaconda-ks.cfg  Dockerfile  sshd_dockerfile  testfile
[root@localhost ~]# cd sshd_dockerfile/
[root@localhost sshd_dockerfile]# touch Dockerfile run.sh
[root@localhost sshd_dockerfile]# ls
Dockerfile  run.sh
[root@localhost sshd_dockerfile]# ls
Dockerfile  run.sh

编辑run.sh文件

[root@localhost sshd_dockerfile]# vim run.sh 
[root@localhost sshd_dockerfile]# cat run.sh 
#! /bin/bash
/usr/sbin/sshd -D

在docker主机上生成ssh密钥对,并创建authorized_keys文件

编写Dockerfile(centos我用的是7.9.2009版本的如果你想用这个版本FROM可以改成 centos:centos7.9.2009)

# cat Dockerfile

FROM centos

MAINTAINER from Berry@example.com

RUN yum install -q -y openssh-server sudo

RUN useradd admin

RUN echo "admin:admin" | chpasswd

RUN echo "admin  ALL=(ALL)  ALL" >> /etc/sudoers

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

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

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

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

RUN mkdir -p /var/run/sshd

RUN mkdir -p /home/admin/.ssh

RUN sed -ri 's/session reqired pam_loginuid.so/#session requied pam_loginuid.so/g' /etc/pam.d/sshd

ADD authorized_keys /home/admin/.ssh/authorized_keys

ADD run.sh /run.sh

RUN chmod 775 /run.sh

EXPOSE 22

CMD ["/run.sh"]

以上选项的含义解释:

FROM centos   选择一个已有的os镜像作为基础

MAINTAINER    镜像的作者

RUN yum install -y openssh-server sudo   安装openssh-server和sudo软件包

添加测试用户admin,密码admin,并且将此用户添加到sudoers里

RUN useradd admin

RUN echo "admin:admin" | chpasswd

RUN echo "admin   ALL=(ALL)       ALL" >> /etc/sudoers

下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

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

注意:centos7上必须要有,否则创建出来的容器sshd不能登录

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

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

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

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

将公钥信息上传到远程连接用户的宿主目录的.ssh下

ADD  authorized_keys /home/admin/.ssh/authorized_keys

启动sshd服务并且暴露22端口

RUN mkdir /var/run/sshd

EXPOSE 22

CMD ["/run.sh"]       也可以写成这种方式CMD ["/usr/sbin/sshd", "-D"]

在sshd_dockerdile目录下,使用docker build命令来创建镜像,注意:在最后还有一个 . 这个点表示使用当前目录中的dockerfile

[root@localhost sshd_dockerfile]# pwd
/root/sshd_dockerfile
[root@localhost sshd_dockerfile]# ls
authorized_keys  Dockerfile  run.sh
[root@localhost sshd_dockerfile]# docker build -t centos:sshd .

执行docker images 查看新生成的镜像

[root@localhost sshd_dockerfile]# docker images
REPOSITORY   TAG              IMAGE ID       CREATED          SIZE
centos       sshd             ef9d7e44bd7c   25 seconds ago   384MB

使用刚才建好的镜像运行一个容器,将容器的端口映射到主机的10122

[root@localhost sshd_dockerfile]# docker run -d -p 10122:22 centos:sshd
e80a37550e4c334f8c6a1ab02d46778937ace650530bf81de6e1922349aa3bdb
[root@localhost sshd_dockerfile]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS          PORTS                                       NAMES
e80a37550e4c   centos:sshd   "/run.sh"                7 seconds ago   Up 7 seconds    0.0.0.0:10122->22/tcp, :::10122->22/tcp     eloquent_mclaren

在宿主主机上打开一个终端,连接刚才新建的容器

注:admin用户是容器中的用户,192.168.1.7地址是宿主机的地址。

到这里我们已经具备编写 Dockerfile 的能力了。如果大家还觉得没把握推荐一个快速掌握 Dockerfile 的方法去 Docker Hub 上参考那些官方镜像的 Dockerfile。

好了我们已经学习完如何创建自己的 image,下一节讨论如何分发 image。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值