一、需求

由于在测试环境中使用了docker官网的centos 镜像,但是该镜像里面默认没有安装ssh服务,在做测试时又需要开启ssh。所以上网也查了查资料。下面详细的纪录下。在centos 容器内安装ssh后,转成新的镜像用于后期测试使用。
二、镜像定制
第一种方式(手动修改容器镜像)
1.先下载centos镜像
[root@docker ~]# docker pull centos
2.启动容器并进行配置
启动容器,
[root@docker ~]# docker run -it -d --name test-centos1 centos d72250ecaa5e3e36226a1edd749f494d9f00eddc4143c81ac3565aa4e551791a
命令注释:-it : 进行交互式操作
-d : 等同于 -d=true,容器将会在后台运行,不然执行一次命令后,退出后,便是exit状态了。
--name : 容器启动后的名字,默认不指定,将会随机产生一个名字。或者使用 -name="containers_name"
centos:使用的镜像名称
进入容器,安装ssh server,以及配置开机启动
[root@docker ~]# docker exec -it test-centos1 /bin/bash [root@d72250ecaa5e /]# ifconfig bash: ifconfig: command not found
注:命令最后参数 /bin/bash: 指进入容器时执行的命令(command)
我们检查了下容器,暂时安装以下必用的软件吧 net-tools,openssh-server
[root@d72250ecaa5e /]# yum install openssh-server net-tools -y
创建ssh 所需的目录,并在根目录创建sshd 启动脚本
[root@d72250ecaa5e /]# mkdir -pv /var/run/sshd mkdir: created directory '/var/run/sshd' [root@d72250ecaa5e /]# cat /auto_sshd.sh #!/bin/bash /usr/sbin/sshd -D [root@d72250ecaa5e /]# chmod +x /auto_sshd.sh
修改容器内root 的账户密码
[root@d72250ecaa5e /]# echo "root:iloveworld" | chpasswd
生成ssh 主机dsa 密钥(不然ssh 该容器时,会出现错误。)
[root@d72250ecaa5e /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key [root@d72250ecaa5e /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
我们加一个history记录的时间功能吧,这样方便后期查看
echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile
OK,配置基本完毕咯。清理命令历史纪录,之后退出容器。现在可以生成一个新的docker 镜像了。
3.配置完成后,进行打包成新的镜像
[root@docker ~]# docker commit test-centos1 centos_sshd:7.0 sha256:6e3330b30dfff5f029f102874e54cfffffbc37dcf2a4eb7304c817148fbc944d [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_sshd 7.0 6e3330b30dff 8 seconds ago 310.1 MB docker.io/ubuntu latest e4415b714b62 12 days ago 128.1 MB
命令注释:commit: 提交一个具有新配置的容器成为镜像,后面跟容器的name 或者容器Id ,最后是生成新镜像的名字
更新:这条命令更方便以后启动,如下:
[root@docker ~]# docker commit --change='CMD ["/auto_sshd.sh"]' -c "EXPOSE 22" test-centos1 centos_sshd:7.0 sha256:7bb4efd82c4ff1f241cbc57ee45aab1b05d214b1e9fcd51196696c67d480e70b
命令注释: --change : 将后期使用此镜像运行容器时的命令参数、开放的容器端口提前设置好。
4.验证
查看镜像,并启动新的容器
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_sshd 7.0 7bb4efd82c4f 4 minutes ago 310.1 MB docker.io/ubuntu latest e4415b714b62 12 days ago 128.1 MB [root@docker ~]# docker run -d -it --name centos_7.0-1 centos_sshd:7.0 ec17e553d5c4c60865afeb99df8dfd1f4e7d4ba6e1b0d5516f9127f09d1d6356 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec17e553d5c4 centos_sshd:7.0 "/auto_sshd.sh" 6 seconds ago Up 5 seconds 22/tcp centos_7.0-1
进行ssh测试,先查看一下该容器的ip,之后ssh。ok
[root@docker ~]# docker exec centos_7.0-1 hostname -i 172.17.0.4 [root@docker ~]# ssh root@172.17.0.4 The authenticity of host '172.17.0.4 (172.17.0.4)' can't be established. RSA key fingerprint is 87:88:07:12:ac:0a:90:28:10:e1:9e:eb:1f:d6:c9:9d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.17.0.4' (RSA) to the list of known hosts. root@172.17.0.4's password: Last login: Tue Nov 29 16:00:49 2016 from gateway [root@ec17e553d5c4 ~]# w 16:34:17 up 63 days, 7:49, 1 user, load average: 0.00, 0.02, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 gateway 16:34 1.00s 0.00s 0.00s w [root@ec17e553d5c4 ~]# ping gateway PING gateway (172.17.0.1) 56(84) bytes of data. 64 bytes from gateway (172.17.0.1): icmp_seq=1 ttl=64 time=0.048 ms
第二种方式(推荐:利用Dockerfile文件)
我的认为它就像ansible的playbook一样。Dockerfile包含创建镜像所需要的全部指令。基于在Dockerfile中的指令,我们可以使用Docker build命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。
1.创建Dockerfile文件
新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 )
[root@docker ~]# mkdir centos7-dockerfile [root@docker centos7-dockerfile]# cat Dockerfile # The dockerfile has Change add sshd services on Centos7.0 #centos7:latest image FROM centos:latest MAINTAINER Yifeng,http://www.cnblogs.com/hanyifeng #Install sshd net-tools RUN yum install openssh-server net-tools -y RUN mkdir /var/run/sshd #Set password for root RUN echo 'root:iloveworld' | chpasswd RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config #Set history record ENV HISTTIMEFORMAT "%F %T " #Fix sshd service:Read from socket failed: Connection reset by peer? RUN ssh-keygen -A #Change timezone CST RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #Open 22 port EXPOSE 22 #Auto running sshd service CMD ["/usr/sbin/sshd","-D"]
上述文件内容就是一个dockerfile 常见的命令组合。开头带#号的为注释
文件解释:
FROM: 必不可少的命令,从某个镜像作为基。如 FROM <image_name> ,或者 FROM <image_name>:<tag>. 如果不加tag,默认为latest。先从本地镜像仓库去搜索基镜像,如过本地没有,在去网上docker registry去寻找。
MAINTAINER:标明该Dockerfile作者及联系方式,可忽略不写
RUN:建立新的镜像时,可以执行在系统里的命令,如安装特定的软件以及设置环境变量。
ENV:设置系统环境变量(注意:写在/etc/profile里的命令在dockerfile这里会不生效,所以为改成ENV的方式)
EXPOSE:开放容器内的端口,但不和宿主机进行映射。方便在宿主机上进行开发测试。(如需映射到宿主机端口,可在运行容器时使用 -p host_port:container_port)
CMD:设置执行的命令,经常用于容器启动时指定的某个操作。如执行自定义脚本服务,或者是执行系统命令。CMD 只能存在一条,如在Dockerfile中有多条CMD的话,只有最后一条CMD生效!
2.执行build 创建镜像
使用docker build命令来创建镜像
[root@docker centos7-dockerfile]# docker build -t centos_sshd_1 .
-t 选项来docker build新的镜像以便于标记构建的镜像,. 表示当前目录,也可以指定dockerfile 文件所在目录。
下面缩略的内容是构建镜像时的输出,可以看下。
[root@docker centos7-dockerfile]# docker build -t centos_sshd_1 . Sending build context to Docker daemon 4.096 kB Step 1 : FROM centos:latest ---> 0584b3d2cf6d Step 2 : MAINTAINER Yifeng,http://www.cnblogs.com/hanyifeng ---> Running in da643b55dc77 ---> 1087074d44e4 Removing intermediate container da643b55dc77 Step 3 : RUN yum install openssh-server net-tools -y ---> Running in 5626d8f0f892 Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: mirrors.btte.net * extras: mirrors.tuna.tsinghua.edu.cn * updates: mirrors.btte.net Resolving Dependencies --> Running transaction check ---> Package net-tools.x86_64 0:2.0-0.17.20131004git.el7 will be installed ---> Package openssh-server.x86_64 0:6.6.1p1-25.el7_2 will be installed --> Processing Dependency: openssh = 6.6.1p1-25.el7_2 for package: openssh-server-6.6.1p1-25.el7_2.x86_64 --> Processing Dependency: fipscheck-lib(x86-64) >= 1.3.0 for package: openssh-server-6.6.1p1-25.el7_2.x86_64 --> Processing Dependency: libwrap.so.0()(64bit) for package: openssh-server-6.6.1p1-25.el7_2.x86_64 --> Processing Dependency: libfipscheck.so.1()(64bit) for package: openssh-server-6.6.1p1-25.el7_2.x86_64 --> Running transaction check ---> Package fipscheck-lib.x86_64 0:1.4.1-5.el7 will be installed --> Processing Dependency: /usr/bin/fipscheck for package: fipscheck-lib-1.4.1-5.el7.x86_64 ---> Package openssh.x86_64 0:6.6.1p1-25.el7_2 will be installed ---> Package tcp_wrappers-libs.x86_64 0:7.6-77.el7 will be installed --> Running transaction check ---> Package fipscheck.x86_64 0:1.4.1-5.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: net-tools x86_64 2.0-0.17.20131004git.el7 base 304 k openssh-server x86_64 6.6.1p1-25.el7_2 updates 436 k Installing for dependencies: fipscheck x86_64 1.4.1-5.el7 base 21 k fipscheck-lib x86_64 1.4.1-5.el7 base 11 k openssh x86_64 6.6.1p1-25.el7_2 updates 435 k tcp_wrappers-libs x86_64 7.6-77.el7 base 66 k Transaction Summary ================================================================================ Install 2 Packages (+4 Dependent packages) Total download size: 1.2 M Installed size: 3.4 M Downloading packages: Public key for fipscheck-lib-1.4.1-5.el7.x86_64.rpm is not installed warning: /var/cache/yum/x86_64/7/base/packages/fipscheck-lib-1.4.1-5.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Public key for openssh-6.6.1p1-25.el7_2.x86_64.rpm is not installed -------------------------------------------------------------------------------- Total 593 kB/s | 1.2 MB 00:02 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Importing GPG key 0xF4A80EB5: Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>" Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 Package : centos-release-7-2.1511.el7.centos.2.10.x86_64 (@CentOS) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : fipscheck-1.4.1-5.el7.x86_64 1/6 Installing : fipscheck-lib-1.4.1-5.el7.x86_64 2/6 Installing : openssh-6.6.1p1-25.el7_2.x86_64 3/6 Installing : tcp_wrappers-libs-7.6-77.el7.x86_64 4/6 Installing : openssh-server-6.6.1p1-25.el7_2.x86_64 5/6 Installing : net-tools-2.0-0.17.20131004git.el7.x86_64 6/6 Verifying : openssh-6.6.1p1-25.el7_2.x86_64 1/6 Verifying : openssh-server-6.6.1p1-25.el7_2.x86_64 2/6 Verifying : net-tools-2.0-0.17.20131004git.el7.x86_64 3/6 Verifying : tcp_wrappers-libs-7.6-77.el7.x86_64 4/6 Verifying : fipscheck-lib-1.4.1-5.el7.x86_64 5/6 Verifying : fipscheck-1.4.1-5.el7.x86_64 6/6 Installed: net-tools.x86_64 0:2.0-0.17.20131004git.el7 openssh-server.x86_64 0:6.6.1p1-25.el7_2 Dependency Installed: fipscheck.x86_64 0:1.4.1-5.el7 fipscheck-lib.x86_64 0:1.4.1-5.el7 openssh.x86_64 0:6.6.1p1-25.el7_2 tcp_wrappers-libs.x86_64 0:7.6-77.el7 Complete! ---> 7b249ed8cb54 Removing intermediate container 5626d8f0f892 Step 4 : RUN mkdir /var/run/sshd ---> Running in fc94a139d438 ---> ea2826eccc91 Removing intermediate container fc94a139d438 Step 5 : RUN echo 'root:iloveworld' | chpasswd ---> Running in ba53283081a7 ---> 7ce1ddb5d9c0 Removing intermediate container ba53283081a7 Step 6 : RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config ---> Running in 4112281a5bf0 ---> be21fb6b5b1e Removing intermediate container 4112281a5bf0 Step 7 : ENV HISTTIMEFORMAT "%F %T " ---> Running in f2081726e403 ---> f3fafca42170 Removing intermediate container f2081726e403 Step 8 : RUN ssh-keygen -A ---> Running in 2ca9e743dee7 ssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519 ---> 1a927943bee7 Removing intermediate container 2ca9e743dee7 Step 9 : RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ---> Running in afd43cc6d4d6 ---> 4a0cacf6cd72 Removing intermediate container afd43cc6d4d6 Step 10 : EXPOSE 22 ---> Running in a03551bc3bcb ---> 3af544106bf4 Removing intermediate container a03551bc3bcb Step 11 : CMD /usr/sbin/sshd -D ---> Running in f45fe5eb5561 ---> d4620c9949b8 Removing intermediate container f45fe5eb5561 Successfully built d4620c9949b8
3.查看镜像列表,并创建容器
[root@docker centos7-dockerfile]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_sshd_1 latest d4620c9949b8 4 minutes ago 308.4 MB centos_sshd 7.0 7bb4efd82c4f 2 days ago 310.1 MB
我们刚刚新建的容器已经存在了,现在用它来创建容器
[root@docker centos7-dockerfile]# docker run -d -it --name centos-two centos_sshd_1 7ae51091c138d249b5e97f6957073e748db278c0f1cf856e968ca78a4aec1a5b
查看容器
[root@docker centos7-dockerfile]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7ae51091c138 centos_sshd_1 "/usr/sbin/sshd -D" 16 seconds ago Up 15 seconds 22/tcp centos-two
可以看到容器的command 就是我们之前定义启动ssh 服务的,并且开放了22端口。
现在我们在宿主机上查看下该容器的ip,然后用ssh 链接进去。
[root@docker ~]# docker exec centos-two hostname -I 172.17.0.7 [root@docker ~]# ssh root@172.17.0.7 The authenticity of host '172.17.0.7 (172.17.0.7)' can't be established. ECDSA key fingerprint is 7a:38:69:d7:5e:f4:db:e8:3c:ea:92:a4:1a:a1:7b:9a. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.17.0.7' (ECDSA) to the list of known hosts. root@172.17.0.7's password: [root@7ae51091c138 ~]# w 11:19:34 up 65 days, 18:34, 1 user, load average: 0.01, 0.04, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 gateway 11:19 6.00s 0.00s 0.00s w
OK。上述就是定义镜像的两种方式,如果还有其它更为方便的还望不吝赐教哈。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# docker
# 容器制作镜像
# 容器创建镜像
# 容器生成镜像
# 详解docker容器硬盘动态扩容
# Docker 技巧之删除Docker容器和镜像
# Docker容器通过独立IP暴露给局域网的方法
# Docker容器中运行nginx
# 详解Docker 容器互联方法
# 详解docker容器间通信的一种方法
# docker容器跨服务器的迁移的方法
# 使用Grafana 展示Docker容器的监控图表并设置邮件报警规则(图解)
# Docker 中的容器完全解析
# 镜像
# 新建一个
# 将会
# 后期
# 容器内
# 机上
# 就像
# 不吝赐教
# 两种
# 中有
# 并在
# 所需
# 这条
# 可在
# 或者是
# 可以看到
# 自定义
# 可以使用
# 在里面
# 如需
相关文章:
青浦网站制作公司有哪些,苹果官网发货地是哪里?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
江苏网站制作公司有哪些,江苏书法考级官方网站?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何通过VPS搭建网站快速盈利?
建站之星安装路径如何正确选择及配置?
制作证书网站有哪些,全国城建培训中心证书查询官网?
平台云上自助建站如何快速打造专业网站?
免费网站制作appp,免费制作app哪个平台好?
小程序网站制作需要准备什么资料,如何制作小程序?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
微课制作网站有哪些,微课网怎么进?
如何快速选择适合个人网站的云服务器配置?
个人网站制作流程图片大全,个人网站如何注销?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
宝塔建站后网页无法访问如何解决?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
开封网站制作公司,网络用语开封是什么意思?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何用腾讯建站主机快速创建免费网站?
婚礼视频制作网站,学习*后期制作的网站有哪些?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何通过智能用户系统一键生成高效建站方案?
临沂网站制作企业,临沂第三中学官方网站?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何选择可靠的免备案建站服务器?
建站主机选择指南:服务器配置与SEO优化实战技巧
常州企业网站制作公司,全国继续教育网怎么登录?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
建站三合一如何选?哪家性价比更高?
广州建站公司哪家好?十大优质服务商推荐
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
建站主机选购指南与交易推荐:核心配置解析
金*站制作公司有哪些,金华教育集团官网?
如何确保西部建站助手FTP传输的安全性?
如何用wdcp快速搭建高效网站?
公司门户网站制作流程,华为官网怎么做?
高性价比服务器租赁——企业级配置与24小时运维服务
如何实现建站之星域名转发设置?
如何在腾讯云服务器快速搭建个人网站?
网站制作难吗安全吗,做一个网站需要多久时间?
制作营销网站公司,淘特是干什么用的?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何制作一个表白网站视频,关于勇敢表白的小标题?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
*请认真填写需求信息,我们会在24小时内与您取得联系。