此处将为大家介绍关于DockerSpringboot项目使用docker-maven-plugin执行mvndocker:build打成镜像的详细内容,并且为您解答有关dockerfile部署spri
此处将为大家介绍关于Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像的详细内容,并且为您解答有关dockerfile 部署springboot项目的相关问题,此外,我们还将为您介绍关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、b/w docker-compose build vs docker build生成的docker镜像有什么区别?、docker - dockerfile构建一个简单的springboot应用镜像、Docker | 使用dockerfile生成镜像,清理docker空间的有用信息。
本文目录一览:- Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像(dockerfile 部署springboot项目)
- 167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
- b/w docker-compose build vs docker build生成的docker镜像有什么区别?
- docker - dockerfile构建一个简单的springboot应用镜像
- Docker | 使用dockerfile生成镜像,清理docker空间
Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像(dockerfile 部署springboot项目)
创建Dockerfile文件
此处的参数说明:
FROM openjdk:8-jdk-alpine 基与jdk1.8
VOLUME /tmp 挂载容器的位置, 容易找到
ADD kitty-generator-1.0.0.jar app.jar 宿主机器的jar文件 移动到 容器的jar文件
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 容器执行的命令
EXPOSE 9000 简易爆漏的端口 下面docker run -p 还是要的, 因为容器是桥接模式
EXPOSE 9092 写多个就会暴露多个端口
若要执行调优内存:加参数如下
2:POM.xml配置 加入docker:build插件
<artifactId>kitty-generator</artifactId> 此处和下面${project.artifactId} 对应
<version>${project.version}</version>
<packaging>jar</packaging> 此处改为jar包方式
<properties>
*****
<docker.image.prefix>kitty</docker.image.prefix> 此处和下面${docker.image.prefix} 对应
</properties>
#下面为jar方式.
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
在父模块打包
mvn clean install package -Dmaven.test.skip
在子模块执行生成镜像
mvn docker:build -Dmaven.test.skip
启动镜像
docker run -itd -p 9000:9000 -v /data/generator/:/data kitty/kitty-generator
-it 可以交互进入容器
-d 后台运行
-p 端口映射,若项目有多个端口, -p 9000:9000 -p 9092:9092 写多个即可
-v 挂载文件 宿主/data/generator/ 不存在会自动创建 容器/data会自动创建
挂载文件配置
* 注意下方/data/ 红色字体
-v /data/generator/:/data 这的/data 表示容器的日志 将会在宿主机器生成/data/generator/kitty-generator.log文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出 -->
<appender name="baselog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>/data/kitty-generator.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/base.%d.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100 MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>
[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<!-- 日志级别 -->
<root>
<!-- 定义了ERROR和INFO级别的日志;分别在FILE文件和控制台输出 -->
<level value="INFO" />
<appender-ref ref="baselog" />
<appender-ref ref="console" />
</root>
<logger name="com.louis.kitty.generator" level="INFO">
<appender-ref ref="baselog" />
</logger>
</configuration>
167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑
1.nginx服务器根目录问题
docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同
eg:
run一个niginx容器
<span>//80端口被占用,so...</span> $ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES <span>1801</span>a32aab54 nginx <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago Up <span>2</span> minutes <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-></span><span>800</span>/tcp berserk_kare
进入容器内部
<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash root<span>@1801a32aab54</span><span>:/</span><span># </span>
查看nginx目录
<span># cd /etc/nginx/</span> conf<span>.d</span>/ koi-utf mime<span>.types</span> nginx<span>.conf</span> uwsgi_params fastcgi_params koi-win modules/ scgi_params win-utf
可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled
继续查看nginx配置
<span># cat /conf.d/default.conf</span><span>server</span> { listen <span>80</span>; server_name localhost; <span>#charset koi8-r;</span><span>#access_log /var/log/nginx/log/host.access.log main;</span> location / { root /usr/share/nginx/html; <span>index</span><span>index</span>.html <span>index</span>.htm; } <span>#error_page 404 /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span> error_page <span>500</span><span>502</span><span>503</span><span>504</span> /<span>50</span>x.html; location = /<span>50</span>x.html { root /usr/share/nginx/html; } <span>#...省略php-fpm配置,好长..</span> }
根目录配置: root /usr/share/nginx/html;
测试
<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" >index.html</span>
php-fpm配置相关
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
b/w docker-compose build vs docker build生成的docker镜像有什么区别?
在构建docker镜像时,如果使用docker-compose build vs docker build构建图像,则image id会有所不同. env有不同的主机名.
还有什么不同?为什么图像不同?
不同之处仅在于构建结果的命名/标记,docker-compose会自动为您执行.
除此之外,docker-compose构建在幕后并没有什么不同,只是一个普通docker构建的包装器.
docker - dockerfile构建一个简单的springboot应用镜像
在前面的 《docker - 构建一个简单的docker镜像》中,介绍了两种构建镜像的方法,其中,通过dockerfile文件构建镜像是在实际生产中常用的;除此之外,还通过 docker - Dockerfile常用指令 和 docker - 常用命令 两篇文章介绍了dockerfile的指令和docker的常用命令,接下来,我们将会使用所学的知识构建一个简单的springboot应用。
该springboot应用对外暴露了一个api,对外暴露8080端口,日志文件写在应用当前目录,部分代码以及配置文件如下:
@Slf4j
@SpringBootApplication
@RestController
public class SpringbootDockerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDockerApplication.class, args);
}
@RequestMapping("/docker")
public String docker() {
log.info("access docker home at " + LocalTime.now());
return "Hello Docker!";
}
}
application.properties
spring.application.name=springboot-docker
server.port=8080
logging.file=app.log
把jar和dockerfile文件上传到一个springboot-docker目录中
[root@localhost springboot-docker]# ls
Dockerfile springboot-docker-1.0.jar
Dockerfile:
FROM openjdk:8u181-jdk-alpine
ARG workdir=/app
VOLUME ${workdir}
WORKDIR ${workdir}
ADD springboot-docker-1.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
- FROM openjdk:8u181-jdk-alpine : 从docker仓库中获取基础镜像
- ARG workdir=/app : 添加变量,该变量只在当前的dockerfile中有效,如果换成ENV,则在容器中生效。这里需要注意的是,ARG和ENV对哪些指令是起效的,可以参考 docker - Dockerfile常用指令
- VOLUME ${workdir} : 把宿主机的目录(该目录可以通过docker inspect dockerName查看)挂载到容器中的/app这个目录,这样可以在宿主机中查看该目录的内容。还有一个很重要的原因,就是数据持久化,如果不挂载,当容器关闭删除后,数据将会跟着被删除。这里因为/app是应用所在的目录,该目录会产生日志等其它内容。
- WORKDIR ${workdir} :指定工作目录,下面的指令操作将在这个指定目录中执行。还有一点是,当通过交互模式的exec命令进入到该容器时,默认当前路径是/app
- ADD springboot-docker-1.0.jar app.jar : 添加文件到WORKDIR
- EXPOSE 8080 : 暴露8080端口,需要通过容器IP和端口访问应用。如果想通过宿主机的IP和端口访问应用,需要在RUN容器的时候绑定。可以参考docker - Dockerfile常用指令 的run命令
- ENTRYPOINT: 运行容器后执行的第一条命令,这里通过java -jar命令运行应用。
接下通过BUILD命令构建镜像
[root@localhost springboot-docker]# docker build -t springboot-docker:1.0 .
Sending build context to Docker daemon 17.85MB
Step 1/7 : FROM openjdk:8u181-jdk-alpine
---> 97bc1352afde
Step 2/7 : ARG workdir=/app
---> Using cache
---> a3818e8696c2
Step 3/7 : VOLUME ${workdir}
---> Using cache
---> e2faefe34aa6
Step 4/7 : WORKDIR ${workdir}
---> Using cache
---> 144b537c1b57
Step 5/7 : ADD springboot-docker-1.0.jar app.jar
---> Using cache
---> daca849e1012
Step 6/7 : EXPOSE 8080
---> Using cache
---> 123da0847dd3
Step 7/7 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
---> Using cache
---> de46a3f96d91
Successfully built de46a3f96d91
Successfully tagged springboot-docker:1.0
查看当前本地仓库的镜像,已经构建springboot-docker:1.0镜像
[root@localhost springboot-docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot-docker 1.0 de46a3f96d91 38 minutes ago 121MB
openjdk 8u181-jdk-alpine 97bc1352afde 5 weeks ago 103MB
运行镜像
docker run -p 8080:8080 -d --name springboot-docker springboot-docker:1.0
通过-p参数,把容器中的8080端口映射到宿主机中的8080端口。--name,给容器起一个名字
可以查看springboot应用的启动情况
docker logs -f springboot-docker
查看容器的运行情况
docker inspect springboot-docker
只看一些关键的信息
"Mounts": [
{
"Type": "volume",
"Name": "90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3",
"Source": "/var/lib/docker/volumes/90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3/_data",
"Destination": "/app",
"Driver": "local",
}
],
"Networks": {
"bridge": {
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
}
}
宿主机中的 /var/lib/docker/volumes/90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3/_data 目录挂载到 容器的 /app目录
容器的IP地址 172.17.0.2
运行成功后,在宿主机中通过命令访问服务
curl 172.17.0.2:8080/docker
也可以通过宿主机的IP或者localhost访问,因为已经绑定
curl 127.0.0.1:8080/docker
Docker | 使用dockerfile生成镜像,清理docker空间
用dockerfile
生成镜像并挂载数据卷
编写dockerfile
文件
- 创建
dockerfile01
文件
# 基础镜像
FROM centos
VOLUME ["volume01", "volume02"]
CMD echo "-----end----"
docker build
构建镜像
docker build -f ./dockerfile01 -t xiao-centos .
- 启动镜像
docker run -it 镜像ID /bin/bash
可以看到生成镜像时自动挂载的,数据卷目录
以上dockerfile
方式属于匿名挂载数据卷
清理docker使用空间
我个人使用的是单核2G的云服务器,用了快三年了,内存、cpu严重吃紧,所以就尝试了清理docker使用空间,主要是删除未使用过的镜像、容器、数据卷、网络命令,具体如下:
官方文档链接 https://docs.docker.com/config/pruning/
- 执行如下可以查看 Docker 的磁盘使用情况(类似于 Linux 上的 df 命令)
docker system df
- 删除所有未使用过的镜像
docker image prune -a
删除所有停止的容器
docker container prune docker rm -f $(docker ps -aq)
- 仅删除超过 24 小时的停止容器
docker container prune --filter "until=24h"
数据卷永远不会自动删除,因为这样做可能会破坏数据
- 删除未使用的数据卷
docker volume prune
- 删除没有使用过的网络
docker network prune
- 删除所有未使用过的资源
docker system prune
手动删除/var/lib/docker/volumes的问题解决
当时清理docker使用空间的时候,清过头了,一下子把挂载的数据卷也给顺手清理了,真是自己给自己找事做。
错误信息
手动删除了挂载到宿主机上的所有数据卷,在启动容器挂载数据卷的时候就会报错
如下,重新运行容器,原先具名挂载数据卷juming-nginx
,报错信息如下
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx
docker: Error response from daemon: open /var/lib/docker/volumes/juming-nginx/_data: no such file or directory.
尝试方法一(不建议使用):
- 删除所有容器
- 删除所有镜像
重新运行一个新的容器并挂载数据卷
# 1 docker rm -f $(docker ps -aq) # 2 docker rmi -f $(docker images -aq) # 3. docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx # 还是报错
结论:
无法解决问题,且删除所有容器、镜像存在的风险较大,不建议使用!
尝试方法二(推荐使用):
- 停止docker服务
- 重新启动docker服务
- 再次运行容器
# 1
systemctl stop docker
# 2
systemctl restart docker
# 3
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx
# 没有报错,docker ps查看 成功运行
结论
没有报错,docker ps
查看,成功运行
docker volume ls
查看镜像,可以看到具名数据卷juming-nginx
已显示出来了
docker volume ls
DRIVER VOLUME NAME
local a9b39215509378332ec9dfcdc3e10857b500694ea66efd9c2b7a6a9c55a2f10a
local juming-nginx
我是 甜点cc
热爱前端,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚,等待着一个创业机会。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。
希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。
关于Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像和dockerfile 部署springboot项目的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、b/w docker-compose build vs docker build生成的docker镜像有什么区别?、docker - dockerfile构建一个简单的springboot应用镜像、Docker | 使用dockerfile生成镜像,清理docker空间的相关信息,请在本站寻找。
本文标签: