侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Java Web微服务自动化构建

2023-11-05 星期日 / 0 评论 / 0 点赞 / 28 阅读 / 13826 字

网上很多docker介绍都是基于unix系统下,win7的资料较少,出现的错误,搜索的结果都是路唇不对马嘴,Holy Shitte!。所以记录下过程,使需要的人少走弯路,确实可以节省很多时间。一、下载

网上很多docker介绍都是基于unix系统下,win7的资料较少,出现的错误,搜索的结果都是路唇不对马嘴,Holy Shitte!。所以记录下过程,使需要的人少走弯路,确实可以节省很多时间。

一、下载安装Docker

官网的说明是windows下必须是win10系统,而且下载缓慢,直接通过以下链接下载DockerToolBox最新版本,十秒搞定。

https://get.daocloud.io/toolbox/

下载完安装,选择安装目录,完成后会生成以下快捷方式。

我们主要使用第一个快速启动终端,第二个是用来查看docker实例以及下载官方镜像的。

点击启动,等一会如果。

如果出现** Cannot connect to the Docker daemon. Is the docker daemon running on this host?**

更新安装目录和本地缓存目录(C:/Users/admin.docker/machine/cache/)下boot2docker镜像文件(.iso)。boot2docker最新镜像地址 https://github.com/boot2docker/boot2docker/releases速度看运气。下载完替换安装目录和本地缓存目录两个地方的iso文件。

此外要想运行成功,还必须开启BIOS(F10还是F4忘记了)中的虚拟化 (visualization security)为enabled状态。

如果一切正常,启动成功,会出现以下界面。

检查是否运行的标志是 通过命令 docker version ,出现下面的结果,而且必须同时出现Server和Client信息(如果不使用快捷方式启动,可能只看到Server启动成功).

二、安装镜像

docker images是查看容器已经安装的镜像。

运行成功docker后,需要安装项目镜像,依赖jdk镜像,数据库镜像等。所谓镜像,就是你需要运行的项目及环境都要打包到docker中才可以运行成功。

其中通用的jdk库、mysql通过daocloud很方便的下载下来。

使用以下命令

 docker pull daocloud.io/ld00000/jdk-8

再使用docker images会发现images多出了刚下载的镜像。

项目打包成镜像需要运行Run as---maven中输入package命令,target文件下生成生成jar文件。

注意:默认的docker运行环境目录是C:/Users/Xerxes/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Docker 必须使用shell命令进入到你打包的jar文件所在目录运行打包命令,或者把jar拷贝到以上目录中运行打包命令。

然后输入命令,别忘了最后的.

 docker build -t 你的项目jar文件名(不包含后缀.jar)  .

运行docker中spring boot项目镜像

**docker run -p 48080:80 -t treasure-0.0.1 **

提示mysql连接不上。

三、安装mysql

运行mysql容器(/my/datadir即/my/datadir . 指在当前目录下创建的存放数据的文件夹)

docker run --name mysql --volume-driver=local -v /my/datadir/treasure:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql

打开Kitematic

此处尽管共享了本地数据库的数据 /my/datadir/treasure(mysql下data中指定库的文件拷贝到当前命令行运行目录下,也可以用其他地址,如D:/xx/yy/zz),在上面的VOLUME下面的存放mysql数据的容器文件夹上点击enable,数据才会真的共享

不导入已有数据的话,运行mysql容器docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql

$ docker exec mysql5 sh -c 'exec source --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > f:/schema.sql进入mysql容器

docker exec -it mysql-master bash

四、 容器增加volume

volume

五、 上传镜像到Docker Hub

  1. 注册https://hub.docker.com账号,新建一个public/private repository.

  2. docker tag image {docker-hub-username}/{default-repo-folder-name}:first-image

  3. docker push {docker-hub-username}/{default-repo-folder-name}:first-image

六、 docker 容器交互

https://docs.docker.com/engine/userguide/networking/work-with-networks/#basic-container-networking-example

使用bridge模式自定义network

七、 maven中配置docker 使用dockerfile自动生成项目image。

spotify插件配置

https://github.com/spotify/docker-maven-plugin

https://eacdy.gitbooks.io/spring-cloud-book/content/3%20%E4%BD%BF%E7%94%A8Docker%E6%9E%84%E5%BB%BA%E5%BE%AE%E6%9C%8D%E5%8A%A1/3.7%20%E4%BD%BF%E7%94%A8Maven%E6%8F%92%E4%BB%B6%E6%9E%84%E5%BB%BADocker%E9%95%9C%E5%83%8F.html

八、 使用compose 一次配置web应用所有images

使用docker-compose插件可以编排多个容器实例,只需要配置docker-compose.yml文件即可。如果使用数据库服务名是mysql,那么在项目中数据库URL中host直接改为mysql,这样来连接容器内数据库实例。具体看后面的demo。

其他:

kitmatic可以启动、停止、删除容器

docker自带终端不能直接粘贴地址,MINGW64点击左上角图标,粘贴

查看容器ip:docker inspect --format '{{ .NetworkSettings.IPAddress }}' angry_golick

**如果项目build镜像用到的dockfile有expose 80 然后docker run -p 48080:80 -t treasure-0.0.1运行项目

会导致项目访问不了 必须去掉dockfile中expose 80 然后使用http://192.168.99.100:8080/swagger-ui.html即可。**

删除空白image

 docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

dockerhub 84795210

九、 终极Guide

9个docker菜单项目容器与mysql容器互通

十、 docker-compose 配置network

十一、ubuntu 项目部署实例

首先做volumes ,sql文件初始化 ,dockerfile准备等环境配置 (在ubuntu对应目录做好volume映射(容器中文件路径与宿主机文件路径一一对应,此步骤也可以在jenkins shell command中编写脚本实现))

最终docker-compose.yml参考

# Docker compose yml# Author: Cruz# site: https://github.com/gp15237125756# notion: # 1. /var/lib/mysql or /var/lib/redis locate the default data paths inside the container which created while redis&mysql container starting#    also /usr/bin/mysql represents the default path which created by mysql image# 2. build: . point to the dockfile path for web application# 3. volumes .:/code correspond to HOST:CONTAINER# 4. create the essential directory in local computer before startup docker-compose to do some initiation # 5. create network:  docker network create ldversion: '2.1'  #docker-compose versionservices:########################### APPLICATION ##################################  web:    container_name: webapp    build:      context: ./app/dockfile      dockerfile: Dockerfile    ports:      - "80:8088"    volumes:      - ./app/code:/app/code    links:      - redis      - mysql    networks:      - ld    depends_on:      mysql:          condition: service_healthy  #database health check before application startup      #redis:########################### REDIS ##################################  redis:    container_name: redis    image: daocloud.io/library/redis    volumes:      - ./redis/data:/var/lib/redis    networks:      - ld########################### MYSQL ##################################  mysql:    container_name: mysql    #build: ./mysql    image: daocloud.io/mysql:5.6    ports:      - "3306:3306"    volumes:      - ./mysql/sql:/docker-entrypoint-initdb.d  # execute init sql      - ./mysql/cnf:/etc/mysql/conf.d      - ./mysql/data:/var/lib/mysql  # data location    environment:      MYSQL_ROOT_PASSWORD: root    networks:      - ld    restart: always    healthcheck:      test: "/usr/bin/mysql --user=root --password=root --execute /"SHOW DATABASES;/""      # test: "/usr/local/mysql/bin/mysql --user=foo --password=foo --execute /"SHOW DATABASES;/""      interval: 30s      timeout: 30s      retries: 5#volumes:# ./mysql/data:/var/lib/mysql# ./redis-data:/var/lib/redis########################### NETWORKS ##################################networks:  ld:    external:      name: ld       

部署后mysql如果中文出现乱码,./mysql/cnf下必须增加一个自定义配置文件custom.cnf

[mysqld]character-set-server = utf8collation-server = utf8_unicode_ciskip-character-set-client-handshake

network配置

http://www.runoob.com/docker/docker-install-mysql.htmlhttp://www.cnblogs.com/baolong/p/5763412.htmlhttps://docs.docker.com/engine/reference/builder/#addhttps://docs.docker.com/samples/mysql/#where-to-store-datahttps://segmentfault.com/q/1010000003840346https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html

附上mysql权限准备sql

--mysql docker execuse mysql;delete from user where user='root';flush privileges;drop database if exists `treasure`;create database `treasure`;user `treasure`;CREATE USER 'root' IDENTIFIED BY 'root';-- 将docker_mysql数据库的权限授权给创建的docker用户,密码为123456:grant all on treasure.* to root@'%' identified by 'root' with grant option;-- 刷新权限flush privileges;docker run --name mysql-master -e MYSQL_ROOT_PASSWORD=root -d mysqldocker run --name mysql-master -v /my/own/datadir:/mysql/data -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

以上是win7环境下docker配置,生产环境下应该使用linux系统,安装简单多了。

十二、Jenkins自动化发布

正常项目以docker方式发布,可以配置docker-registery建立本地容器镜像仓库,使用Jenkins自动化发布到该仓库,以镜像方式交付给测试或生产环境。

由于以上ubuntu实例,以docker-compose方式在测试环境中运行,所以发布流程分为:

  1. 从svn拉取项目源码到Jenkins的workspace。

2.打包上面的代码,生成jar mvn clean package -a

3.使用SSH方式,将jar拷贝到./app/code目录下

4.执行shell脚本 重启docker-compose

首先,安装Jenkins插件,如Maven Integration plugin,Publish Over SSH,Subversion Plug-in等,有的已安装好了。Global Tool Configuration配置jdk,maven安装路径

系统设置

新建任务

保存配置。选中Poll SCM 添写* * * * * 意思是 jenkins每隔一分钟去SVN版本库中看看有更新没,如果有更新,则触发构建。以上设置周期5分钟间隔检查svn,如有变化,才重新build。可打开控制台,查看或调试构建过程。

Jenkins构建后操作可以做一些优化,如删除之前的web容器和image,这样每次都会使用提交后代码编译,打包,构建容器实例。配置如下

即把传输文件和执行脚本分成2个transfer Set(如果放在一个transfer set默认先传输完文件,然后执行shell命令)

广告 广告

评论区