windows有2种方式获取docker环境,使用VM构建linux环境并安装docker,另一种是安装dockertoolbox,再通过bash的方式创建虚拟的docker环境(本文使用后者)
1、windows7下需要安装docker服务DockerToolbox
参照:https://java-sword.blog.csdn.net/article/details/92799469
下载boot2docker.iso可能很慢,多试几次(照着流程执行还是到github上下载,没有用到阿里云)
安装过程中出现了问题:Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, but CLSID_VirtualBox w/ IUnknown works
解决办法(如果没找到CLSID,直接搜后面那堆数字):
1) win+r 快捷键打开 “运行”,输入regedit 打开注册表
2)找到 HKEY_CLASSES_ROOT\CLSID\{00020420-0000-0000-C000-000000000046}
InprocServer32 修改 第一行(默认)的值为 C:\Windows\system32\oleaut32.dll
3)找到HKEY_CLASSES_ROOT\CLSID\{00020424-0000-0000-C000-000000000046}
InprocServer32 修改 第一行(默认)的值为 C:\Windows\system32\oleaut32.dll
4)完事。(我修改了完了 也没试用,直接重启电脑 然后成功了)
以root用户登录 sudo –i
DockerToolbox创建的docker默认提供https服务,可以在create时通过指定环境变量来提供http服务,如下命令
docker-machine create -d virtualbox --engine-env DOCKER_TLS=no default
参考:https://stackoverflow.com/questions/30717347/docker-machine-create-node-without-tls-verification
创建http服务的另一种方式参照https://github.com/docker/machine/issues/1532
$ docker-machine ssh
$ sudo vi /var/lib/boot2docker/profile # set DOCKER_TLS=no
$ sudo /etc/init.d/docker restart
$ exit
2、maven构建配置
1)插件只是简化构建镜像的操作,真正执行构建镜像还得依赖docker环境,插件在提交镜像时如果直接提交到harbor仓库会报错,自动在DOCKER_HOST后面拼接上/version
Caused by: com.spotify.docker.client.exceptions.DockerRequestException: Request error: GET http://192.168.126.131:5000/version: 404, body: 404 page not found
2)提交到本机的DockerToolbox构建的docker环境
但是DockerToolbox默认的服务是https协议export DOCKER_TLS_VERIFY=1(idea插件不知道怎么配置证书信息,暂考虑将docker服务设置成http的,即配置DOCKER_TLS=no环境变量)
3)使用git bash启动时出现Unable to verify the Docker daemon is listening: Maximum number of retries (10) exceeded,执行下面的命令进行重建:
docker-machine rm -f default
docker-machine create -d virtualbox --engine-env DOCKER_TLS=no default
4)maven配置
借鉴https://blog.csdn.net/fyk844645164/article/details/107878063
构建镜像问题:
a、不能获得镜像ID
之前使用的是docker-maven-plugin,可以指定Dockerfile所在目录,换成dockerfile-maven-plugin 插件后配置成:
Failed to execute goal com.spotify:dockerfile-maven-plugin:1.4.10:build (default-cli) on project api-gateway: Execution default-cli of goal com.spotify:dockerfile-maven-plugin:1.4.10:build failed: Could not acquire image ID or digest following build -> [Help 1]
解决办法:把Dockerfile放到项目根目录即pom文件所在目录
b. 没有指定的jar文件
DockerException: ADD failed: stat /mnt/sda1/var/lib/docker/tmp/docker-builder471129736/api-gateway.jar: no such file or directory
即Dockerfile文件以cmd环境进行编写,内容如下:
#基础镜像,如果本地没有,会从远程仓库拉取
FROM openjdk:8-jdk-alpine
#镜像制作人
MAINTAINER chenhj
#在容器中创建挂载点,可以多个VOLUME["/tmp"]
VOLUME /tmp
#声明了容器应该打开的端口并没有实际上将它打开
EXPOSE 8080
#定义参数
ARG JAR_FILE
#拷贝本地文件到镜像中
COPY ${JAR_FILE} app.jar
#指定容器启动时要执行的命令,但如果存在CMD命令,cmd中的参数会被附加到ENTRYPOINT指令的后面
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
[INFO] ---> Using cache
[INFO] ---> 31624ed83a0a
[INFO] Successfully built 31624ed83a0a
[INFO] Successfully tagged harbor:5000/library/api-gateway:v1.0.0
[INFO]
[INFO] Detected build of image with id 31624ed83a0a
[INFO] Successfully built harbor:5000/library/api-gateway:v1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 45.347s
[INFO] Finished at: Fri May 14 16:47:53 CST 2021
[INFO] Final Memory: 88M/1024M
[INFO] --------------------------
在docker环境中查看镜像是否构建成功
docker-machine ssh default以ssh方式访问虚拟机
使用docker images可以查看到生成的镜像文件
在maven的settings.xml文件中配置server(私有镜像仓库harbor的信息)
执行推送时报exceptions.DockerException: Get https://harbor:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
docker服务器默认使用https请求远程仓库,编辑daemon.json,添加
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://v3yu20l6.mirror.aliyuncs.com","http://harbor:80"],
"insecure-registries": ["harbor:5000","192.168.126.131:5000"]
}
未配置主机名映射地址报以下错误:
Get http://harbor:5000/v2/: dial tcp: lookup harbor on 10.0.2.3:53: read udp 10.0.2.15:49443->10.0.2.3:53: i/o timeout
/etc/hosts配置harbor对应的ip
Caused by: com.spotify.docker.client.exceptions.DockerException: denied: requested access to the resource is denied
dockerfile-maven-plugin配置项configuration配置远程私有镜像仓库的username和password
打包(如果单个模块引入了docker插件,此命令也可构建镜像)mvn clean package
推送镜像mvn dockerfile:push