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+Flannel的Docker跨主机通信架构

安装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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值