Docker项目应用

it2022-05-05  190

Docker项目应用

Docker搭建 spark standalone搭建Docker可视化Docker+Flannel+Etcd跨主机访问安装etcd安装Flannel 使用Docker部署springboot项目创建springboot项目给项目添加Docker支持使用Maven来构建Docker镜像.

Docker搭建 spark standalone

下载spark的包到和Dockerfile一个目录下

https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz

spark-master

docker run -it --name spark-master -p 6066:6066 -p 7077:7077 -p 8081:8080 -h spark-master yye/spark:2.4.0 ./bin/spark-class org.apache.spark.deploy.master.Master

spark-worker

docker run -it --name spark-worker -P -h spark-worker --link spark-master yye/spark:2.4.0 ./bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077

启动spark master

docker exec -it c6a5ff37c092 ./bin/spark-shell

然后访问spark web页面

搭建Docker可视化

直接上命令

docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer-test portainer/portainer

访问9000端口 设置密码(要求密码8位以上)

Docker+Flannel+Etcd跨主机访问

安装etcd

因为网络地址需要放置在etcd上面 所以需要先安装etcd https://github.com/etcd-io/etcd/releases/download/v3.3.11/etcd-v3.3.11-linux-amd64.tar.gz

解压

tar -zxvf etcd-v3.3.11-linux-amd64.tar.gz

后台启动etcd ,说明,172.16.0.73 如果是云服务器,那就设为内网ip

nohup ./etcd --name etcd1 --listen-client-urls http://192.168.37.222:2379 --advertise-client-urls http://192.168.37.222:2379 &

查看是否启动成功

ps -ef | grep etcd

安装Flannel

下载flannel

wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/flannel-0.7.1-4.el7.x86_64.rpm

安装

rpm -ivh flannel-0.7.1-4.el7.x86_64.rpm

配置flannel-config.json网段 (先创建这个配置)

{ “Network”:“10.10.0.0/16”, “SubnetLen”:24, “Backend”:{ “Type”:“vxlan” } }

将flannel-config.json写入etcd

./etcdctl --endpoints=http://172.16.0.73:2379 set /docker/network/config < flannel-config.json

创建配置(其中-etcd-prefix是存储网段信息的目录前缀,-iface是物理机的网卡,-etcd-endpionts是etcd的客户端访问地址)

nohup flanneld -etcd-endpoints=http://172.16.0.73:2379 --etcd-prefix=/docker/network -iface eth0 &

查看flannel的日志,就在你运行命令的当前目录下,有个nohup.out,看生成了哪个网段的ip,然后将这个配置进docker的daemon.json文件 接着配置docker的网段

vim /etc/docker/daemon.json

添加bip

{ “bip”:“10.10.99.1/24” }

重启docker

systemctl daemon-reload systemctl restart docker.service

发现docker0 ip变了,增加了网卡 flannel ----------------------------------------------------------------------------------------- 另一台只需要安装flannel

flannel安装

rpm –ivh flannel-0.7.1-4.el7.x86_64.rpm

创建配置 (其中-etcd-prefix是存储网段信息的目录前缀,-iface是物理机的网卡,-etcd-endpionts是etcd的客户端访问地址 )

nohup flanneld -etcd-endpoints=http://172.16.0.73:2379 --etcd-prefix=/docker/network -iface eth0 &

查看flannel的日志,就在你运行命令的当前目录下,有个nohup.out,看生成了哪个网段的ip,然后将这个配置进docker的daemon.json,文件 接着配置docker的网段,添加bip

{ “bip”:“10.10.99.1/24” } 重启docker

systemctl daemon-reload systemctl restart docker.service

注意:如果你运行容器,然后两主机里面的容器ping通,请在两主机上面执行命令:

iptables -t nat -F POSTROUTING iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables –F iptables -L –n systemctl stop firewalld.service

使用Docker部署springboot项目

创建springboot项目

先创建springboot项目,application.yml配置:

server: context-path: / port: 80

然后TestController:

package cn.docker.test.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.text.SimpleDateFormat; import java.util.Date; /** * @author 杨樣儿~ * @date 19-7-18 16:15 * @description web层 **/ @Controller public class TestController { @GetMapping(value = "/test") @ResponseBody public String time(){ Date date=new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(date); } }

然后使用mvn package命令开始对spring boot项目进行打包构建,生成target目录 在此目录打开cmd,执行命令启动项目,

java -jar springboot-0.0.1-SNAPSHOT.jar

开启浏览器访问http://localhost:80/test,页面返回:当前时间,说明spring boot项目配置运行正常.

给项目添加Docker支持

Maven规范要求所有的资源文件都应放在src/main/resources目录下,我们在应用的resources目录下创建一个空白的文件Dockerfile,用来说明如何构建docker 镜像,

#jdk1.8 FROM java:8 #信息 MAINTAINER "yye"<1197684268@qq.com> # 生成springbootjar包复制到容器里 jar包名是app ADD springboot-0.0.1-SNAPSHOT.jar app.jar # 暴露的80端口 EXPOSE 80 #启动项目 CMD java -jar app.jar

开启docker远程服务

vim /usr/lib/systemd/system/docker.service

在[Service]部分的最下面添加下面两行:

ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 重新加载配置文件并重启服务

systemctl daemon-reload systemctl restart docker

然后查看监听的端口

ps -ef|grep docker

使用Maven来构建Docker镜像.

用maven读取Dockerfile文件来构建镜像并推送到注册中心去,由于Docker默认的镜像注册中心为Docke Hub(docker.io),当使用docker push命令推送镜像时,实际上是将镜像推送到docker.io的地址上,如果想推送到本地 需要自己搭建的镜像仓库(如:Harbor),则镜像名称需要添加前缀ip:port,因为我们之前已经搭好了本地Registry了,所以在pom.xml文件中添加properties:

<properties> <docker.registry>192.168.37.222:5000</docker.registry> </properties>

添加maven plugin到pom.xml文件中:

<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.10</version> <configuration> <imageName>${docker.registry}/${project.groupId}/${project.artifactId}:${project.version}</imageName> <dockerDirectory>${project.build.outputDirectory}</dockerDirectory> <dockerHost>http://192.168.37.222:2375</dockerHost> <resources> <resource> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>

简要说明一下configuration的配置:

imageName:用于指定镜像的完整名称,其中{docker.registry}为注册中心地址,{project.groupId}为仓库名称,{project.artifactId}为镜像名称,${project.version}为镜像标签名.dockerDirectory:用于指定Dockerfile文件所在的目录.resources.resource.directory:用于指定需要复制的根目录,${project.build.directory}表示target目录.resources.resource.include:用于指定需要复制的文件,${project.build.finalName}.jar表示生成的jar包.

构建镜像

mvn docker:build

然后就会看到success,就是已经把构建好的镜像推送到docker Registry了 查看构建的镜像 运行镜像

docker run -d -p 58080:80 192.168.37.222:5000/cn.docker.test/springboot:0.0.1-SNAPSHOT

查看是否运行成功

curl -XGET http://192.168.37.222:58080/test

也可以在windows上查看

http://192.168.37.222:58080/test

注意:192.168.37.222是我虚拟机ip


最新回复(0)