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上查看
注意:192.168.37.222是我虚拟机ip