Dockerfile命令

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。一般而言,

Dockerfile 分为四部分 : 基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

1、基础指令

FROM: 制作image时依据的基本image
RUN:制作image时执行的命令,一般在Dockerfile中多次出现
CMD:启动docker时执行的命令,在Dockerfile中只出现一次
ENV:设置环境变量
COPY:制作image时,将文件系统中的文件复制到Docker镜像中
WORKDIR:设置工作目录
EXPOSE:设置向外暴露的端口
VOLUME:设置容器与外界映射的目录

ENTRYPOINT指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。
CMD指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的。

CMD与ENTRYPOINT同时存在时,CMD常作为ENTRYPOINT的参数联合使用。建议写法:CMD ["参数"]
如果运行容器时docker run <command>往往用于给出替换dockerfile中的**CMD**的临时参数。

官方脚本常用命令解析
set -o errexit #执行此脚本中某一条命令出错时,立即退出。
set -- mysqld "$@" #使用了set -- 命令,set --会将他后面所有以空格区分的字符串, 按顺序分别存储到$1, $2, $3 变量中, 其中新的$@为set -- 后面的全部内容。

2、举例

1、centos:7

#依赖镜像名称和ID
FROM centos:7
#维护者
MAINTAINER first<first@163.com>
#切换工作目录
WORKDIR /usr
RUN mkdir  /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

#启动容器运行命令
CMD echo "hello Dockerfile"

执行命令构建镜像

docker build -t='镜像名字:版本' .

2、mysql

# 使用官方的 MySQL 镜像作为基础镜像
FROM mysql:latest
# MySQL密码
ENV MYSQL_ROOT_PASSWORD=123456
# 暴露 MySQL 的默认端口
EXPOSE 3306

执行命令构建镜像

docker build -t my-mysql-container .

3、ubuntu

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
 
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/docker-demo.jar
 
# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8
 
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
 
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/docker-demo.jar

执行命令构建镜像

docker build -t javaweb:1.0 .

4、php:7.4-fpm(另命名:Php7.Dockerfile)

# 指定基础镜像
FROM php:7.4-fpm
#安装pdo扩展支持
RUN docker-php-ext-install pdo pdo_mysql

执行命令构建镜像

docker build -t php_pdo_mysql:7.4-fpm . -f Php7.Dockerfile

5、node(另命名:Node.Dockerfile)

# 指定基础镜像
FROM node:20.8.0
# 维护者信息
MAINTAINER "xo"
#安装pnpm
RUN npm i -g npm && npm i -g pnpm
#目录
WORKDIR /home/vuepress
# 暴露端口
EXPOSE 8080
# 设置启动命令
CMD ["pnpm", "-v"]

执行命令构建镜像

docker build -t node_pnpm:20.8.0 . -f Node.Dockerfile
游荡时间:
到此一游: xoxu