文档章节

Docker 之Dockerfile 快速学习(二)

ZhouLS
 ZhouLS
发布于 2014/07/18 13:42
字数 874
阅读 10603
收藏 1

Dockerfile文件的说明:

格式:

INSTRUCTION arguments

虽然指令忽略大小写,但建议用大写

# 是注释

MAINTAINER命令:

MAINTAINER命令用来指定维护者的姓名和联系方式


FROM命令:

FROM <image>/<image>:<tag>

这个是设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令

比如:

FROM centos6-base


RUN 命令:

会上面FROM 指定的镜像里执行任何命令,然后提交(commit)结果,提交的镜像会在后面继续用到

格式:

RUN <command> (这个命令运行一个shell中 - '/bin/sh -c')

或:

RUN ["executable", "param1", "param2"]

RUN 命令等价于:

docker run image_name command


CMD  and  ENTRYPOINT


命令设置在容器启动时执行命令


ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,需谨记

CMD,表示镜像运行默认参数,可被重写覆盖

ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效!

需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!


ENTRYPOINT/CMD,一般两者可以配合使用,比如:

ENTRYPOINT ["/usr/sbin/sshd"]

CMD ["-D"]


** 在Docker daemon模式下,无论你是使用ENTRYPOINT,还是CMD,最后的命令,一定要是当前进程需要一直运行的,才能够防容器退出。***


以下无效方式:

ENTRYPOINT service tomcat7 start #运行几秒钟之后,容器就会退出

CMD service tomcat7 start #运行几秒钟之后,容器就会退出


这样有效:

ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out

# 或者

CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out

这样也有效:

ENTRYPOINT ["/usr/sbin/sshd"]

CMD ["-D"]



USER 命令

比如指定 memcached 的运行用户,可以使用上面的 ENTRYPOINT or CMD来实现:

ENTRYPOINT ["memcached", "-u", "daemon"]

更好的方式:

ENTRYPOINT ["memcached"]

USER daemon


EXPOSE 命令


EXPOSE 命令可以设置一个端口在运行的镜像中暴露在外

在docker使用--link来链接两容器时会用到相关端口

EXPOSEd <port>


ENV命令:

用于设置环境变更

使用此dockerfile生成的image新建container,可以通过 docker inspect CONTAINER ID  看到这个环境变量

也可以通过在docker run时设置或修改环境变量


ADD 命令:

从src复制文件到container的dest路径:

ADD <src> <dest>


<src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url

<dest> 是container中的绝对路径


VOLUME 命令

VOLUME ["<mountpoint>"]

如:

VOLUME ["/data"]

创建一个挂载点用于共享目录


WORKDIR 命令

WORKDIR /path/to/workdir

配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径

可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令

比如:

WORKDIR /a WORKDIR b WORKDIR c RUN pwd

其实是在 /a/b/c 下执行 pwd


Dockerfile文件到此介绍完毕。

下面是一个完整的Dockerfile文件

#Dockerfile
FROM centos6-base
MAINTAINER zhou_mfk <zhou_mfk@163.com>
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
RUN echo 'root:redhat' | chpasswd
RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
RUN yum install tar gzip gcc vim wget -y
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
CMD /usr/sbin/sshd -D
#End


© 著作权归作者所有

ZhouLS

ZhouLS

粉丝 16
博文 9
码字总数 8719
作品 0
浦东
系统管理员
私信 提问
IntelliJ IDEA快速实现Docker镜像部署

一、Docker开启远程访问 二、IntelliJ IDEA安装Docker插件 三、启用Docker 四、Spring Boot服务docker部署 1、新建一个Spring Boot工程,在工程里写一个REST接口,如下,简单返回一个字符串。...

吴伟祥
2018/11/09
4.1K
2
Docker 与 Kubernetes 开源书 - docker-book

本开源书,包含两部分: Docker Docker部分,包括: 入门 Dockerfile详解 镜像管理 工具 持久化 网络 Docker Compose 七大主题,涵盖Docker常用命令、Dockerfile常用命令、网络、存储、Docke...

周立_ITMuch
2018/12/25
1K
0
使用 Dockerfile定制Java Web镜像

一、前言 对使用 Docker 搭建 Java Web 运行环境(利用 commit 理解镜像构成 来源:黄勇 )博文的归纳: 1、启动容器: docker run <相关参数> <镜像 ID> <初始命令> -i:表示以“交互模式”运...

吴伟祥
2018/11/16
749
0
Docker学习与和应用(二)_使用Docker

在前一篇文章 Docker学习与和应用(一)_初步认识中,我们初步介绍了Docker解决了什么问题,Docker容器化技术与传统的虚拟化方式的区别,以及简要介绍了Docker的几大核心概念:镜像、容器和仓库...

dhb_oschina
2016/06/19
101
0
docker学习(四)--docker快速安装redis

Docker 安装 Redis 方法一、docker pull redis:3.2 查找Docker Hub上的redis镜像 runoob@runoob:~/redis$ docker search redisNAME DESCRIPTION STARS OFFICIAL AUTOMATEDredis Redis is an......

心诚则灵--艾
01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt程序打包发布方法(使用官方提供的windeployqt工具)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/toTheUnknown/article/details/81748179 如果使用到了Qt ...

shzwork
28分钟前
4
0
MainThreadSupport

MainThreadSupport EventBus 3.0 中的代码片段. org.greenrobot.eventbus.MainThreadSupport 定义一个接口,并给出默认实现类. 调用者可以在EventBus的构建者中替换该实现. public interface ...

马湖村第九后羿
49分钟前
3
0
指定要使用的形状来代替文字的显示

控制手机键盘弹出的功能只能在ios上实现,安卓是实现不了的,所以安卓只能使用type类型来控制键盘类型,例如你要弹出数字键盘就使用type="number",如果要弹出电话键盘就使用type="tel",但这...

前端老手
59分钟前
6
0
总结:Raft协议

一、Raft协议是什么? 分布式一致性算法。即解决分布式系统中各个副本数据一致性问题。 二、Raft的日志广播过程 发送日志到所有Followers(Raft中将非Leader节点称为Follower)。 Followers收...

浮躁的码农
今天
7
0
Flask-admin Model View字段介绍

Model View字段介绍 can_create = True 是否可以创建can_edit = True 是否可以编辑can_delete = True 是否可以删除list_template = 'admin/model/list.html' 修改显......

dillonxiao
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部