Docker中怎么构建SSH镜像(docker,ssh,开发技术)

时间:2024-05-03 20:38:57 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :
Docker中怎么构建SSH镜像

基于commit命令方式创建

docker的安装
[root@test01~]#yuminstalldocker[root@test01~]#systemctlenabledocker[root@test01~]#systemctlstartdocker
下载本地镜像

使用docker run命令时,Docker会自动的先查找本地的镜像,如果没有找到,会继续向docker hub上查找并下载。我习惯先下载下来docker pull centos 默认本系统版本的最新版,如果指定版本,加上冒号和版本号

[root@test01~]#dockerpullcentos:7.4.1708[root@test01~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEdocker.io/centos7.4.17083afd47092a0e3monthsago196.6MB
创建交互型容器
[root@test01~]#dockerrun-it--name="ssh_server"centos:7.4.1708/bin/bash[root@ffe61e183a6c/]#
安装必要的服务

通过yum安装,检查yum源配置是否正确,centos7的默认和主机的一样

yuminstallopenssh-server安装ssh服务程序yuminstallnet-tools安装网络工具,用来查看端口,可不安装[root@ffe61e183a6c/]#yuminstallopenssh-servernet-tools

配置sshserver服务

使用ssh-keygen生成必要的密钥

[root@ffe61e183a6c/]#ssh-keygen-trsa-f/etc/ssh/ssh_host_rsa_key[root@ffe61e183a6c/]#ssh-keygen-tecdsa-f/etc/ssh/ssh_host_ecdsa_key[root@ffe61e183a6c/]#ssh-keygen-ted25519-f/etc/ssh/ssh_host_ed25519_key

启动ssh服务器,并查看是否启动成功

/usr/sbin/sshd-D&

此处的-D参数用于告诉SSH服务不以守护进程运行,而是和运行终端关联,有了运行终端,容器就不会退出

[root@ffe61e183a6c/]#/usr/sbin/sshd-D&[1]82[root@ffe61e183a6c/]#netstat-tunplaActiveInternetconnections(serversandestablished)ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programnametcp000.0.0.0:220.0.0.0:*LISTEN82/sshdtcp600:::22:::*LISTEN82/sshd[root@ffe61e183a6c/]#pkillsshd
编写SSH运行脚本

至此,我们可以证实ssh服务启动没有问题,接下来我们编写启动脚本,用于启动容器的时候运行,因为容器启动时只能运行一个命令,一般这个命令用来启动脚本

[root@ffe61e183a6c~]#catrun.sh#!/bin/bash/usr/sbin/sshd-D[root@ffe61e183a6c~]#chmod775run.sh
提交生成的镜像

使用docker commit将刚才的容器提交为一个新的镜像

[root@ffe61e183a6c~]#exitexit[root@test01~]#[root@test01~]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESffe61e183a6ccentos:7.4.1708"/bin/bash"19minutesagoExited(0)8secondsagossh_server[root@test01~]#dockercommitffe61e183a6cssh:commitsha256:be55c135e6141481aff3218b7a269b27d8f0faa295ed244849bf8ccf7ad1c7b1[root@test01~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEsshcommitbe55c135e61411secondsago296.5MBdocker.io/centos7.4.17083afd47092a0e3monthsago196.6MB
启动镜像
[root@test01~]#dockerrun-d-p2022:22ssh:commit/root/run.sh6d5628a2a336bc302fa45baf6e6a1d5ade2f6dd42a4697553c6e3dda1a0a3226[root@test01~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES6d5628a2a336ssh:commit"/root/run.sh"8secondsagoUp6seconds0.0.0.0:2022->22/tcpprickly_bell
补漏

刚才忘记给docker镜像设置密码了,这次需要给设置一下密码

[root@test01~]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES6d5628a2a336ssh:commit"/root/run.sh"6minutesagoExited(137)4minutesagoprickly_bellffe61e183a6ccentos:7.4.1708"/bin/bash"29minutesagoExited(0)9minutesagossh_server[root@test01~]#dockerrun-itssh:commit/bin/bash[root@0204e7257a24/]#passwdrootChangingpasswordforuserroot.Newpassword:Retypenewpassword:passwd:allauthenticationtokensupdatedsuccessfully.[root@0204e7257a24/]#exitexit[root@test01~]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES0204e7257a24ssh:commit"/bin/bash"29secondsagoExited(0)4secondsagotrusting_borg6d5628a2a336ssh:commit"/root/run.sh"9minutesagoExited(137)7minutesagoprickly_bellffe61e183a6ccentos:7.4.1708"/bin/bash"32minutesagoExited(0)12minutesagossh_server[root@test01~]#dockercommit0204e7257a24ssh02:commitsha256:b92a3cde4c9162cf12ac9cf61a61ce0332d3755b7708e4037c4df09b4e794177
再次启动需改后的镜像
[root@test01~]#dockerrun-d-p2022:22ssh02:commit/root/run.sh357ed4074c5d7f1ec1fe0df6af9c9a3162c70fa5624f7742bf59f309d9842247
验证是否成功
[root@test01~]#sshroot@192.168.1.60-p2022root@192.168.1.60'spassword:[root@357ed4074c5d~]#exit[root@test01~]#dockerstop357ed4074c5d

基于Dockerfile方式创建

准备文件

创建一个存放生成镜像相关文件的目录

该目录下需要创建2个文件:Dockerfile、run.sh。Dockerfile用于构建镜像,run.sh是启动SSH服务的脚本

mkdirssh_dockerfile&&cdssh_dockerfile
编写Dockerfile、run.sh
[root@test01ssh_dockerfile]#catDockerfile#使用的基础镜像FROMcentos:7.4.1708#添加作者信息MAINTAINERliuxin842887233@qq.com#安装SSH服务RUNyuminstall-yopenssh-server#添加必要的密钥RUNssh-keygen-trsa-f/etc/ssh/ssh_host_rsa_keyRUNssh-keygen-tecdsa-f/etc/ssh/ssh_host_ecdsa_keyRUNssh-keygen-ted25519-f/etc/ssh/ssh_host_ed25519_key#添加启动文件ADDrun.sh/root/run.shRUNchmod775/root/run.sh#导出端口EXPOSE22#设置默认启动命令CMD["/root/run.sh"][root@test01ssh_dockerfile]#catrun.sh#!/bin/bash/usr/sbin/sshd-D
创建镜像
[root@test01ssh_dockerfile]#dockerbuild./SendingbuildcontexttoDockerdaemon3.072kBStep1:FROMcentos:7.4.1708--->3afd47092a0eStep2:MAINTAINERliuxin842887233@qq.com--->Usingcache--->bd64810df0bcStep3:RUNyuminstall-yopenssh-server--->Usingcache--->5dc6301a0304Step4:RUNssh-keygen-trsa-f/etc/ssh/ssh_host_rsa_key--->Usingcache--->0ce92e5baa9fStep5:RUNssh-keygen-tecdsa-f/etc/ssh/ssh_host_ecdsa_key--->Usingcache--->fcb2bcf78ea0Step6:RUNssh-keygen-ted25519-f/etc/ssh/ssh_host_ed25519_key--->Usingcache--->7eae01e47ee2Step7:ADDrun.sh/root/run.sh--->4d07a723ffcfRemovingintermediatecontainer0b137a9274beStep8:RUNchmod775/root/run.sh--->Runningin1d5a9524da86--->324868eb5780Removingintermediatecontainer1d5a9524da86Step9:EXPOSE22--->Runninginada62bb87978--->a0b3df156e21Removingintermediatecontainerada62bb87978Step10:CMD/root/run.sh--->Runningin4f5031577ff4--->8679c00088efRemovingintermediatecontainer4f5031577ff4Successfullybuilt8679c00088ef[root@test01ssh_dockerfile]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZE8679c00088efAboutaminuteago295.9MBssh02commitb92a3cde4c9155minutesago296.5MBsshcommitbe55c135e614Aboutanhourago296.5MBdocker.io/centos7.4.17083afd47092a0e3monthsago196.6MB
运行镜像
[root@test01ssh_dockerfile]#dockerrun-d-p2022:228679c00088efe73a441afc8df35f42a30974c8697278fe6d35c1ac711d13ec817e74ffbf4008[root@test01ssh_dockerfile]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESe73a441afc8d8679c00088ef"/root/run.sh"14secondsagoUp12seconds0.0.0.0:2022->22/tcpfervent_yonath
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Docker中怎么构建SSH镜像的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Linux中trap命令怎么用下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18