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