码迷,mamicode.com
首页 > 其他好文 > 详细

【系列2】使用Dockerfile创建带sshd服务的Centos Docker镜像

时间:2017-11-14 11:26:38      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:【系列2】使用dockerfile创建带sshd服务的centos docker镜像

       使用Dockerfile创建
  在第一部分中曾介绍过Dockerfile的基础知识,下面将介绍如何使用Dockerfile来创建一个支持SSH服务的镜像。
 ① 创建工作目录
 首先应创建一个sshd_centos工作目录:
[root@docker1 ~]# mkdir sshd_centos
[root@docker1 ~]# cd sshd_centos/
[root@docker1 sshd_centos]# touch Dockerfile run.sh
[root@docker1 sshd_centos]# ls
Dockerfile  run.sh  

 ② 编写run.sh脚本和authorized_keys文件
[root@docker1 sshd_centos]# vim run.sh
#!/bin/bash
/usr/sbin/sshd -D  
在宿主主机上生成SSH密钥对,并创建authorized_keys文件:
# ssh-keygen -t rsa
....
# cat ~/.ssh/id_rsa.pub >authorized_keys  
    或[root@docker1 ~]# cp /root/.ssh/id_rsa.pub /root/sshd_centos/authorized_keys

 ③ 编写Dockerfile
 下面是Dockerfile的内容及各部分的注释:
[root@docker1 sshd_centos]# cat Dockerfile
#设置继承镜像
FROM docker.io/centos:latest

#提供一些作者的信息
MAINTAINER from www.dockerpool.com by waitfish

#设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

RUN echo "Asia/Shanghai" > /etc/timezone #&& \
        # dpkg-reconfigure -f noninteractive tzdata      #这也是设置时区的
#注意这里要更改系统的时区设置,因为在Web应用中经常会用到时区这个系统变量,默认的centos会让你的应用此程序发生不可思议的效果哦

#下面开始运行命令,此处更改Centos的源为国内阿里的源
RUN yum update
RUN yum install wget -y
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum repolist

#安装ssh服务
RUN yum install -y openssh-server
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key

RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh

#取消pam限制
RUN sed -ri ‘s/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g‘ /etc/pam.d/sshd  

#复制配置文件到相应位置,并赋予脚本可执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh

#开放端口
EXPOSE 22

#设置自启动命令
CMD ["/run.sh"]
 
④ 创建镜像
在sshd_centos目录下,使用docker build
[root@docker1 sshd_centos]# docker build -t sshd:centos .
如果使用Dockerfile创建自定义镜像,那么需要注意的是Docker会自动删除中间临时创建的层,还需要注意每一步的操作和编写的Dockerfile中命令的对应关系。
命令执行完毕后,如果可见"Successfully built XXX"字样,则说明镜像创建成功。可以看到,
[root@docker1 ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
sshd                 centos              fbbedf7fb2a1        16 hours ago        301.9 MB
......


⑤ 测试镜像,运行容器
 使用刚才创建的sshd:centos镜像来运行一个容器。直接启动镜像,映射容器的22端口到本地的10122端口:
[root@docker1 ~]# docker run -d -p 10122:22 sshd:centos
c72fecc1e7c62a4113a1ff6673b55f43e24cac66ad29ad2d339df0ee793e4928
[root@docker1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
c72fecc1e7c6        sshd:centos         "/run.sh"                10 seconds ago      Up 8 seconds        0.0.0.0:10122->22/tcp                      hopeful_goldwasser    
在宿主主机新打开一个终端,连接到新建的容器:
Last login: Tue Nov 14 09:51:22 2017 from 10.0.0.1
[root@docker1 ~]# ssh 10.0.0.10 -p 10122
The authenticity of host ‘[10.0.0.10]:10122 ([10.0.0.10]:10122)‘ can‘t be established.
RSA key fingerprint is SHA256:X3Rf7GKXCkxhFYpc5SkiKScYHq7tuVidbbc3YaJk/yg.
RSA key fingerprint is MD5:de:7b:00:00:90:ec:f0:51:35:4a:66:60:49:a2:42:f2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘[10.0.0.10]:10122‘ (RSA) to the list of known hosts.
[root@c72fecc1e7c6 ~]# exit
logout
Connection to 10.0.0.10 closed.
[root@docker1 ~]# ssh 10.0.0.10 -p 10122
Last login: Tue Nov 14 02:07:17 2017 from 10.0.0.10
[root@c72fecc1e7c6 ~]# exit
logout
Connection to 10.0.0.10 closed.

本文出自 “爱生活的小白” 博客,请务必保留此出处http://sf1314.blog.51cto.com/13295031/1981499

【系列2】使用Dockerfile创建带sshd服务的Centos Docker镜像

标签:【系列2】使用dockerfile创建带sshd服务的centos docker镜像

原文地址:http://sf1314.blog.51cto.com/13295031/1981499

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!