菜单
一、镜像分类
- 基础镜像:例如centos、Ubuntu、alpine
- 环境镜像:例如:java、php、go、node
- 项目镜像:将项目与环境镜像打包一起
二、DockerFile常用指令
- FROM 构建新镜像是基于哪个镜像
- LABEL 标签
- RUN 构建镜像时运行的Shell命令
- COPY 拷贝文件或目录到镜像中
- ADD 解压压缩包并拷贝
- ENV 设置环境变量
- USER 为RUN、CMD和ENTRYPOINT执行命令指定运行用户
- EXPOSE声明容器运行的服务端口
- WORKDIR 为RUN\CMD\ENTPYPOINT\COPY和ADD设置工作目录
- CMD 运行容器时默认执行,如果有多个CMD指令,最后一个生效
- ENTRYPOINT 如果与CMD一起用,CMD将作为ENTRYPOINT的默认参数,如果有多个ENTRYPOINT指令,最后一个生效。
三、根据DockerFile构建镜像
docker build
-t #镜像名称
-f #指定Dockerfile文件位置
#docker build -t fox/jave-demo .
#docker build -t fox/jave-demo -f /path/Dockerfil/path
四、一个简单的dockerfile例子
FROM centos:7
LABEL maintainer Fox
RUN yum install wget curl -y
USER root
COPY a.txt /opt
ADD b.tar.gz /opt
ENV ABC=123
EXPOSE 80
WORKDIR /usr/local
CMD ["sleep","36000"]
五、COPY和ADD详解
5.1 COPY 和 ADD 作用
COPY 和 ADD 命令不能拷贝上下文之外的本地文件【即Dockerfile目录】
例如: Dockerfile 在/docker-copy中,在/tmp文件下touch一个a.txt。
在Dockerfile添加“COPY /tmp/a.txt ./”最终docker build无法正常进行
COPY check* /testdir/ # 拷贝所有 check 开头的文件
COPY check?.log /testdir/ # ? 是单个字符的占位符,比如匹配文件
COPY 和 ADD 命令具有相同的特点:只复制目录中的内容而不包含目录自身
5.2与 WORKDIR 协同工作
WORKDIR /app
COPY checkredis.py .
文件会复制到容器中 /app目录
六命令CMD详解
6.1CMD命令的用法
- exec形式 :CMD [“可执行路径”,”参数”]
- 作为ENTRYPOINT默认参数:CMD [“参数一”,”参数二”]
- shell形式: CMD command 参数一 参数二
6.1.1CMD的exec形式
--------创建一个Dockerfile
FROM centos:7
LABEL maintainer Fox
COPY run.sh /usr/bin
EXPOSE 80
USER:root
WORKDIR /usr/local
CMD ["run.sh","My","Fox"]
-----创建一个run.sh脚本,并能使用参数
#!/bin/bash
echo "Hello" $1 $2
sleep 3600
显示命令:
shell>docker build -t cmdtest1 .
shell>chmond +x run.sh
shell>docker run -it --name cmdtest1 cmdtest1
注意:CMD 这种方式不行传入变量
FROM centos:7
LABEL maintainer Fox
COPY run.sh /usr/bin
EXPOSE 80
ENV Name=Fox
USER:root
WORKDIR /usr/local
CMD ["run.sh","My","$Name"]
-------最后输出 hell My $Name。如何修改呢?参考下方
CMD ["sh","-c","/usr/bin/run.sh $Name"]
6.1.2CMD的shell形式
FROM centos:7
LABEL maintainer Fox
COPY run.sh /usr/bin
EXPOSE 80
ENV Name=Fox
USER:root
WORKDIR /usr/local
CMD /usr/bin/run.sh my $Name
注意:在docker run 可以重新定义CMD,但不能重定义ENTRYPOINT
例如:docker run -it –name cmdtest1 cmdtest1 run.sh myFox
七ENTRYPOINT的命令详解
- exec形式 : ENTRYPOINT [“可执行路径”,”参数”]
- shell形式: ENTRYPOINT command 参数一 参数二
这两种方式,跟上面的CMD一样,例子上把CMD更改即可。
下面我们讲解一下docker的批处理管理工具,docker-compose