1.基于commit命令创建

Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像。命令格式为docker commit CONTAINER [REPOSITORY[:TAG]]。

(1)创建一个镜像

docker run -it ubuntu:14.04 /bin/bash

更新apt缓存,并安装openssh-server

apt-get update

apt-get install openssh-server -y

(2)安装配置SSH服务

apt-get install openssh-server -y

如果需要正常启动SSH服务,则目录/var/run/sshd必须存在。手动创建它,并启动SSH服务:

mkdir -p /var/run/sshd

/usr/bin/sshd -D &

netstat -tunlp

(3)保存镜像

docker commit 1b902596b8b9 sshd:ubuntu

(4)使用镜像

启动容器,并添加端口映射10022-->22。其中10022是宿主主机的端口,22是容器的SSH服务监听的端口:

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

启动成功后,可以在宿主主机上看到容器运行的详细信息

在宿主主机或其他主机上,可以通过SSH访问10022端口来登录容器

ssh IP -p 10022

2.使用Dockerfile创建

(1)创建工作目录

mkdir sshd_ubuntu

cd ssh_ubuntu

在该目录中创建Dockerfile和run.sh文件

(2)编写run.sh脚本和authorized_keys文件

run.sh脚本内容如下:

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

在宿主主机上生成SSH密钥,并创建authorized_keys文件:

ssh-keygen -t rsa

cat authorized_keys.pub > authorized_keys

(3)编写Dockerfile文件

#设置继承镜像
FROM ubuntu:14.04 #提供一些作者信息
MAINTAINER docker_user(user@docer.com) #下面开始运行更新命令
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.sh/#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"]

(4)创建镜像

执行该命令即可创建镜像

docker build -t sshd:dockerfile .

记得必须要在Dockerfile文件存在的目录执行该命令否则会报找不到目录异常

docker images

(5)测试镜像,运行容器

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

在宿主主机新打开一个终端,连接到新建容器:

ssh 192.168.126.130 -p 10122

Docker实战(七)之为镜像添加SSH服务的更多相关文章

  1. 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务

    之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...

  2. 为镜像添加SSH服务

    操作Docker容器介绍了一些进入容器的办法,比如attach.exec等命令,但是这些命令都无法解决远程管理容器的问题.因此,当需要远程登录到容器内进行一些操作的时候,就需要SSH的支持了. 如何自 ...

  3. Docker-为镜像添加SSH服务

    进入容器的办法有很多,包括exec.attach等命令,但是这些命令都无法解决远程管理容器的问题,因此,需要SSH的支持 基于commit命令创建 docker提供了docker commit命令,支 ...

  4. Docker实战-为镜像添加SSH服务

    1.基于docker commit命令创建 Docker提供了docker commit命令,支持用户提交自己对定制容器的修改,并生成新的镜像. 命令格式为:docker commit CONTAIN ...

  5. 为Docker镜像添加SSH服务

    一.基于commit命令创建 1. 首先下载镜像 $ docker run -it ubuntu:16.04 /bin/bash 2. 安装SSH服务 #更新apt缓存 root@5ef1d31632 ...

  6. docker 为镜像添加ssh服务-docker commit命令创建

    环境centos7 一.准备工作 docker pull ubuntu:18.04 docker run -it ubuntu:18.04 bash 二.配置软件源apt-get update,如果系 ...

  7. docker为镜像添加SSH服务

    启动并进入容器中 这里用db1容器完成实验. 安装openssh服务和修改sshd配置文件 安装openssh yum install openssh-server openssh-clients - ...

  8. docker 为镜像添加ssh服务-使用Dockerfile 创建

    首先,基于要添加内容的镜像ubuntu:18.04运行一个容器, 在宿主机(下面步骤是在容器中创建的,应该在宿主机创建进行以下步骤) 一.创建一个工作目录 二.创建Dockerfile 和脚本run. ...

  9. 添加ssh服务构建新镜像-docker commit 方式01

    添加ssh服务构建新镜像-docker commit 方式 1:docker commit构建自定义镜像---一般不推荐使用这种方式构建新镜像 1:ubuntu基础镜像下载 ubuntu@ubuntu ...

随机推荐

  1. Win8操作系统下IIS如何配置asp.net的运行环境(win7同样)

    一.把鼠标放在电脑屏幕的左下角然后右击,弹出如下图菜单,选择“程序和功能”(快捷键win+X).(win7点击电脑左下角的“开始”,然后点击“控制面板”打开程序与功能界面): 二.进入程序与功能界面后 ...

  2. BZOJ3672: [Noi2014]购票(dp 斜率优化 点分治 二分 凸包)

    题意 题目链接 Sol 介绍一种神奇的点分治的做法 啥?这都有根树了怎么点分治?? 嘿嘿,这道题的点分治不同于一般的点分治.正常的点分治思路大概是先统计过重心的,再递归下去 实际上一般的点分治与统计顺 ...

  3. 【HTML&CSS】搜狐页面代码编写

    <!DOCTYPE html> <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"& ...

  4. EventBus 3.0源码解析

    现在网上讲解EventBus的文章大多数都是针对2.x版本的,比较老旧,本篇文章希望可以给大家在新版本上面带来帮助. EventBus 是专门为Android设计的用于订阅,发布总线的库,用到这个库的 ...

  5. canvas验证码 - 滑块拼图

    滑块拼图型的验证方式已经流行起来,多数的实现方式是直接加载两张分割好的图片.现在用canvas去自动修剪图片,节省修图工作量和http请求: 加载一张整图,用canvas切割缺口,缺口位置在固定范围内 ...

  6. linux 目录操作命令 mkdir、rmdir、cd -、cp、scp、mv、rm

    mkdir /bin/mkdir-p [目录名] 递归创建 mkdir /tmp/testmkdir /tmp/noexit/test在一个不存在的目录下创建一个目录test,要使用-p选项 可以创建 ...

  7. Object hashcode

    java jvm怎么找到一个对象? 一个对象有一个独一无二的hashcode,这样就可以找到这个对象了. 但java 的hashcode 实现的不好,有可能两个不同的对象有一个相同的hashcode, ...

  8. 直到黎明 Until Dawn 后感

    直到黎明 会免游戏.白金神作.近些年的恐怖电影都有游戏化的趋势,韩国的某岩vlog,美国的真心话大冒险,都把观众作为meta代入游戏,几乎模糊了游戏与游戏的边界,直到黎明这部电影,与当年的暴雨和超凡双 ...

  9. Linux 安装MySQL-python

    vi ~/.bash_profile PATH="/usr/local/mysql/bin:${PATH}" export PATH export DYLD_LIBRARY_PAT ...

  10. Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'

    运行sudo apt-get update 时Ubuntu 16.04出现: Problem executing scripts APT::Update::Post-Invoke-Success 'i ...