docker 部署项目
1.将项目打包成jar包上传到服务器.
上传命令是使用lrzsz,需要安装
sudo yum -y install lrzsz
rz -b
此时如果在打包过程中出现xxx.jar中没有主清单错误.解决方案:项目中可能使用到spring-boot-starter-parent的依赖,在公司中我们一般使用自己的依赖,所以去掉,加上下面依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${springcloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
然后在加上下面的插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
2.编写Dockerfile
命令 | 用途 |
---|---|
FROM | 基础镜像文件 |
RUN | 构建镜像阶段执行命令 |
ADD | 添加文件,从src目录复制文件到容器dest,其中可以是一个本地文件或者是一个本地压缩文件(可以是Dockerfile所在目录的一个相对路径),还可以是一个url,路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径 |
COPY | 拷贝文件,不支持URL和压缩包,和ADD命令类似 |
CMD | 容器启动执行后执行命令 |
EXPOSE | 声明容器在运行时对外提供的服务端口 |
WORKDIR | 指定容器工作路径 |
ENV | 指定环境变量 |
ENTRYPOINT | 容器入口,ENTRYINT和CMD指令是一样的,docker容器启动时执行命令,可多次设置,但是只有最后一个有效 |
USER | 指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户 |
VOLUME | 用于指定持久化目录,实现挂载功能,授权访问从容器内到主机上的目录。用于containers之间共享数据,将本地文件夹或者其他容器中的文件夹挂在到这个容器中等 |
#基于哪个镜像
FROM java:8
#将本地文件挂载到当前容器
VOLUME /tmp
#复制文件到容器
ADD tree-cloud-server-1.0-SNAPSHOT.jar /app.jar
#声明需要暴露的端口
EXPOSE 8081
#配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t tree-project-eureka8081
3.运行容器
docker run -it -d -p 8888:8081 tree-project-eureka8081