docekrfile

docekrfile,第1张

docekrfile 1、Dockerfile常用指令 1、FROM

语法:FROM :

指明构建的新镜像来自那个基础镜像,如果没有选择tag,那么默认值为latest。

FROM centos:7
#如果不以任何镜像为基础,那么写法为:FROM scratch。官方说明:scratch镜像是一个空镜像,可以用于构建busybox等超小镜像,可以说是真正的从零开始构建属于自己的镜像
2、MAINTAINER(deprcated)

语法:MAINIAINER

指明镜像维护着及联系方式(一般是邮箱地址)。过时,推荐使用LABEL.

MAINIAINER tom 
3、LABEL

语法:LABEL = = =

功能是为镜像指定标签。也可以使用LABELl来指定镜像作者

LABEL maintainer="tom@qq.com"
4、RUN

语法:RUN

构建镜像时运行的shell命令,比如构建的新镜像中我们想在/usr/local 目录下创建一个java目录。

RUN mkdir -p /usr/local/java
5、ADD

语法:ADD …

拷贝文件或目录到镜像中。src可以是一个本地文件或者是一个本地压缩文件,压缩文件会自动解压。还可以是一个url,如果吧src写成一个url。那么ADD就类似于wget命令,然后自动下载和解压

ADD jdk-1.8.0_linux_x64_bin.tar.gz /usr/local/java
6、COPY

语法:COPY …

拷贝文件或者目录到镜像中。用法同ADD,只是不支持下载和解压。

COPY jdk-1.8.0_linux_x64_bin.tar.gz /usr/local/java
7、EXPOSE

语法:EXPOSE [/ …]

暴露容器运行时的监听端口给外部,也可以指定端口时监听TCP还是UDP,如果未指定协议,则默认为TCP。

EXPOSE 80 443 8080/tcp

如果想使得容器与宿主机的端口有映射关系,必须在容器启动的时候加上-P参数。

8、ENV

语法:ENV 添加单个,ENV =…添加多个

设置容器内环境变量

ENV JAVA_HOME /usr/local/java/jdk-1.8.0/
9、CMD

语法

CMD ehco $JAVA_HOME 
#如果创建容器的时候指定了命令,则CMD命令会被替代。假如镜像叫centos:7 ,创建容器时命令是:docker run -it --name centos7 centos:7 echo "helloworld" 或者docker run -it --name centos7 centos:7/bin/bash,就不会输出SJAVA_ HOME的环境变量信息了,因为CMD命令被echo "helloworld"、 /bin/bash 覆盖了。

启动容器时执行的Shell命令。在Dockerfile中只能有-条CMD指令。如果设置了多条CMD,只有最后-条CMD会生效。

10、ENTRYPOINT

启动容器时执行的Shell命令,同CMD类似,不会被docker run命令行指定的参数所覆盖。在Dockerfile中只能有一条ENTRYPOINT指令。如果设置了多条ENTRYPOINT, 只有最后一 条ENTRYPOINT会生效。

语法

ENTRYPOINT ehco $JAVA_HOME 
#如果在Dockerfile中同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数;
#如果在Dockerfile中同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它两会互相覆盖,谁在最后谁生效
11、WORKDIR

语法:WORKDIR /path/data

为RUN、CMD、ENTRYPOINT 以及COPY和AND设置工作目录。

WORKDIR /usr/local 
#指定进入容器的默认目录是 /usr/local 
12、VOLUME

指定容器挂载点到宿主机自动生成的目录或其他容器。-般的使用场景为需 要持久化存储数据时。

#容器的/var/lib/mysq1 目录会在运行时自动挂载为匿名卷,匿名卷在宿主机的/var/lib/docker/volumes 目录下
VOLUME [" /var/lib/mysq1"]

一般不会在Dockerfile中用到,更常见的还是在docker run的时候通过-V 指定数据卷。

2、Dockerfile文件编写 1、Dockerfile创建镜像

centos+tomcat镜像

#指明构建的新新镜像来源  hub.c.163.com/public/centos:6.7-tools 基础镜像
FROM  hub.c.163.com/public/centos:6.7-tools
#通过镜像标签声明作者信息
LABEL maintainer="tom@qq.com"
#设置默认工作目录
WORKDIR /usr/local
#新镜像构建成功以后创建目录
RUN mkdir -p /usr/local/java && mkdir mkdir -p /usr/local/tomcat
#拷贝文件到镜像中并解压
ADD apache-tomcat-7.0.54.tar.gz /usr/local/tomcat
ADD jre-8u291-linux-x64.tar.gz /usr/loacl/java
#暴露容器运行时的8080 监听端口给外部
EXPOSE 8080
#设置容器内 JAVA_HOME 环境变量
ENV JAVA_HOME /usr/local/java/jre1.8.0_291
ENV PATH $PATH:$JAVA_HOME/bin
#启动容器时启动 tomcat run 保持在前台有运行程序
CMD ["/usr/local/tomcat/apache-tomcat-7.0.54/bin/catalina.sh","run"]

2、生效Dockerfile文件
# build -f 指定构建文件为Dockerfile -t 指定创建完成的镜像名字和版本 
# . 加载资源位置为当前上下文件 就是当前目录
[root@centos08 dockerfile]# docker build -f Dockerfile -t mytomos:01 .
Sending build context to Docker daemon  101.6MB
Step 1/10 : FROM  hub.c.163.com/public/centos:6.7-tools
 ---> b2ab0ed558bb
Step 2/10 : LABEL maintainer="tom@qq.com"
 ---> Running in c7852639b35a
Removing intermediate container c7852639b35a
 ---> de18d3412acf
Step 3/10 : WORKDIR /usr/local
 ---> Running in c9eeb179873b
Removing intermediate container c9eeb179873b
 ---> 7a05459a464b
Step 4/10 : RUN mkdir -p /usr/local/java && mkdir mkdir -p /usr/local/tomcat
 ---> Running in 106b663d0574
Removing intermediate container 106b663d0574
 ---> e3ce2f044210
Step 5/10 : ADD apache-tomcat-7.0.54.tar.gz /usr/local/tomcat
 ---> f7166e58bf62
Step 6/10 : ADD jre-8u291-linux-x64.tar.gz /usr/loacl/java
 ---> 3b5110822120
Step 7/10 : EXPOSE 8080
 ---> Running in af27cec32269
Removing intermediate container af27cec32269
 ---> c7e1da83a374
Step 8/10 : ENV JAVA_HOME /usr/local/java/jre1.8.0_291
 ---> Running in 89567b40f4c3
Removing intermediate container 89567b40f4c3
 ---> bab67686ad81
Step 9/10 : ENV PATH $PATH:$JAVA_HOME/bin
 ---> Running in 82603c12aa5e
Removing intermediate container 82603c12aa5e
 ---> 7d5d9ef25aa3
Step 10/10 : CMD ["/usr/local/tomcat/apache-tomcat-7.0.54/bin/catalina.sh","run"]
 ---> Running in 90283457d447
Removing intermediate container 90283457d447
 ---> d4552256d551
Successfully built d4552256d551
Successfully tagged mytomos:01
#查看构建成功的镜像
[root@centos08 dockerfile]# docker images
REPOSITORY                    TAG         IMAGE ID       CREATED         SIZE
mytomos                       01          d4552256d551   9 seconds ago   867MB
hello-world                   latest      d1165f221234   3 months ago    13.3kB
hub.c.163.com/public/centos   6.7-tools   b2ab0ed558bb   4 years ago     602MB

3、启动生成的镜像
[root@centos08 dockerfile]# docker run -id --name mytomos -p 8080:8080 mytomos:01
a76f129bf6e030d887371cec047b1daadf24e016499314927aace432d6b92605

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5638098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存