赞
踩
如果说容器就是“小板房”,镜像就是“样板间”。那么,要造出这个“样板间”,就必然要有一个“施工图纸”,由它来规定如何建造地基、铺设水电、开窗搭门等动作。这个“施工图纸”就是“Dockerfile”。
比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤,最后就会创建出一个新的镜像出来。
# 使用 OpenJDK 8 作为基础镜像 FROM openjdk:8-jdk-alpine # 作者信息 LABEL maintainer="flgb" # 设置环境变量 ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \ JAVA_OPTS="-Xms2048m -Xmx2048m -Dspring.profiles.active=prod -Dserver.port=6088"\ PORT=6088 # spring-boot-admin.jar相对于Dockerfile的路径 COPY /spring-boot-admin.jar /spring-admin.jar # sh shell -c 执行后面命令 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /spring-admin.jar"] #通过 EXPOSE 命令暴露外部访问容器端口 EXPOSE $PORT
注意点
COPY 和 ADD 都是用于将文件从主机复制到 Docker 容器内部的命令,但它们之间有一些区别:
CMD 指令:
ENTRYPOINT 指令:
ENTRYPOINT 用于指定容器启动时要执行的可执行文件或脚本。
只需要运行该镜像,就会自动执行 ENTRYPOINT 指定的命令
如果 Dockerfile 中存在多个 ENTRYPOINT 指令,则只有最后一个生效。
在运行容器时,可以通过在 docker run 命令中指定参数来覆盖 ENTRYPOINT 中的内容。
如果 Dockerfile 中同时存在 ENTRYPOINT 和 CMD 指令,则 CMD 的内容会被作为参数传递给 ENTRYPOINT
所指定的可执行文件或脚本。
docker build [OPTIONS] PATH | URL | -
其中,PATH 可以是本地文件系统上 Dockerfile 文件所在的路径,也可以是 URL,或者是 -(表示使用标准输入)。OPTIONS 是一些可选参数,常用的参数包括:
例如,如果 Dockerfile 文件位于当前目录下,可以使用以下命令构建镜像并设置标签:
docker build -t spring-boot:1.0 .
上传dockerfile和spring-boot-admin jar到对应路径/data/java/spring-boot下
docker build -t spring-boot:1.0
经常会遇到如下报错:
COPY failed: stat xxxx: no such file or directory
1、Dockerfile 文件查找不到
如果dockerfile不在当前目录,则需要指定dockerfile 目录构建
docker build -f "/data/java/spring-boot/Dockerfile" -t spring-boot:1.0
2、Copy /spring-boot-admin.jar文件找不到的问题
COPY 命令中指定的源路径应该是相对于 Dockerfile 的路径。
COPY spring-boot-admin.jar /spring-admin.jar
COPY ../spring-boot-admin.jar /spring-admin.jar
failed to walk /var/lib/docker/tmp/buildkit-mount2576932656/data/java/spring-boot: lstat /var/lib/docker/tmp/buildkit-mount2576932656/data/java/spring-boot: no such file or directory
docker images
docker run -p 6088:6088 --name springboot --restart always \
> -d spring-boot:1.0
查看项目启动日志,启动成功
docker log 容器id
#动态更细查看日志
docker log -f 容器id
进入容器里面查看日志
#查看对应容器id
docker ps
#进入容器
docker exec -it container_id bash
#如果没装对应的bash命令,使用sh进入
docker exec -it container_id sh
#查看目录
ls
#退出容器
exit
#进入logback配置的输出log地址,查看日志文件
#停止容器
docker stop id
#删除容器
docker rm id
#重新生成挂在日志到本地目录的容器
docker run -p 6088:6088 --name spring-boot --restart always \
-v /home/spring-boot/logs:/home/spring-boot/logs \
-d spring-boot:1.0
同步查看本地目录
java.lang.NullPointerException: null at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219) at sun.awt.FontConfiguration.init(FontConfiguration.java:107) at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774) at sun.font.SunFontManager$2.run(SunFontManager.java:431) at java.security.AccessController.doPrivileged(Native Method) at sun.font.SunFontManager.<init>(SunFontManager.java:376) at sun.awt.FcFontManager.<init>(FcFontManager.java:35) at sun.awt.X11FontManager.<init>(X11FontManager.java:57) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83) at java.security.AccessController.doPrivileged(Native Method) at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74) at java.awt.Font.getFont2D(Font.java:491) at java.awt.Font.canDisplayUpTo(Font.java:2060) at java.awt.font.TextLayout.singleFont(TextLayout.java:470) at java.awt.font.TextLayout.<init>(TextLayout.java:531) at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:273) at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117) at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:82) at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:684) at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:705)
at sun.awt.FcFontManager.(FcFontManager.java:35)
org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:705)
1.在 Dockerfile 中进行修改,增加如下内容
ENV LANG en_US.UTF-8
RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
2.更换jdk镜像源
FROM frolvlad/alpine-java:jdk8-slim
docker save -o <保存路径>/<镜像文件名>.tar <镜像名称>:<标签>
docker save -o /tmp/myimage.tar myimage:latest
将镜像文件复制到目标机器。你可以使用 scp、rsync 或其他文件传输工具将文件复制到目标机器。
在目标机器上导入 Docker 镜像:
docker load -i <镜像文件路径>/<镜像文件名>.tar
docker load -i /tmp/myimage.tar
查看目标机器上加载了镜像
docker images
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。