DockerFile的组成部署:

下面优先介绍下Dcokerfile的基础指令

一、CMD指令:容器启动时要莫热门运行的命令,如果有多个CMD指定,最后一个生效

使用方法:

CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;

CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;

CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

举例:CMD ["/usr/sbin/httpd","-c","/etc/httpd/conf/httpd.conf"]

二、ENTRYPOINT 指令:功能类似于CMD,但是优先级较高,如果CMD和ENTRYPOINT指令同时存在,ENTRYPOINT会覆盖CMD指令

使用方法:

ENTRYPOINT ["executable", "param1", "param2"]

ENTRYPOINT command param1 param2(shell中执行)

举例:(使用列表的方式来指定参数)

ENTRYPOINT ["top", "-b"]

三、WORKDIR指令:从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT和/或CMD指定的程序会在这个目录下执行,

个人理解:例如需要执行自带的tomcat脚本  需要切换到$HOME/bin下执行start.sh脚本来启动,

举例:

WORKDIR /opt/tomcat/bin

RUN  ./start.sh

四、ENV指令:用来在镜像构建过程中设置环境变量,这些变量会写入到镜像中永久有效,也可以用docker run -e参数来传递环境变量,这些变量只在容器运行时有效

例如:

ENV JAVA_HOME /usr/local/java/bin   yum install nginx

WORKDIR $JAVA_HOME

设置容器临时变量运行:

docker run -it -e "JAVA_HOME=/usr/local/java"  tomcat  env

HOME=/

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin

WEB_PORT=8080

五、USER指令:指定该镜像会以什么用户运行,默认是root

语法:

USER  nginx

USER  nginx:nginx

USER  uid

USER  uid:gid

USER  user:gid

USER   uid:group

也可以使用docker run -u选项来覆盖指令指定的值

六、VOLUME指定:用来向基于镜像创建的容器添加卷,一个卷是可以存在于一个或者多个容器内的特定目录,绕过联合文件系统,并提供如下共享数据或者

对数据进行持久化的功能

用法:只能使用docker-managed volume而不能使用Bind-mount Volume,意思是无法指定宿主机上的挂载目录

VOLUME  ["/data"]

七、ADD指令:用来将构建环境下的文件和目录复制到镜像中,相当于将宿主机的文件复制到镜像新创建的镜像中

例如:

ADD /opt/boss.war  /opt/tomcat/webapps/boss.war

源文件也可以是url格式的

ADD http://wordpress.org/latest.zip /root/wordpress.zip

ADD还可以用来解压#将ghd.tar.gz 解压到/var/www  如果目标目录存在和压缩包命名相同的文件,则不会覆盖

ADD ghd.tar.gz /var/www

八、COPY指令:和ADD指令很相似,但是没有解压功能

语法:源文件或者目录必须宇dockerfile文件在同一目录     复制目录时。des目标目录必须以"/"结尾

COPY 源文件/目录    目标文件/目录

例子:

COPY文件:COPY  index.html  /opt/

COPY目录: COPY  opt  /data/opt/   #将宿主机的opt目录拷贝到容器的/data下,必须写目录名称并且以“/ ”结尾

九、ONBUILD指令:能为镜像添加触发器,当一个镜像被用做其他镜像的基础镜像时(比如你的镜像需要从某未准好的位置

添加源代码,或者你需要执行特定于构建镜像环境的构建脚本),该镜像中的触发器将会被执行

举例:

使用一个ubuntu基础镜像来构建一个新镜像,并使用ONBUILD来创建一个mydir的目录

FROM ubuntu
MAINTAINER hello
ONBUILD RUN mkdir mydir
构建镜像:
docker build -t imagea .
利用imagea镜像创建容器: docker run --name test1 -it imagea /bin/bash
这时会发现根目录下没有mydir目录
我们在写一个新的Dockerfile文件,以imagea作为基础镜像
十、EXPOSE:指定容器启动端口号
语法:默认是tcp协议并且可以指定多个EXPOSE

 
EXPOSE  80/tcp
EXPOSE  2222/udp
 

 FROM imagea
   RUN ls

[root@guohaidong dockerfile]# docker build -t imageb .
Sending build context to Docker daemon 2.048 kB
Step / : FROM imagea
# Executing build trigger...
Step / : RUN mkdir mydir
---> Running in 13c2e09dafb9 ---> 085a6989e15d
Removing intermediate container 13c2e09dafb9
Step / : RUN ls
---> Running in 0cf60df45aa6 anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
mydir
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
---> 753e79c490a3
Removing intermediate container 0cf60df45aa6
Successfully built 753e79c490a3
利用上面的dockerfile文件构建镜像: docker build -t imageb .
利用imagea镜像创建容器: docker run --name test2 -it imageb /bin/bash
我们没有看到根目录下已经有mydir目录了,从构建过程中也可以看出来 ============================================================
案例:编译安装redis
首先下载centos镜像
docker search centos
docker pull centos
然后使用docker run进入到容器,将c++和make安装上
yum update
yum -y install gcc gcc-c++ make vim curl
使用docker commit生成新的基础镜像
docker commit 容器id 镜像名称:tag
在基础镜像上编写Dockerfile来build镜像
FROM    centos:base-v2
MAINTAINER "Guohaidong <18310208368@163.com>"
WORKDIR /etc/redis-3.2./
ADD redis-3.2..tar.gz /etc/
RUN cd /etc/redis-3.2./src
RUN sh -c make
COPY redis.conf /etc/redis-3.2./redis.conf
EXPOSE
CMD ["/etc/redis-3.2.8/src/redis-server","redis.conf"]
使用docker build生成新镜像
docker build -t redis:v2 . #注意点 运行镜像
 
docker run -d --name redis-node-79 -h redis-server -p 10.10.32.150:8379:6379 -v /etc/redis-3.2.8/ a455

测试正常并且已经将容器中的目录挂载到了宿主机目录

docker简单介绍----Dockerfile命令的更多相关文章

  1. [转帖]Docker学习之Dockerfile命令详解

    Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...

  2. Docker简单介绍

    Docker简单介绍 Docker是一个能够把开发的应用程序非常方便地部署到容器的开源引擎.由Docker公司团队编写,基于Apache 2.0开源授权协议发行.Docker的主要目的例如以下: 提供 ...

  3. [转]Docker(三):Dockerfile 命令详解

    本文转自:https://blog.csdn.net/ityouknow/article/details/79600406 上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dock ...

  4. Docker(三):Dockerfile 命令详解

    上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...

  5. Docker(4):Dockerfile命令一览

    1.FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,F ...

  6. Docker(六):Dockerfile命令详解

    Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像.FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docke ...

  7. docker 简单介绍及基础命令运用

    一.什么是docker? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. 简单的来讲Docker实际上就是一个大型容器.容器是完全使用沙箱机制,相互之间不 ...

  8. docker简单介绍----镜像和容器管理

    docker可以分为三部分:docker镜像   docker仓库  docker容器 docker镜像:一个image可以包含一个镜像,也可以理解为一个系统模板,里面安装了相关应用,也可以是纯净版的 ...

  9. Docker中的Dockerfile命令详解FROM RUN COPY ADD ENTRYPOINT...

    Dockerfile指令 这些建议旨在帮助您创建高效且可维护的Dockerfile. FROM FROM指令的Dockerfile引用 尽可能使用当前的官方图像作为图像的基础.我们推荐Alpine图像 ...

随机推荐

  1. Android数据库优化

    1.索引 简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1). 优点大大加快了数据库检索的速度,包 ...

  2. Git 操作命令

    一.Git 基本配置 1.配置 命令:git config --global  prop_name prop_value 如配置git用户名与邮箱: git config --global user. ...

  3. HDU1166-ZKW树

    单点修改,区间求和 // // Created by helica on 2018/3/18. // //zkw #include <cstdio> #include <cstrin ...

  4. leanote 信息栏显示笔记本和笔记类型

    本文解决如下两个问题: 1. 在列表视图下使用搜索时,不知道搜出来的笔记属于哪个笔记本.(摘要视图下是有显示的) 2. 增加显示笔记类型(markdown 或 富文本) 修改resources\app ...

  5. Dlib Opencv cv2.fitEllipse用于人眼轮廓椭圆拟合

    dlib库的安装以及人脸特征点的识别分布分别在前两篇博文里面 Dlib Python 检测人脸特征点 Face Landmark Detection Mac OSX下安装dlib (Python) 这 ...

  6. [leetcode] 5.Longest Palindromic Substring-2

    想了很多方法 搞轴对称,算对称轴,偶数都高出了一堆0.5在那加加减减,最后发现在移轴之前可能就返回了. class Solution: def longestPalindrome(self, s: s ...

  7. MySQL基于GTIDs的MySQL Replication

    MySQL M-S GTID 基于GTIDs的MySQL Replication 什么是GTIDs以及有什么特定? 1.GTIDs(Global transaction identifiers)全局事 ...

  8. java并发编程 | 线程详解

    个人网站:https://chenmingyu.top/concurrent-thread/ 进程与线程 进程:操作系统在运行一个程序的时候就会为其创建一个进程(比如一个java程序),进程是资源分配 ...

  9. Python学子之如何退出python 命令行

    python命令行是新手学习python过程中必须要学的一个工具,下面我们来看一下怎么退出python命令行. 工具/原料 python2.7 方法/步骤 1.我们这里使用的是python3.6版本, ...

  10. SSL证书安装(Tomcat)腾讯云服务器

    一.SSL证书免费领取地址一年的 https://www.toolmao.com/get-free-ssl 什么你们公司买的?每次免费领取一年,能不能轮流领取没试过.商鸡,商鸡.... 二.下载SSL ...