Docker镜像中开启SSH

简介

有需求在镜像中需要开启SSH服务,本文介绍如何在将SSH服务器安装到镜像中。

镜像制作

先选择一个基础镜像,然后安装systemd及openssh服务(注意要清理安装遗留的一些问文件,尽量减小镜像尺寸)。

1、 Dockerfile:

要启动SSH需要挂载本地系统的/sys/fs/cgroup,及启动时需要使用init启动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FROM centos
MAINTAINER “Yourname" <youremail@address.com>
ENV container docker
RUN yum -y update \
&& yum -y install openssh-server \
&& yum -y install openssh-client \
&& yum -y install systemd \
&& yum clean all \
&& (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done) \
&& rm -f /lib/systemd/system/multi-user.target.wants/* \
&& rm -f /etc/systemd/system/*.wants/* \
&& rm -f /lib/systemd/system/local-fs.target.wants/* \
&& rm -f /lib/systemd/system/sockets.target.wants/*udev* \
&& rm -f /lib/systemd/system/sockets.target.wants/*initctl* \
&& rm -f /lib/systemd/system/basic.target.wants/* \
&& rm -f /lib/systemd/system/anaconda.target.wants/*
RUN systemctl enable sshd
RUN echo "your root password" | passwd --stdin root
VOLUME [ "/sys/fs/cgroup" ]
CMD [ "/usr/sbin/init" ]

2、 制作镜像:
通过Docker生成新的镜像.

1
$ docker build --rm -t centos-sshd:7.3 - < [Dockerfile name]

3、 启动容器:

启动容器需要使用--privileged参数。

1
$ docker run --privileged -ti -e container=docker -p 127.0.0.1:30022:22 centos-sshd:7.3