Dockerfile基本命令
FROM - 基于基准镜像
- FROM centos # 基于centos:latest
- FROM scratch # 不依赖任何基准镜像base image
- FROM tomcat:9.0.22-jdk8-openjdk
LABEL & MAINTAINER - 说明信息
- MAINTAINER xxxx.com
- 机构&个人ID
- LABEL version=“1.0”
- LABEL description=“这是描述信息”
WORKDIR - 设置工作目录
- WORKDIR /usr/local
- WORKDIR /usr/local/newdir # 自动创建
- 尽量使用绝对路径
ADD & COPY - 复制文件
- ADD hello / # 复制到根目录
- ADD test.tar.gz / # 添加到根目录并解压
- ADD除了复制,还具备添加远程文件功能
ENV - 设置环境常量
- ENV JAVA_HOME /usr/local/openjdk8
- RUN ${JAVA_HOME}/bin/java -jar test.jar
- 尽量使用环境常量,可提高程序维护性
Dockerfile执行指令
RUN & CMD & ENTRYPOINT
-
RUN:在Build构建时执行命令
- RUN yum install -y vim # Shell 命令格式
- 会生成一个子shell进程
- RUN [“yum”, “install”, “-y”, “vim”] # Exec命令格式
- 会用Exec进程替换当前进程,并且保持PID不变
- 执行完毕,直接退出,并不会退回到之前的进程环境
- 推荐使用Exec命令格式执行命令
- RUN yum install -y vim # Shell 命令格式
-
ENTRYPOINT:容器启动时执行的命令
- Dockerfile中只有最后一个ENTRYPOINT会被执行
- ENTRYPOINT[“ps”] # 推荐使用Exec格式
-
CMD:容器启动后执行默认的命令或参数
- CMD用于设置默认执行的命令
- 如果Dockerfile中出现多个CMD,则只有最后一个被执行
- 如容器启动时附加指令,则CMD被忽略
- CMD [“ps”, “-ef”] # 推荐使用Exec格式
-
举例
FROM centos
RUN ["echo", "image building!!!"]
ENTRYPOINT ["ps"]
CMD ["-ef"]
Dockerfile实战-构建Redis镜像
FROM centos
RUN ["yum", "install", "-y", "gcc", "gcc-c++", "net-tools", "make"]
WORKDIR /usr/local
ADD redis-4.0.14.tar.gz .
WORKDIR /usr/local/redis-4.0.14/src
RUN make && make install
WORKDIR /usr/local/redis-4.0.14
ADD redis-7000.conf .
EXPOSE 7000
CMD ["redis-server", "redis-7000.conf"]
- 构建镜像
- docker build -t python_id.com/docker-redis .