构建docker file 镜像
docker build -f dockerdile -t image_name:tag .
常用命令速查表
类别 | 命令 |
---|
基础镜像 | FROM |
构建命令 | RUN , CMD , ENTRYPOINT |
文件操作 | COPY , ADD |
配置环境 | ENV , ARG , WORKDIR , LABEL , USER |
网络存储 | EXPOSE , VOLUME , HEALTHCHECK |
多阶段构建 | FROM ... AS , COPY --from=... |
一、基础指令(指定镜像和执行命令)
命令 | 作用说明 |
---|
FROM | 指定基础镜像(必须是第一条) |
RUN | 在镜像构建时执行命令(如安装软件) |
CMD | 容器启动时默认执行的命令(可被 docker run 覆盖) |
ENTRYPOINT | 容器启动时执行的命令(不易被覆盖) |
区别 CMD 和 ENTRYPOINT:
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["nginx"]
CMD
可被覆盖ENTRYPOINT
更强制性,适合构建“专用容器”
二、构建上下文管理
命令 | 作用说明 |
---|
COPY | 将本地文件复制进镜像(常用于源码、配置) |
ADD | 类似 COPY,但支持解压 .tar 文件和 URL 下载(不推荐乱用) |
示例:
COPY ./app /usr/src/app
三、设置镜像内部环境
命令 | 作用说明 |
---|
WORKDIR | 设置工作目录(后续命令的执行路径) |
ENV | 设置环境变量 |
ARG | 构建参数(只在构建时可用) |
LABEL | 添加元数据(作者、描述等) |
示例:
ENV LANG C.UTF-8
WORKDIR /app
ARG VERSION=1.0
LABEL maintainer="you@example.com"
四、容器运行配置
命令 | 作用说明 |
---|
EXPOSE | 声明容器运行时监听的端口(不会自动映射) |
VOLUME | 声明挂载点(用于数据持久化) |
USER | 指定运行容器时的用户 |
HEALTHCHECK | 设置健康检查命令 |
SHELL | 改变默认 shell,比如从 sh 切换成 bash |
五、多阶段构建(可选进阶)
命令 | 说明 |
---|
AS | 配合 FROM 使用,用于多阶段构建中的命名阶段 |
示例:
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine
COPY --from=builder /app/myapp /app/
!!案例!!
游戏镜像
FROM alpine AS mynginx
RUN sed -i 's#dl-cdn.alpinelinux.org#mirrors.aliyun.com#' /etc/apk/repositories && \
apk update && apk add openssh-server curl wget gcc g++ make && \
wget "https://sourceforge.net/projects/pcre/files/pcre/8.44/pcre-8.44.tar.gz" && \
wget "http://nginx.org/download/nginx-1.20.1.tar.gz" && \
tar xf pcre-8.44.tar.gz && \
tar xf nginx-1.20.1.tar.gz && \
cd nginx-1.20.1 &&\
./configure --prefix=/usr/local/nginx --with-pcre=/pcre-8.44 --without-http_gzip_module && \
make && \
make install
FROM alpine
MAINTAINER oldboyedu-linux81
LABEL school=oldboyedu \
class=linux80 \
auther=oldboyedu-linux80 \
address="老男孩it教育沙河镇"
COPY --from=mynginx /usr/local/nginx /usr/local/nginx
RUN sed -i 's#dl-cdn.alpinelinux.org#mirrors.aliyun.com#' /etc/apk/repositories && \
apk update && apk add openssh-server curl && \
sed -i 's@#PermitRootLogin prohibit-password@PermitRootLogin yes@g' /etc/ssh/sshd_config && \
ln -sv /usr/local/nginx/sbin/nginx /usr/sbin && \
rm -rf /var/cache/
COPY config/nginx.conf /etc/nginx/nginx.conf
ADD code/oldboyedu-game-code.tar.gz /usr/local/nginx/html
COPY script/start-web.sh
VOLUME /usr/local/nginx/html
WORKDIR /usr/local/nginx/html
ENV school=oldboyedu \
class=linux80
OLDBOYEDU_ADMIN="jiubugaosuni"
HEALTHCHECK --interval=3s \
--timeout=3s \
--start-period=30s \
--retries=3 \
CMD curl -f http://localhost/ || exit 1
CMD ["sh","-X","/start-web.sh"]