96、docker start指令报错,提示防火墙未开启,可重启docker后再尝试
systemctl restart docker
97、Docker根据CPU架构不同编译多平台镜像
# 启用buildx插件,docker版本大于等于19.03
# 查看构建器及其所支持的cpu架构
docker buildx ls
# 当前目录下创建Dockerfile
# 构建跨平台镜像
docker buildx build -t www.iray-dataset.com:8443/iray-robot:1.3 --platform=linux/arm64 --build-arg JAR_FILE=target/*.jar .
98、Maven项目编译成Docker镜像 参考spring-boot-demo : demo-docker
添加和pom.xml同级的Dockerfile文件
# 基础映像,第一条指令必须是FROM
FROM openjdk:8-jdk-alpine
# 用于指定公用挂载点
# 参考链接:https://www.cnblogs.com/51kata/p/5266626.html
VOLUME /tmp
# 声明与外界交互的端口
# EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P时,会自动随机映射 EXPOSE 的端口。
EXPOSE 8091 8092
# 添加变量定义
# 使用方式一:pom文件指定。pom-plugin-configuration-buildArgs赋值,才能在ADD中使用
# 使用方式二:docker build指令参数,--build-arg JAR_FILE=target/*.jar
ARG JAR_FILE
# ARG target/*.jar
# 往容器中添加jar包
ADD ${JAR_FILE} /home/springboot/app.jar
# RUN 指定镜像被构建时要运行的命令
# 增加字体支持
RUN apk add --update ttf-dejavu fontconfig
# WORKDIR: CMD/ENTRYPOINT 会在这个目录下执行
# CMD: 指定容器被启动时要运行的命令
# 同 CMD ,但不会被 docker run -t 覆盖
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/home/springboot/app.jar"]
# 作者姓名和邮箱名称
MAINTAINER "Xiangyun Kong stallonely@163.com"
方式一:Maven直接打包生成镜像。
- pom文件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-version}</version>
<configuration>
<repository>${project.build.finalName}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
<executions>
<!--设置运行 mvn package 的时候自动执行docker build-->
<execution>
<id>default</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
- 打包直接编译到本地镜像,并给镜像打私服对应的tag,否则不能push。
# 编译
maven clean package -D maven.test.skip=true
# 给镜像打私服对应的tag
docker tag iray-robot-master-computer:1.1.5 www.iray-dataset.com:8443/iray-robot-master-computer:1.1.5
# 推送私服镜像到私服仓库
docker push www.iray-dataset.com:8443/iray-robot-master-computer:1.1.5
方式二:先打jar包,然后运行build指令
# 打jar包
mvn clean package -D maven.test.skip=true
# 生成远程镜像
docker build -t www.iray-dataset.com:8443/iray-robot-master-computer:1.0.3 --platform=linux/arm64 --build-arg JAR_FILE=target/*.jar .
99、修改容器的挂载目录
参考链接 https://blog.csdn.net/zedelei/article/details/90208183
方式一:修改配置文件
# 1、停止docker服务
systemctl stop docker
# 2、修改配置文件中的目录位置,然后保存退出
vim /var/lib/docker/containers/containerID/config.v2.json
----------------------------------------------------------------------------------------
"MountPoints":{"/home":{"Source":"/docker","Destination":"/home","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"//docker/","Target":"/home"}}}
----------------------------------------------------------------------------------------
# 3、启动docker服务
systemctl start docker
# 4、启动docker容器
docker start containerID
100、修改Docker默认数据地址和自定义私服仓库地址,为Docker挂载数据盘
参考链接 https://blog.51cto.com/nanfeibobo/2091960
参考链接 https://www.cnblogs.com/ejiyuan/p/12241998.html
docker默认数据存放在 /var/lib/docker 目录下,该目录属于系统盘,随着业务量增长,不适合作为数据文件路径。
# 停止docker服务
systemctl stop docker
# 将默认的数据地址移动到挂载路径
# 如果要挂载新的数据盘,参考Linux命令-文件大小,磁盘相关等操作
mv /var/lib/docker /mnt/dockerln
# 软连接/mnt/dockerln 到/var/lib/docker
ln -s /mnt/dockerln /var/lib/docker
# 启动docker服务
systemctl start docker
docker registry搭建的私服,也要把仓库路径挂载在数据盘
# 停止docker服务
systemctl stop docker
# 将之前配置的/opt/registry私服仓库移动到挂载路径
# 如果要挂载新的数据盘,参考Linux命令-文件大小,磁盘相关等操作
mv /opt/registry /mnt/registryln
# 软连接/mnt/registryln 到 /opt/registry
ln -s /mnt/registryln /opt/registry
# 启动docker服务
systemctl start docker
Q.E.D.