Docker 添加容器SSH服务(4)



title: Docker 添加容器SSH服务(4)
date: 2018-12-15 20:26:12
tags:

  • Docker
    categories: Docker
    copyright: true
    ---

Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.Docker自开源后受到广泛的关注和讨论,目前已有多个相关项目(包括Docker三剑客、Kubernetes等),逐渐形成了围绕Docker容器的生态体系,由于Docker在业界造成的影响力实在太大,dotCloud公司后来也直接改名为Docker Inc,并专注于Docker相关技术和产品的开发.

很多时候我们需要登陆到容器内部操作,此时我们就需要开启容器的SSH支持了,下面的小例子将具体介绍三种分配IP地址的方法,分别是pipworl分配,commit分配,Docker分配等.

基于commit命令创建

Docker提供了commit命令,支持用户提交自己对定制容器的修改,并生成新的镜像.这里将介绍如何用docker commit命令,添加SSH服务的操作流程,首先默认情况下ssh服务在镜像里是没有被安装的,我们需要手动配置一下,后期生成镜像启动就方便啦.

1.首先我们先来使用Centos镜像,放入后台并进入容器内部.

[[email protected] ~]# docker pull centos:latest
[[email protected] ~]# docker run -itd --name my_ssh --net=host centos:latest
[[email protected] ~]# docker exec -it my_ssh /bin/bash
[[email protected] /]# yum install -y passwd openssh openssh-server

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

[[email protected] /]# mkdir -p /var/run/sshd
[[email protected] /]# /usr/sbin/sshd -D &

上面的启动命令会报错,这个错误解决方案是,执行下面命令,创建这些文件.

[[email protected] /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
[[email protected] /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[[email protected] /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''

3.然后,修改/etc/ssh/sshd_config配置信息UsePAM yes改为UsePAM no,UsePrivilegeSeparation sandbox改为UsePrivilegeSeparation no,可以用vim修改,也可以用下面命令.

[[email protected] /]# sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
[[email protected] /]# sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config  不通过pam验证

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

4.修改完后,重新启动sshd服务,并修改一个root密码.

[[email protected] /]# /usr/sbin/sshd -D
[[email protected] /]# echo "root" | passwd --stdin root
[[email protected] /]# echo "/usr/sbin/sshd -D &" >> /etc/profile

5.创建一个自启动脚本文件,写入一下内容.

[[email protected] /]# vi /run.sh
#!/bin/bash
/usr/sbin/sshd -D

[[email protected] /]# chmod +x run.sh
[[email protected] /]# exit

6.保存镜像,将所退出的容器用commit命令保存为一个新的my_ssh:centos镜像.

[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS
e1fc02dfd24f        centos:latest       "/bin/bash"         4 minutes ago       Up 4 minutes

[[email protected] ~]# docker commit e1fc my_ssh:centos
sha256:48997373aee923ee9b6af833de4aa9842dd090c7fee1f2569aa187e66b96231c

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myssh               centos              48997373aee9        25 seconds ago      280MB
centos              latest              1e1148e4cc2c        10 days ago         202MB
hello-world         latest              4ab4c602aa5e        3 months ago        1.84kB

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

[[email protected] ~]# docker run -itd -p 10000:22 my_ssh:centos
[[email protected]lhost ~]# docker run -p 10000:22 -itd my_ssh:centos /run.sh

b0b073cf4bf933b291f0e0139220d09325e7dead7a1a77cacc243516c09ee931

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

[[email protected] ~]# ssh [email protected] -P 10000

使用Dockerfile创建

上面的方式比较复杂,接下来我们来看一个简单的,使用dockerfile的方式来创建一个Ubuntu镜像.

1.首先,拉取一个基本镜像,并创建一个sshd_ubuntu工作目录.

[[email protected] ~]# docker pull ubuntu:latest

[[email protected] ~]# mkdir ssh_ubuntu
[[email protected] ~]# cd ssh_ubuntu/
[[email protected] ssh_ubuntu]# touch Dockerfile
[[email protected] ssh_ubuntu]# touch run.sh

2.编写run.sh以及,在宿主主机上生成SSH密钥对,并创建authorized_keys文件.

[[email protected] ssh_ubuntu]# vim run.sh
#!/bin/bash
/usr/sbin/sshd -D

[[email protected] ssh_ubuntu]# ssh-keygen -t rsa
[[email protected] ssh_ubuntu]# cat ~/.ssh/id_rsa.pub >authorized_keys
[[email protected] ssh_ubuntu]# cp -a authorized_keys /root/.ssh/

3.下面是Dockerfile的内容,这和commit命令创建镜像过程,所进行的操作基本一致.

#设置继承镜像
FROM ubuntu:latest
#提供一些作者的信息
MAINTAINER docker_user ([email protected])
#下面开始运行更新命令
#RUN apt-get update
#安装ssh服务
RUN apt-get install -y passwd openssh 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
#设置初始密码
RUN echo "root"|passwd --stdin root
#设置自启动命令
CMD ["/run.sh"]

4.创建镜像,在sshd_ubuntu目录下,使用build命令来创建镜像.这里需要注意最后还有一个".",表示使用当前目录中的Dockerfile

[[email protected] ~]# cd sshd_ubuntu
[[email protected] ssh_ubuntu]# docker build -t sshd:Dockerfile .

5.测试镜像,运行容器,并通过ssh连接一下.

[[email protected] ~]# docker run -d -p 10122:22 sshd:Dockerfile
890c04ff8d769b604386ba4475253ae8c21fc92d60083759afa77573bf4e8af1
[[email protected] ~]# ssh 192.168.1.200 -p 10122

在Docker社区中,对于是否需要为Docker容器启用SSH服务一直有争论,反对方的观点是:Docker的理念是一个容器只运行一个服务.因此,如果每个容器都运行一个额外的SSH服务,就违背了这个理念.另外认为根本没有从远程主机进入容器进行维护的必要.

使用pipwork分配

1.安装Git工具,并克隆pipwork,放入可执行目录,并给予相应的权限.

[[email protected] ~]# yum install -y git
[[email protected] ~]# git clone https://github.com/jpetazzo/pipework

[[email protected] ~]# cd pipework/
[[email protected] pipework]# cp -a pipework /usr/local/bin/
[[email protected] pipework]# chmod +x /usr/local/bin/pipework

2.将本机配置成网桥,使之能够互相通信.

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
DEVICE=eno16777728
TYPE=Ethernet
BOOTPROTO=static
BRIDGE=br0
NM_CONTROLLED=yes
ONBOOT=yes

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
BOOTPROTO=static
IPADDR=192.168.1.13
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
ONBOOT=yes

[[email protected] ~]# reboot

3.下载一个Centos镜像,并运行且指定--net="none",后期使用pipwork分配IP地址.

[[email protected] ~]# docker pull centos:latest

[[email protected] ~]# docker run -d --name my_ssh --restart=always --net="none" centos:latest
cf8354804431a7830a6a46999ac20240ad6402d505d3130789fdc4bbb227e4e3

4.通过命令分配IP地址,与子网掩码.

[[email protected] ~]# pipework br0 镜像名称 192.168.1.100/24

[[email protected] ~]# docker inspect my_ssh |grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "192.168.1.100/24",
                    "IPAddress": "192.168.1.100/24",

原文地址:https://www.cnblogs.com/LyShark/p/10872328.html

时间: 2024-10-28 10:43:57

Docker 添加容器SSH服务(4)的相关文章

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

Dockerfile 支持系统启动 运行ssh 服务 原文链接:http://blog.csdn.net/kongxx/article/details/38395305 # 选择一个已有的os镜像作为基础 FROM centos:centos6 # 镜像的作者 MAINTAINER Fanbin Kong "[email protected]" # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no RUN yum install -y ope

docker中安装ssh服务

系统:Debian Docker 目标:在docker(debian系统)中安装ssh服务,实现远程登陆和控制docker 步骤: 初始状态:通过docker pull debian得到的一个debian的docker 1,docker run -i -t debian /bin/bash 登录到docker的shell界面,方便之后的操作 2,apt-get update: docker默认root登录,apt-get install 几乎不能用,因为需要更新一下源(可能是为了更轻量) 3,a

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

通过DockerFile创建ssh服务镜像

说明:创建一个含有sshd服务的基础镜像,再在这个基础镜像中创建其它中间件镜像,再利用中间件镜像创建应用容器.通过Dockerfile可以创建任意自定义容器,配合supervisord服务完美搭配. 1. 编写Dockerfile [[email protected] ~]# vi /root/base_ssh/Dockerfile -----------------DockerFile----------------- # This is Dockerfile    # Author: kou

为Docker镜像添加SSH服务

一.基于commit命令创建 1. 首先下载镜像 $ docker run -it ubuntu:16.04 /bin/bash 2. 安装SSH服务 #更新apt缓存 [email protected]:/# apt-get update [email protected]:/# apt-get install openssh-server -y 3. 配置SSH服务:如果需要正常启动SSH服务,则需手动创建/var/run/sshd目录,并启动ssh服务. 1) 创建目录 [email pr

Docker使用Dockerfile创建支持ssh服务自启动的容器镜像

1. 首先创建一个Dockerfile文件,文件内容如下 # 选择一个已有的os镜像作为基础 FROM centos:centos6 # 镜像的作者 MAINTAINER Fanbin Kong "[email protected]" # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /

创建支持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

「一」创建一个带 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

[CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务

转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为CoreOS支持的第一套应用程序隔离方案.本文将主要介绍在具体的场景下,如何在CoreOS中恰当地管理Docker容器. 注:本文首发于CSDN,转载请标明出处. [编者按]在“漫步云端:CoreOS实践指南”系列的前几篇文章中,ThoughtWorks的软件工程师林帆主要介绍了CoreOS及其相关