dockerfile指令学习
进入容器内部有2种方法。
1 docker run -it centos bash 退出后容器会挂了。
2 docker run -d --name my_nginx --restart=always -p 8989:80 nginx
docker exec -it my_nginx bash
--restart=always表示ngix挂了后会自动重启, -P 随机映射一个端口
dockerfile可以根据基础镜像创建自己的镜像。
FROM 指定基础镜像
FROM 镜像名:tag号, eg::FROM centos
MAINTAINER 指定维护者信息 eg:MAINTAINER zwj
RUN 镜像在构建时想执行的各种linux命令
ADD/COPY 都是将宿主机文件拷贝到容器内部 ,COPY仅仅是拷贝, ADD指令拷贝后还支持自动解压缩 tar 文件和远程 URL
eg:COPY aa.py /opt
ADD https://example.com/archive.tar.gz /tmp/
WORKDIR 设置当前工作目录, 就是更改进入容器的根目录
VOLUME 将容器内部的数据映射到宿主机。 相当于 docker run -v
eg:VOLUME /data 时将容器内部的/data文件夹在容器运行时自动挂载到匿名卷。
EXPOSE 容器内暴露一个对外的端口
ENTRYPOINT/CMD 指定容器启动后将要进行的一些操作,
CMD ["参数1","参数2"] 命令只能有一个
eg; CMD ["/bin/bash"] CMD ["cat","/etc/os-release"] CMD ["curl" "-s", "http:baidu.com"]
区别:CMD 命令,在执行docker run 命令时传入的指令会覆盖掉dockerfile里面定义的命令
ENTRYPOINT命令 在执行dokcer run命令时传入的参数会当作dockerfile里面ENTRYPOINT命令的参数。
ARG/ENV 都是设置docker环境变量的
ENV 设置的环境变量不管是镜像构建时还是容器运行时该变量都可以用
ARG 设置的环境变量只能在镜像构建时有效, 容器运行时丢失了。
eg:ENV name=“aa” 后面的上下文中通过$name来访问该变量
USER 用于切换用户, eg: USER root
要使用Docker部署Spring Boot项目,你可以创建一个Dockerfile来定义Docker镜像的构建过程。以下是一个示例的Dockerfile:
# 使用基于Java的镜像作为基础镜像
FROM openjdk:11-jdk
# 设置工作目录
WORKDIR /app
# 复制Spring Boot应用的Jar包到容器中
COPY target/my-spring-boot-app.jar app.jar
# 暴露Spring Boot应用的默认端口(如果有自定义端口,请修改为实际使用的端口)
EXPOSE 8080
# 启动Spring Boot应用
CMD ["java", "-jar", "app.jar"]
在上面的Dockerfile中,我们选择了基于Java的OpenJDK 11镜像作为基础镜像。然后,设置工作目录为/app
,在容器中创建一个目录用于存放应用程序文件。
接下来,我们将Spring Boot应用的可执行Jar包复制到容器中的/app
目录下,命名为app.jar
。确保将target/my-spring-boot-app.jar
替换为你实际的Jar包路径。
然后,通过EXPOSE
命令暴露Spring Boot应用的默认端口(通常为8080)。如果你的应用使用了自定义端口,请修改为实际使用的端口。
最后,使用CMD
命令指定在容器启动时运行的命令。这里使用java -jar app.jar
来启动Spring Boot应用。
保存以上内容为Dockerfile
文件,并将其与Spring Boot项目的根目录放在同一级别的位置。
接下来,进入命令行,在项目根目录执行以下命令来构建Docker镜像:
docker build -t my-spring-boot-app .
或者
# 基础镜像
FROM openjdk:8-jdk-alpine
# 设置工作目录
WORKDIR /app
# 复制 Maven 项目文件
COPY pom.xml .
# 下载 Maven 依赖包
RUN ["mvn", "dependency:resolve"]
# 复制整个 Maven 项目(除了 target 目录)
COPY src ./src
# 构建 Maven 项目
RUN ["mvn", "package"]
# 运行命令
CMD ["java", "-jar", "/app/target/<your-application-name>.jar"]