创建一个支持 sshd 服务的 docker 镜像

前言

当我们运行容器后,第一件会想到的事情,就是如何连接容器。一般来说,连接容器的方式大概有四种。分别是attach、exec、ssh 和 nsenter.

attach 和 exec 都是 docker 自带的命令,不需要做任何配置。

这篇文章,主要尝试配置一个实现 sshd 服务的镜像。并用这个镜像生成容器,然后验证 ssh 登录的功能。

操作过程

环境说明

宿主机 : ubunt:16.04

用 Dockerfile 文件建立一个镜像

hell[email protected]:~/mysshd_ubuntu$ cat Dockerfile
FROM ubuntu:16.04

MAINTAINER hellochenpro  [email protected]
ENV REFRESHED_AT 2018-02-02

RUN apt-get -qqy update &&          apt-get install -qqy openssh-server &&                  apt-get autoclean &&                  apt-get autoremove &&                  rm -rf /var/lib/apt/lists/*

RUN useradd -s  /bin/bash hell
RUN echo ‘hell:123456‘ | chpasswd

COPY  id_rsa.pub  /home/hell/.ssh/authorized_keys

RUN   chmod 700 /home/hell/.ssh/ &&            chmod 600 /home/hell/.ssh/authorized_keys &&                      chown  -R  hell:hell   /home/hell/.ssh

RUN mkdir -p /var/run/sshd

EXPOSE 22

CMD /usr/sbin/sshd -D

Dockerfile 说明:
用ubuntu:16.04 的原生系统创建,
先用 apt-get 更新源,并安装了 openssh-server
然后,创建了一个用户 hell
接着,将 Dockerfile 上下文环境的 id_rsa.pub 公钥复制到 镜像中,
并且将 /home/hell/.ssh 和 authorized_keys 目录和文件的权限,所属组、所属主都进行修改,否则实现不了免密码登录
然后,将容器的22端口暴露;
最后,以后台守护进程的方式运行 sshd 服务

创建容器

先准备秘钥对
ssh-keygen   -t   rsa  -b  2048   # 一路回车确认,然后将公钥 id_rsa.pub 放到 Dockerfile 目录(上下文)环境
开始创建镜像
 docker  build   --rm  -t   my_sshd    .
 # 创建成功 my_sshd 镜像
启动镜像
docker  run  -d   -p   10035:22   --name container_sshd   my_sshd
# 启动一个容器 container_sshd 
尝试用 ssh 登录容器
ssh   [email protected]   -p   10035  -f   id_rsa   # 在宿主机通过端口10035 登录容器,使用 id_rsa 密钥文件

成功!

总结

其实,一般不推荐使用 ssh 的方式登录容器,因为这样和一个容器只运行一个进程的原则相违背。详细的讨论请移步这篇文章《为什么不需要在 Docker 容器中运行 sshd》

原文地址:http://blog.51cto.com/hellocjq/2068281

时间: 2024-11-06 15:36:47

创建一个支持 sshd 服务的 docker 镜像的相关文章

「六」创建一个带 weblogic 服务的基础镜像

Weblogic Weblogic 简介以及其在 Docker 环境下的特殊应用 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的Java应用服务器.是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器.目前weblogic在世界ap

「一」创建一个带 ssh 服务的基础镜像(修订版)--使用「docker commit」创建

在介绍如何创建带 ssh 服务的基础镜像之前,我们想回顾一下之前介绍过的内容,其中提到有三种创建镜像的常用办法: 从文件系统导入 从现有容器使用「docker commit」提交 使用 dockerfile 文件 build 本章将主要介绍后面 2 种方法. 步骤如下: $ sudo docker run -ti ubuntu:14.04 /bin/bash #首先,使用我们最熟悉的 「-ti」参数来创建一个容器. [email protected]:/# sshd bash: sshd: co

「二」创建一个带 ssh 服务的基础镜像(修订版)--使用 Dockerfile 创建

创建文件夹 首先,创建一个叫做 sshd_ubuntu 的文件夹,用于存放我们的 Dockerfile .脚本文件.以及其他文件. $ mkdir sshd_ubuntu $ ls sshd_ubuntu $ cd sshd_ubuntu/ $ touch Dockerfile run.sh $ ls Dockerfile run.sh 编写 shell 脚本和 authorized_keys 文件 其中脚本文件 run.sh 的内容与上一小节一致 #!/bin/bash /usr/sbin/s

通过Dockerfile创建支持SSH服务的docker镜像(centos、Ubuntu)

centos: mkdir centos-ssh vim centos-ssh/Dockerfile FROM centos MAINTAINER blog.rootr.cn [email protected] RUN yum install -y openssh-server RUN mkdir /var/run/sshd RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' && \ ssh-keygen

「五」创建一个带 tomcat 服务的基础镜像(修订版)

Tomcat Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求.实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运

创建不用ssh密码登陆的docker镜像

操作系统:vm centos6.5 容器:docker 前提:可以ssh的docker镜像已经创建 第一种方法,手动创建 1.在宿主机上生成新的密钥和公钥 ###ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-foutput_keyfile] #ssh-keygen的具体用法参考官方文档 ssh-keygen -q -N "" -t dsa -f /root/.ssh/id_dsa 2.然后把公钥

创建支持ssh服务的docker容器和镜像

http://www.kongxx.info/blog/?p=57 1. 这里使用的centos作为容器,所以首先下载centos的imagessudo docker pull centos 2. 下载后运行一个centos的容器,这里使用centos6作为我测试的容器sudo docker run --name=centos-ssh -i -t centos:centos6 /bin/bash 3. 安装openssh-server服务软件包yum install openssh-server

docker创建支持ssh服务的centos镜像

以centos为基础,目的使用ssh服务远程连接docker容器 环境:宿主机centos7,直接搜索docker的centos镜像,下载最新版本 1.先按照docker:yum install -y epel-release yum install -y docker 2.启动docker: systemctl start docker.service 3.使用ps查看docker是否启动 ps aux |grep docker 4.下载centos的docker镜像 docker pull

【Docker】制作一个支持SSH终端登录的镜像

首先从官方或者docker.cn的镜像库中pull下来ubuntu镜像: docker pull ubuntu 现在用命令查看一下pull下来的ubuntu镜像: docker images 关于如何构建自定义的镜像,有两种方法: 1.使用docker commit 命令 2.使用Dockerfile 无论是官方或者其他的教程,都大力推荐使用第二种方法,因为使用Dockerfile构建拥有比提交命令更高的灵活性和可维护性.所以这里也是通过Dockerfile来构建这个自定义的镜像. ps: 关于