Docker定制容器镜像(利用Dockerfile文件)
1.创建Dockerfile文件
新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 )
[root@docker01 myfiles]# mkdir centos6.8_dockerfile
[root@docker01 myfiles]#
[root@docker01 myfiles]# cd centos6.8_dockerfile/
创建dockerfile文件(vim Dockerfile)
# The dockerfile has Change add sshd services on Centos7.
#centos7:latest image
FROM centos:6.8 MAINTAINER xxx,http://www.cnblogs.com/xxx #Install sshd net-tools
RUN yum install openssh-server net-tools -y
RUN mkdir /var/run/sshd #Set password for root
RUN echo 'root:xxxxxxx' | 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 port
EXPOSE #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@docker01 centos6.8_dockerfile]# docker build -t centos_ssh_1_6.8 .
Sending build context to Docker daemon 15.36 kB
Step / : FROM centos:6.8
---> 0cd976dc0a98
Step / : MAINTAINER xxx,http://www.cnblogs.com/xxx
---> Using cache
---> 025bdf5382de
Step / : RUN yum install openssh-server net-tools -y
---> Using cache
---> f970cedf0dc6
Step / : RUN mkdir /var/run/sshd
---> Using cache
---> 620754832e8c
Step / : RUN echo 'root:xxxxxxx' | chpasswd
---> Using cache
---> 8bcd6f4ae32b
Step / : RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
---> Using cache
---> b46214833685
Step / : ENV HISTTIMEFORMAT "%F %T "
---> Using cache
---> c18c2102a92e
Step / : RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
---> Running in 77698b6cfce0
---> 0e755b7f8c4a
Removing intermediate container 77698b6cfce0
Step / : EXPOSE
---> Running in 29ab858378f7
---> 3c8c969057c4
Removing intermediate container 29ab858378f7
Step / : CMD /usr/sbin/sshd -D
---> Running in 8ebd12375b64
---> ff004247b678
Removing intermediate container 8ebd12375b64
Successfully built ff004247b678
[root@docker01 centos6.8_dockerfile]#
-t 选项来docker build新的镜像以便于标记构建的镜像,. 表示当前目录,也可以指定dockerfile 文件所在目录。
3.查看镜像列表,并创建容器
[root@docker01 centos6.8_dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_ssh_1_6.8 latest ff004247b678 About a minute ago 291 MB
nginx_diy latest e24d0b283207 About an hour ago MB
nginx latest 34678a414b84 About an hour ago MB
docker01.lo:/nginx latest 958a7ae9e569 weeks ago MB
nginx <none> 958a7ae9e569 weeks ago MB
registry latest 9d0c4eabab4d weeks ago 33.2 MB
swarm latest 36b1e23becab months ago 15.9 MB
centos 6.8 0cd976dc0a98 months ago MB
4.创建和查看容器
[root@docker01 centos6.8_dockerfile]# docker run -d -it --name mycentos centos_ssh_1_6.
813171a387c2cc2a2c91ce96815e300c70bf1d42b6bd9e5c83f2d4608a2a2e6b
[root@docker01 centos6.8_dockerfile]# docker exec mycentos hostname -I
172.17.0.3
[root@docker01 centos6.8_dockerfile]# ssh root@172.17.0.3 date
Read from socket failed: Connection reset by peer
[root@docker01 centos6.8_dockerfile]# docker exec mycentos netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp ::: :::* LISTEN /sshd
原文链接:http://www.cnblogs.com/hanyifeng/p/6116067.html
Docker定制容器镜像(利用Dockerfile文件)的更多相关文章
- Docker 定制容器镜像的2种方法
一.需求 由于在测试环境中使用了docker官网的centos 镜像,但是该镜像里面默认没有安装ssh服务,在做测试时又需要开启ssh.所以上网也查了查资料.下面详细的纪录下.在centos 容器内安 ...
- Docker学习(六)——Dockerfile文件详解
Docker学习(六)--Dockerfile文件详解 一.环境介绍 1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录 ...
- docker定制化镜像的构建及基于该定制的镜像创建容器
1.在项目里创建Dockerfile(注意大小写)文件,执行构建命令:docker build -t tiny-node-1 /root/tiny-node-docker 其中tiny-node ...
- 【Docker】(10)---详细说说 Dockerfile文件
一.基础概念 1.基本概念 Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建.有了 Dockerfile,当我们需要定制 ...
- 【Docker学习之四】Docker自定义容器镜像
环境 docker-ce-19.03.1-3.el7.x86_64 centos 7 一.使用已有容器创建镜像-docker commit1.查看本地已有镜像 [root@node105 ~]# do ...
- docker nginx-php容器镜像瘦身优化
1. 在安装好php环境的容器,参考上面贴出的链接那篇文章的部分,做好基础工作: #创建工作目录 mkdir /rootfs #进入工作目录 cd /rootfs #创建基础目录 mkdir -p b ...
- Docker系列(三):Docker自定义容器镜像
将容器编程镜像: docker commit [repo:tag] 网上有这句话:当我们在制作自己的镜像的时候,会在container中安装一些工具.修改配置,如果不做commit保存 起来,那么co ...
- DocKer 创建容器 镜像端口映射失败
问题一: 我想使用同一个镜像创建多个容器,并映射端口出现以下错误,该怎么解决? docker: Error response from daemon: driver failed programmin ...
- docker下载容器镜像
下载镜像的命令非常简单,使用docker pull命令即可. 在docker的镜像索引网站上面,镜像都是按照用户名/镜像名的方式来存储的. 有一组比较特殊的镜像,比如ubuntu这类基础镜像,经过官方 ...
随机推荐
- 文件传输协议(FTP,SFTP,SCP)(修改中)
FTP(File Transfer Protocol):是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层.FTP ...
- 1. 自动化运维系列之Cobbler自动装机
preface 我们之前批量安装操作系统的时候都是采用pxe来安装,pxe也是通过网络安装操作系统的,但是PXE依赖于DHCP,HTTP/TFTP,kicstart等支持.安装流程如下所示: 对于上面 ...
- Synycovery 7.18f 一个优秀的同步软件
Serial Key Name: Vdown RG Code: MCKOFA7MNGUQY7954
- Centos7.3.1611安装mysql5.7.18 rpm教程 并设置datadir
一.卸载MariaDB CentOS7默认安装MariaDB而不是MySQL,而且yum服务器上也移除了mysql相关的软件包.因为MariaDB和MySQL可能会冲突,故先卸载MariaDB. 1. ...
- C#静态构造函数调用机制
https://blog.csdn.net/cjolj/article/details/56329230 若一个类中有静态构造函数,在首次实例化该类或任何的静态成员被引用时,.NET自动调用静态构造函 ...
- iOS 解决UIScrollView布局问题(布局受statusBar和NavigationBar影响)
iOS APP中有一个非常好用的功能,那就是当我们在滚动一个UIScrollView滚动了很远很远的时候,假如我们想让UIScrollView回到顶部,我们绝大多数人的做法就是慢慢慢慢的滚动UIScr ...
- Axis2发布服务,支持Tomcat和Weblogic的SSHWeb项目部署
先说下遇到的问题,在SSHWeb项目中使用JDK自带的jar发布WebService(Endpoint.publish),在tomcat下可以正常发布,但是在Weblogic报奇葩错误,如Struts ...
- iOS开发-获取子视图坐标系中Point、Rect在父视图坐标系中的实际值
iOS提供了方法来完成上述值得转换 convertRect:toView:, convertRect:FromView: convertPoint:toView: and convertPoint:f ...
- Ansible 管理任务计划
ansible 使用 cron 模块来管理任务计划: [root@localhost ~]$ ansible 192.168.119.134 -m cron -a "name='test c ...
- Github上star数超1000的Android列表控件
Android开发中,列表估计是最最常使用到的控件之一了.列表相关的交互如下拉刷新,上拉更多,滑动菜单,拖动排序,滑动菜单,sticky header分组,FAB等等都是十分常见的体验.Github中 ...