使用Dockerfile部署项目

Dockerfile是一个文本文件,包含构建Docker镜像所需要的指令

# 使用官方Nginx基础镜像
FROM nginx:stable

# 删除Nginx的默认配置
RUN rm /etc/nginx/conf.d/default.conf

# 复制Nginx配置文件到容器中
COPY nginx.conf /etc/nginx/

# 复制Vue项目构建输出的静态文件到Nginx的HTML目录
COPY dist/ /usr/share/nginx/html/

# 暴露端口
EXPOSE 9095

# 挂载宿主机的当前文件夹路径到容器中的Nginx配置目录
VOLUME /etc/nginx/nginx.conf
VOLUME /usr/share/nginx/html
VOLUME /etc/nginx/logs

注意点:在Dockerfile文件里只能够设置挂载点,但是不能够指定宿主机的挂载路径 。
VOLUME指令来声明容器中的目录应该被挂载为匿名卷
原因:当构建镜像时,并不知道将来这个镜像会在哪个宿主机上运行,因此无法在Dockerfile中指定宿主机的挂载路径。

docker run命令启动容器时,可以使用-v--mount标志来指定宿主机的挂载路径。

使用 -v--volume 标志

例如,要将宿主机的/path/on/host目录挂载到容器的/data目录,可以使用以下命令:

docker run -d -p 80:80 -v /path/on/host:/data my-nginx

如果您想要挂载一个只读卷,可以添加ro选项:

docker run -d -p 80:80 -v /path/on/host:/data:ro my-nginx

使用 -mount 标志

  • -mount标志使用键值对语法,提供了更多的控制选项。以下是如何使用-mount标志进行卷挂载的示例:
docker run -d -p 80:80 --mount type=bind,source=/path/on/host,target=/data my-nginx

如果您想要挂载一个只读卷,可以使用readonly选项:

docker run -d -p 80:80 --mount type=bind,source=/path/on/host,target=/data,readonly my-nginx
  • -mount标志的type参数指定了挂载的类型,bind是用于宿主机和容器之间直接目录挂载的类型。source是宿主机上的路径,target是容器内的路径。

请注意,使用--mount标志时,不需要创建卷,Docker会自动为您创建匿名卷。

Dockerfile的基本命令

  1. FROM:指定构建镜像的基础镜像。例如:
FROM ubuntu:18.04
  1. RUN:执行命令并创建新的镜像层。例如:
RUN apt-get update && apt-get install -y git
  1. CMD:容器启动时执行的命令。例如:
# 启动应用程序
CMD ["java", "-jar", "myapp.jar"]
  1. LABEL:添加元数据到镜像。例如:
LABEL maintainer="example@example.com"
  1. EXPOSE:声明容器运行时监听的端口。例如:
# 暴露应用程序端口
EXPOSE 8080
  1. ENV:设置环境变量。例如:
ENV PATH=/usr/local/sbin:/usr/local/bin:$PATH
  1. ADD:将文件或目录从宿主机器复制到镜像。例如:
ADD . /app
  1. COPY:和 ADD 类似,但是不会自动解压文件。例如:
COPY . /app
  1. ENTRYPOINT:配置容器启动后执行的命令。例如:
ENTRYPOINT ["/bin/bash"]
  1. VOLUME:创建一个挂载点。例如:
VOLUME ["/data"]
  1. USER:指定运行容器时的用户名或 UID。例如:
USER daemon
  1. WORKDIR:为后续的 RUN、CMD、ENTRYPOINT 指令设置工作目录。例如:
WORKDIR /path/to/workdir
  1. ARG:定义构建时变量。例如:
ARG buildno
  1. ONBUILD:配置当所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令。例如:
ONBUILD ADD . /app/src
  1. STOPSIGNAL:设置容器退出的信号。例如:
STOPSIGNAL SIGTERM
  1. HEALTHCHECK:配置容器健康检查。例如:
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
  1. SHELL:指定用于执行 RUN、CMD 和 ENTRYPOINT 指令的默认 shell。例如:
SHELL ["powershell", "-command"]