文档章节

Docker 生产SSH服务的镜像

solate
 solate
发布于 2017/03/24 14:57
字数 864
阅读 163
收藏 0

实战

ubuntu 安装 curl

Docker镜像为了精简容量,默认删除这些信息,安装的时候又下面两种方式:

  1. 使用 apt-get update 更新一次
  2. 编辑/etc/apt/sources.list文件,将默认软件源改为国内的源
apt-get update
apt-get install curl

创建支持SSH服务的镜像

基于commit 命令创建

docker commit CONTAINER [REPOSITORY[:TAG]]

1.启动ubuntu

docker run -it --name ssh ubuntu:14.04 /bin/bash

2.更新源(已更新的可忽略)

apt-get update

3.安装ssh

apt-get install openssh-server

如果速度慢可以改成国内源,具体源百度一下就有了,修改位置如下

vi /etc/apt/sources.list.d/163.list

4.启动ssh服务,需要/var/run/sshd存在,手动创建并启动服务

mkdir -p /var/run/sshd
/usr/sbin/sshd -D &

5.查看22端口(ssh 服务默认监听端口),看是否正常启动

netstat -tunlp

6.修改服务的安全登录配置,取消pam登录限制

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

7.当前这个容器 root 用户目录下建立.ssh目录,复制需要的公钥到 authorized_keys 文件

mkdir root/.ssh
vi /root/.ssh/authorized_keys

注意:authorized_keys文件的权限很特殊需要设置为600,才可以(具体原因后面补充)

chmod 600 authorized_keys

因为我是在虚拟机中创建的,所以我可以把虚拟机的公钥粘贴到authorized_keys文件中进行测试。

使用 ssh-keygen -t rsa 命令生成(dsa 不同的加密方式)

ssh-keygen -t dsa

cat /root/.ssh/id_rsa.pub

//复制粘贴到启动容器的authorized_keys中

8.创建自动启动ssh服务的run.sh,并添加可执行权限

vi /run.sh
chmod +x run.sh

内容为:

#!/bin/bash
/usr/sbin/sshd -D

9.退出容器

exit

10.保存镜像(上面容器运行的时候取名容器名为ssh)

//保存容器为镜像
docker commit ssh sshd:ubuntu

//查看镜像
docker images

11.启动一个新容器,并添加端口映射10022-->22. 10022为宿主机端口,22是容器ssh服务监听端口端口

docker run -p 10022:22 -d sshd:ubuntu /run.sh

//启动后查看运行情况
docker ps

12.虚拟机中测试连接情况

ssh 192.168.1.200 -p 10022

进去后敲ls命令的时候需要使用 /bin/ls (暂时没找到这个解决 后面补充)

使用Dockerfile创建

1.创建一个sshd_ubuntu工作目录

mkdir sshd_ubuntu

2.创建Dockerfile 和 run.sh

cd sshd_ubuntu
touch Dockerfile run.sh

3.编写run.sh脚本

#!/bin/bash
/usr/sbin/sshd -D

4.编写authorized_keys文件

ssh-keygen -t rsa
...
cat ~/.ssh/id_rsa.pub > authorized_keys

5.编写Dockerfile文件

# 设置继承镜像
FROM ubuntu:14.04

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

# 下面开始运行命令
RUN apt-get update

# 安装ssh服务
RUN apt-get install -y openssh-server
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"]

6.创建镜像

在sshd_ubuntu目录下,使用docker build 命令来创建镜像,最后还需要加"."表示当前目录

docker build -t sshd:dockerfile .

7.运行容器

docker run -d -p 10022:22 sshd:dockerfile

docker ps

8.虚拟机中测试连接情况

ssh 192.168.1.200 -p 10022

在推出其他高效对容器维护之前,ssh服务还是比较重要的。比较适合生产环节。

© 著作权归作者所有

上一篇: go grpc 初步笔记
下一篇: linux 修改DNS解析
solate
粉丝 10
博文 134
码字总数 119760
作品 0
成都
程序员
私信 提问
Docker Swarm 进阶:安全管理 Docker Secret

► 前言介绍 在 Docker Swarm 服务中, Secret 是一种 BLOB(二进制大对象) 数据, 就像密码、SSH 私钥、 SSL 证书或那些不应该未加密就直接存储在 Dockerfile 或应用程序代码中的数据。在 Do...

Anoyi
2018/01/20
0
0
openshift/origin学习记录(8)——基于镜像安装多节点集群(Containerized Installer)

本节内容是Docker镜像以及Ansible实现多节点集群Containerized Installer。大体流程和基于RPM的安装过程类似。 本部分openshift集群的部署分为以下几个阶段: 主机准备。准备openshift集群需...

huqigang
2017/09/22
0
0
Docker 基础知识-入门篇

1. Docker简介和KVM区别 1.1 docker的三大理念 构建 运输 运行 ps:有点类似于java代码,一次构建到处运行 1.2 docker结构 相关说明: image: 和虚拟机的镜像类似 container: 用镜像创建的实例...

wzaqj
2018/06/06
0
0
Docker容器进入的方式与退出

  在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法。 进入Docker容器比较常见的几...

JungleKing
2018/06/27
854
0
Moving to Docker(二)搭建一个私有registry服务

这是迁移到Docker系列的第二篇,整个系列都是介绍我们公司是如何把基础设施从PaaS迁移到Docker的。 第一篇:我会介绍在使用Docker之前我们的处理过程。 第三篇:我会介绍如何自动化构建整个镜...

DockOne
2015/02/04
481
0

没有更多内容

加载失败,请刷新页面

加载更多

RxJava进行单元测试的方式

@Test public void completeTask_retrievedTaskIsComplete() { // Given a new task in the persistent repository final Task newTask = new Task(TITLE, ""); ......

SuShine
13分钟前
2
0
正则表达式大全

检验手机号码 # 要求:手机号码必须为11位数字,以1开头,第二位为1或5或8。import redef verify_mobile(): mob = input("请输入手机号码:") ret = re.match(r"1[358]\d{9}", m......

彩色泡泡糖
17分钟前
2
0
QT之border-image属性

一、border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊人。可惜目前支持的浏览器有限,仅Firefox3.5,chrome浏览器,Safari3+支持...

shzwork
18分钟前
5
0
Kubernetes Operator简易教程

1. 安装operator-sdk //安装 operator-sdk$ apt-get install operator-sdk.....$ operator-sdk versionoperator-sdk version: v0.7.0$ go versiongo version go1.11.4 darwin/amd64 2......

Robotcl_Blog
18分钟前
3
0
再谈DAG任务分解和Shuffle RDD

1、DagScheduler分析 DagScheduler功能主要是负责RDD的各个stage的分解和任务提交。Stage分解是从触发任务调度过程的finalStage开始倒推寻找父stage,如果父stage没有提交任务则循环提交缺失...

守望者之父
24分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部