【docker】--docker file编写教程

构建docker file 镜像

# -f 指定dockerfile
# -t 镜像名和tag
# .必不可少  根据上下文的目录构建   dockerfile和相关文件必须在里面  比如ADD或者COPY的文件
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"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值