Dockerfile
# Dockerfile
# 常用指令
- FROM:指定基础镜像,是所有 Dockerfile 的第一条指令
示例:FROM golang:1.23-alpine
- WORKDIR:设置工作目录,后续指令会在该目录下执行
示例:WORKDIR /app
- COPY:将构建上下文中的文件或目录复制到镜像中
示例:COPY <src> <dest>
- ADD:类似 COPY,但支持 URL 下载和自动解压 tar 文件
示例:ADD <src> <dest>
- RUN:执行 shell 命令并创建新的层
示例:RUN apt update && apt install -y nginx
- ENV:设置环境变量
示例:ENV <key>=<value>
- EXPOSE:声明容器监听的端口
示例:EXPOSE <port>
- CMD:指定容器启动时执行的命令,可被 docker run 命令覆盖
示例:CMD ["nginx", "-g", "daemon off;"]
- ENTRYPOINT:指定容器启动时执行的命令,不会被 docker run 命令覆盖
示例:ENTRYPOINT ["executable", "param1", "param2"]
- VOLUME:创建挂载点,用于持久化数据或共享数据
示例:VOLUME <path>
- LABEL:为镜像添加元数据(标签)
示例:LABEL version="1.0" description="My App"
- USER:指定后续命令的执行用户
示例:USER nginx
- HEALTHCHECK:配置容器健康检查
示例:HEALTHCHECK [OPTIONS] CMD command
- ARG:定义构建时的变量,可通过 docker build --build-arg 传递
示例:ARG VERSION=latest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
这是一个简单的go项目,目录结构如下

然后再项目根目录下创建Dockerfile文件, 内容如下:
FROM golang:1.23-alpine
WORKDIR /app
COPY go.mod .
# RUN go mod download
COPY . .
RUN go build -o main .
# EXPOSE 8080
CMD [ "./main" ]
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
在项目根目录下执行
docker build -t golangtest .
1
docker run golangtest
1
结果如下图(我这里的tag为gotest)

# vuepress-----nodejs
Dockerfile
FROM node:18-slim
WORKDIR /blog
COPY package*.json ./
COPY . ./
RUN npm install
EXPOSE 8080
VOLUME [ "/blog/docs" ]
CMD [ "npm" , "run", "docs:dev"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.dockerignore
node_modules
.dockerignore
Dockerfile
.git
.gitignore
npm-debug.log
README.md
.vscode
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
构建镜像
docker build -t blog:v1 .
1
启动容器
docker run -it -d -p 8081:8080 -v /blog/vuepress/docs:/blog/docs blog:v1
1