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直接打包生成镜像。

  1. 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>
  1. 打包直接编译到本地镜像,并给镜像打私服对应的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.


行走在天地间自由的灵魂