九、docker实战

Dockerfile文件,内容如下:

九、docker实战

3、dockerfile打包业务镜像

九、docker实战

4、启动镜像,即得到业务运行

docker run -d -p 8090:8090  --name member member:v1

九、docker实战

5、浏览器打开页面校验:http://192.168.244.7:8090/

九、docker实战

maven源码打包用法

更多的情况,我们是直接在运维环境里,上传源码,直接maven打包jar,然后再进一步打包成镜像,与手动打包过程类似

 

 

 

如果环境中没有安装maven,请手动安装,脚本如下:

 sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo

# yum-config-manager --enable epel-apache-maven

// 安装maven

# yum install -y apache-maven 

 

 

1、上传原码到docker环境中(一般是git/svn直接拉取源码)

九、docker实战

2、maven打包

mvn clean package

九、docker实战

生成的jar在同级target目录下

九、docker实战

3、执行docker命令生成镜像

dockerfile文件内容

九、docker实战

命令创建镜像

九、docker实战

 

maven插件打包:

第一种(使用https):

前面打springboot包的方式,需要手动上传项目jar或者源码到服务器(违和感很强),这对于开发人员日常发布开发环境项目,极为不便

下面,演示一个maven插件:docker-maven-plugin用法,来打通环境。

前提条件

1、需要我们windows上安装docker服务

2、需要docker服务配置http仓库接口,windows上docker服务配置如下(传统配置模式无权限修改文件)

本地环境配置

1、windows上安装docker-toolbox,傻瓜安装即可。

2打开Docker Quickstart Terminal终端,等待初始始化完成后。

3、输入docker-machine env命令,返回docker服务的api接口和证书位置,如下:

九、docker实战

4、输入docker-machine ssh命令,进入sh环境中,配置http仓库路径

九、docker实战

修改文件配置(当前用户是docker不是root,要sudo提升至root):

sudo vi /var/lib/boot2docker/profile

九、docker实战

5、修改完成,保存。重启docker服务

sudo /etc/init.d/docker restart

九、docker实战

项目环境配置maven插件

在我们的工程pom中加入docker-maven-plugin插件的配置,如下

九、docker实战

1、其中,imageName配置镜像的全路径名,即指定私库的名称
2、dockerHost和dockerCertPath对应配置上一步中docker的api和证书值

 

打包运行

以idea为例,整个项目装配完成,只需要操作maven的一二三步骤,即直接镜像进入仓库,整个过程毫无违和感

九、docker实战

若使用的不是idea工具,可直接使用maven命令,一句完成打包,如下:

九、docker实战

九、docker实战

校验镜像仓库结果

九、docker实战

至此,我们的服务器环境,已经可以直接运行docker run 镜像得到结果了

 

第二种(使用http):

环境配置都同上,但是本地不需要安装dorcker-toolbox,在pom文件中这么配置

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.13</version>
            <configuration>
                <forceTags>true</forceTags>    <!--覆盖相同标签镜像-->
                <imageName>192.168.1.120:5000/test:v1.0.1</imageName>  <!--指定镜像名称 仓库/镜像名:标签-->
                <dockerHost>http://192.168.1.120:2375</dockerHost>  <!-- 指定仓库地址 -->
                <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>   <!--dockerfile文件路径-->
                <resources>
                    <resource>                                             <!-- 指定资源文件 -->
                        <targetPath>/</targetPath>                         <!-- 指定要复制的目录路径,这里是当前目录 -->
                        <directory>${project.build.directory}</directory>  <!-- 指定要复制的根目录,这里是target目录 -->
                        <include>${project.build.finalName}.jar</include>  <!-- 指定需要拷贝的文件,这里指最后生成的jar包 -->
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

项目和宿主机都换了

项目结构如下:

九、docker实战

Dockerfile文件内容:

FROM openjdk:8
ADD ["demo1-0.0.1-SNAPSHOT.jar","web.jar"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","web.jar"]

最重要的是宿主机的配置:

首先修改daemon.json文件

九、docker实战

我的内容:

{
  "registry-mirrors": ["https://registry.docker-cn.com","https://d8b3zdiw.mirror.aliyuncs.com"],
"insecure-registries": ["172.17.0.2:5000","192.168.1.120:5000"]
}

这一步修改的目的是告诉这个ip可以直接用http传输

下面打开服务docker的2375端口,这个端口主要负责传输

修改vi /usr/lib/systemd/system/docker.service

替换ExecStart

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

九、docker实战

然后重启docker

systemctl daemon-reload
systemctl restart docker

查看2375端口

curl http://127.0.0.1:2375/info

如果显示

九、docker实战

则表示正常

开启firewall的2375让别的ip可以访问

firewall-cmd --zone=public --add-port=2375/tcp --permanet
firewall-cmd --reload

启动docker私服容器

docker run -d -p 5000:5000 --name myregistry -v /var/lib/registry:/var/lib/registry registry

执行package、push

(可以使用命令推送mvn clean package docker:build)

九、docker实战

 

看结果:

九、docker实战

已经传上来了

ps:使用idea出现了莫名其妙的错,push的时候说服务器无法连接,我重新build一下有的时候就好使,但是有的时候就不行,还在研究这个是什么问题(用命令的时候没有出现该问题)