前言
docker目前是非常热门的项目,本文暂不讨论docker集群环境中的部署项目问题。
环境准备
1. docker环境(本文使用centos7下的docker环境)
2. javaWeb项目(springboot Web项目)
实战动手
1. 将springboot项目打包成war包,并且编写 Dockerfile 文档
前提: 将springboot项目中
spring.datasource.url = jdbc:mysql://localhost:3306/springboot?characterEncoding=UTF-8
修改成
spring.datasource.url = jdbc:mysql://mysql:3306/springboot?characterEncoding=UTF-8
localhost换成mysql的目的是为了能让javaweb项目访问到mysql的容器(还有一种方案是localhost填写成宿主机的ip地址)
还有修改spring.datasource.url = root
将springboot项目通过maven或者gradle 将springboot项目打包成 ROOT.war
编写 Dockerfile 文档(文档名 Dockerfile)
FROM java
VOLUME /tmp
ADD ROOT.war app.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]
EXPOSE 80
2. 将springboot项目打包成docker镜像
将ROOT.war 和 Dockerfile 文档放在同一目录
在ROOT.war 和 dockerfile的目录中 执行以下命令
docker build -t springboot .
执行完成后执行
docker images
你会看见一个叫springboot的镜像生成了,这个就叫做docker打包镜像
3. 编写docker-compose.yml 文档
version: "3"
services:
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
mysql:
image: registry.cn-hangzhou.aliyuncs.com/cczu/andy20160606:mysql5.7.20
ports:
- "3306:3306"
volumes:
- /home/mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
web:
# replace username/repo:tag with your name and image details
image: springboot
deploy:
replicas: 1
restart_policy:
condition: on-failure
resources:
limits:
cpus: "1"
memory: 500M
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
关键点
service :
visualizer:
mysql:
web:
此mysql为springboot项目中 jdbc ip地址的写法
其中mysql的用户名密码都是root
请确认服务对应的镜像都有,如果没有请自行先pull下来
docker pull registry.cn-hangzhou.aliyuncs.com/cczu/andy20160606:mysql5.7.20
// 这里是作者个人的mysql镜像,建议拉取后,tag一下然后push到自己的aliyun镜像上
docker pull dockersamples/visualizer:stable
// 官方镜像多拉几次,网络可能抽风
4. 执行 docker 集群命令
docker swarm init
说明 :docker-compose.yml 中可以配置集群信息,这里使用单机环境,但是命令需要执行
5. 通过 docker-conpose.yml 启动其中指明的3个服务
执行docker命令
docker stack deploy -c docker-compose.yml getstartedlab
启动成功后,稍微等待,然后
1.通过客户端工具,尝试去连接mysql
2.通过 ip:8080 去查看容器的相关信息,可以查看那些容器跑起来了
3.访问web项目 ip:80
一些问题
1. 执行 docker stack deploy -c docker-compose.yml getstartedlab ,springboot项目没有跑起来?
解决方法,执行
1,docker ps
2,docker service ls
3,docker stack ls
进行查询,springboot项目依赖mysql项目,mysql启动失败,那么springboot项目自然启动不起来
常用docker命令
docker build -t springboot. //生成镜像
docker images //显示所有镜像
docker tag image username/repository:tag //打包镜像
docker container ls //显示所有容器
docker ps -a //显示所有容器
docker container stop id //停止容器
docker container start id //启动容器
docker run -p 4000:80 username/repository:tag //以端口映射方式启动镜像
docker container rm $(docker container ls -a -q) //杀死所有运行的容器
docker image rm $(docker image ls -a -q) // 删除所有的镜像
docker service ls //显示已经有的服务
docker swarm init //首先初始化 进行集群 并且显示node节点
docker stack deploy -c docker-compose.yml getstartedlab //部署一个叫getstartedlab的 stack
docker stack rm getstartedlab // 删除stack
docker swarm leave --force //强制离开集群节点
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/cczu/andy20160606:[镜像版本号] //打包镜像
docker stack ps getstartedlab --no-trunc //-- no-trunc 不间断显示日志
docker run -p 3306:3306 -v /home/mysql/data:/var/lib/mysql -e MYSQL_PASS="root" registry.cn-hangzhou.aliyuncs.com/cczu/andy20160606:mysql5.7.20 //挂载启动容器
docker volume ls //显示挂载信息
欢迎留言
如果有相关问题,可以进行留言或者email我,如果博文有不正确的地方,希望您留下的宝贵的意见。
- always welcome to you to leave messages