docker制作镜像的两种方法
一、需求
由于在测试环境中使用了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)原文来自:飞走不可 ^_^ http://www.cnblogs.com/hanyifeng/p/6116067.html
我们检查了下容器,暂时安装以下必用的软件吧 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:latestMAINTAINER 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 常见的命令组合。开头带#号的为注释
原文来自:飞走不可 ^_^ http://www.cnblogs.com/hanyifeng/p/6116067.html
文件解释:
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 文件所在目录。
下面缩略的内容是构建镜像时的输出,可以看下。
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
docker制作镜像的两种方法相关推荐
- idea 使用 Docker 打包镜像的两种方式_07
idea 使用 Docker 打包镜像的两种方式_07 一.方式: 一.idea 的docker 插件 和Dockerfile: 二.pom和Dockerfile结合. 二.详解 第一种: 1.第一步 ...
- Docker中定制镜像的两种方法
一.需求 由于在测试环境中使用了docker官网的centos 镜像,但是该镜像里面默认没有安装ssh服务,在做测试时又需要开启ssh.所以上网也查了查资料.下面详细的纪录下.在centos 容器内安 ...
- 系统制作U盘两种方法及优缺点-UltraISO和Win32DiskImager,制作后怎么清空U盘恢复正常使用
1.下面介绍制作U盘启动的两种工具 1.1下面是UltraISO工具和Win32DiskImager工具下载地址 链接:https://pan.baidu.com/s/1Qjtm2uC6zAQYLT_ ...
- 如何将unity3d动画嵌入html,在Unity3D中使用精灵动画引擎制作动画的两种方法
7月28日消息,如今的游戏玩家对于游戏角色的动作要求越来越高,给开发者提出了众多的要求,工作量也相应上升.那么如何才能简单快速地制作角色动画以提升效率呢?下面就和大家分享两个在Unity3D中使用精灵 ...
- 在Unity3D中使用精灵动画引擎制作动画的两种方法
本文节选翻译自Gamasutra社区博客,文中观点仅代表作者本人意见,与本公众号无关. 在Unity3D中使用精灵动画引擎的两种方法 本文将介绍两种简单快捷的方法来制作游戏角色动画. 1.动画和动画控 ...
- docker创建镜像的三种方法
在工作中我们交付给你客户的往往都是一些定定制的容器,但是在这之前我们要先学会怎么去创建镜像来交付 一.docer创建镜像的创建方法 创建docker镜像的三种方法,分别是基于已有的容器创建.基于本地模 ...
- Docker生成镜像的两种方式
有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像 两种方式: 更新镜像:使用docker commit 命令 构建镜像:使用docker build 命 ...
- 简历上的照片怎么制作?这两种方法真的很简单
怎么制作简历上的照片呢?简历是每个人在找工作的时候必须要用到的,在简历中,除了填写我们出众的履历和工作技能之外,还有一个很重要的影响因素,那就是我们放在简历中的证件照,一个好的照片可以让面试官一眼记住 ...
- docker 使用supermin5工具制作镜像并且编写相应的dockerFile文件,并使用此文件来制作相应的镜像。两种方法进行例子分析
一 使用supermin5命令(若命令不存在则自己安装)构建centos7系统的docker镜像,镜像名称为centos-7,镜像预装yum.net-tools.initscripts和vi命令,构建 ...
最新文章
- tf.reduce_sum()函数
- C#和JavaScript的简单互交
- R语言ggplot2可视化指定图像标题(title)、副标题(subtitle)的内容、字体大小、字体类型、色彩、对齐方式等实战
- Amazon Go亮相:消费者无需结账即可完成店面购物
- Spring Boot 应用监控:Actuator与 Admin
- 遗传算法实例-求解函数极值
- H2Database 转义符
- java对象锁与类锁区别
- canvas绘制经典折线图(一)
- 两个富翁打赌_打赌您无法解决这个Google面试问题。
- mysql主从复制排错
- 怎样在js中使用EL表达式
- HttpURLConnection模拟form表单提交文件
- Design System Application - Chapter 2 字体 Typography
- 统计学习导论(ISLR) 第四章分类算法课后习题
- A Byte Of Python中文版 PDF、Word文件下载
- Fixed-step size(Solver)、Sample time(模块)、Sample time(powergui)三者的辨析
- 年龄识别数据集IMDB-WIKI
- 前端:3分钟实现一个共享桌面,还能听见麦克风声音哦
- NXP JN5189 ZigBee 3.0开发环境搭建
热门文章
- java8新特性之lambda表达式--超级详细版本
- 戴尔联手九大云计算伙伴成立云联盟:通吃混合云
- uniapp中使用拷贝,复制粘贴功能,uniapp,隐藏软键盘
- 【Multisim仿真】二极管加正向和反向电压测量实验
- 定义变量byte a = (byte)128输出a的结果
- PostgreSQL数据库锁机制——SpinLock
- Havel-Hakimi定理(判断是否可图序列)
- 洛谷 P3460 [POI2007]TET-Tetris Attac
- 计算机综合能力描述,计算机综合应用能力实训报告
- dnf剑魂buff等级上限_DNF:护石2.0副本将至!新增“金币燃烧机”,30W点一下