设为首页 收藏本站
查看: 1716|回复: 0

[经验分享] 【Docker】制作一个支持SSH终端登录的镜像

[复制链接]

尚未签到

发表于 2015-4-18 06:18:42 | 显示全部楼层 |阅读模式
  首先从官方或者docker.cn的镜像库中pull下来ubuntu镜像:  



docker pull ubuntu
  现在用命令查看一下pull下来的ubuntu镜像:



docker images
DSC0000.png
  关于如何构建自定义的镜像,有两种方法:
  1、使用docker commit 命令
  2、使用Dockerfile
  无论是官方或者其他的教程,都大力推荐使用第二种方法,因为使用Dockerfile构建拥有比提交命令更高的灵活性和可维护性。所以这里也是通过Dockerfile来构建这个自定义的镜像。
  ps: 关于commit命令,其实就是使用docker run -i -t XXX /bin/bash 进入容器的交互界面,进行各种操作后,再将这个容器通过提交命令提交上去来达到目的的。 

  首先编写Dockerfile文件:



1 FROM ubuntu
2
3 MAINTAINER linxiong "linxiong945@gmail.com"
4
5 # 更新源,安装ssh server
6 RUN echo "deb http://mirrors.163.com/ubuntu precise main universe" > /etc/apt/sources.list
7 RUN apt-get update
8 RUN apt-get install -y openssh-server
9 RUN mkdir /var/run/sshd
10
11 # 设置root ssh远程登录密码为123456
12 RUN echo "root:123456" | chpasswd
13
14 # 容器需要开放SSH 22端口
15 EXPOSE 22
  其中原生ubuntu镜像中的下载源速度太慢,所以用163的源来更替他,在国内,163的源还是很快的。
  在使用apt-get安装软件时,需要加上"-y"的参数,如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。所以就会造成安装中断这种问题。
DSC0001.png
  随后通过chpasswd方法给ssh添加root用户登录密码为123456。"chpasswd"可以批量的为ssh添加以"username:passwd"为格式的用户与密码。可以将username:passwd批量的写在一个txt文件中,然后使用xxx.txt chpasswd方法为ssh批量添加用户。
  最后容器需要开发22端口,以使外部能够访问容器内部。

  下一步就可以运行命令来构建支持SSH登录的ubuntu镜像了:



docker build -t linxiong/login .
  其中:
  -t   给该镜像赋予一个tag,用以将来的调用与搜索
  .   表示调用当前目录的Dockerfile
  然后你就能看到构建过程:
DSC0002.png
  当成功构建完成后,你能看到:
DSC0003.png
  此刻用"docker images"命令查看镜像,你能看到多了一个linxiong/login的镜像:
DSC0004.png

  随后我们用命令来使容器能长时间运行在后台,不至于运行了几秒后容器会自动退出:



docker run -d -p 22 -p 80:8080 linxiong/login /usr/sbin/sshd -D
  其中:
  -d  表示使容器在后台运行
  -p      指定端口设置
  -p 80:8080  表示端口的映射,映射主机端口到容器,方便外部访问容器内服务,主机端口80可以省略,省略表示把容器端口8080映射到一个动态端口。
  /usr/sbin/sshd   表示启动ssh服务
  -D     表示容器长时间运行,不至于几秒后退出
  这时候用docker ps命令查看正运行的容器:
DSC0005.png
  发现容器被随机赋予了一个49159端口,这时候我们可以在主机用ssh命令来登录这个容器:



ssh root@127.0.0.1 -p 49159
  将会出现:
DSC0006.png
  输入yes,回车,会提示你输入密码,正确输入密码后,就进去到了容器环境中去了!
DSC0007.png
  接下来,想在容器中安装什么东西,运行什么东西都可以了。
  启动镜像实例的时候,指定了 -p 80:8080,容器开放8080端口,映射到宿主机端口就是80。知道宿主机IP地址,那就可以自由访问容器了。

  今天在实验过程中,还出现了一个问题,这里将其记下:
DSC0008.png
  这里是软件冲突了,只需要先将vim-common卸载,再安装vim就可以了。
  Dockerfile:



1 FROM ubuntu
2
3 MAINTAINER linxiong "linxiong945@gmail.com"
4
5 RUN echo "deb http://mirrors.163.com/ubuntu precise main universe" > /etc/apt/sources.list
6 RUN apt-get update
7 RUN apt-get remove vim-common
8 RUN apt-get install -y vim
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58192-1-1.html 上篇帖子: [Go语言]从Docker源码学习Go——结构和函数的定义 下篇帖子: docker容器操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表