windows有2种方式获取docker环境,使用VM构建linux环境并安装docker,另一种是安装dockertoolbox,再通过bash的方式创建虚拟的docker环境(本文使用后者)

1、windows7下需要安装docker服务DockerToolbox

参照:

下载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 <machine-id>
$ 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配置

借鉴

构建镜像问题:

a、不能获得镜像ID

之前使用的是docker-maven-plugin,可以指定Dockerfile所在目录,换成dockerfile-maven-plugin 插件后配置成:<dockerfile>src/main/docker/Dockerfile</dockerfile>报错

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可以查看到生成的镜像文件

docker sqlite3 镜像 docker iis镜像_docker sqlite3 镜像

在maven的settings.xml文件中配置server(私有镜像仓库harbor的信息)

<servers>
         <server>
                   <id>192.168.126.131:5000</id>
                   <username>harbor</username>
                   <password>Harbor12345</password>
                   <configuration>
                            <email>595077052@qq.com</email>
                   </configuration>
         </server>
</servers>

执行推送时报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 sqlite3 镜像 docker iis镜像_java_02

打包(如果单个模块引入了docker插件,此命令也可构建镜像)mvn clean package

推送镜像mvn dockerfile:push