运维之路第七期

第七期

1.安装Docker仓库(例如容器开源镜像仓库harbor)

由于我们的arm架构,所以官网的我们无法直接用,建议使用我们自己搭建的arm版harbor

  • yum install git -y安装git
  • git clone -b v1.10.0 --depth=5 https://github.com/goharbor/harbor.git
  • cd harbor/make
  • vim harbor.yml
hostname: (自己本机地址)
port: (自己定义端口号,记得不要使用80端口)
harbor_admin_password: (admin进入密码)

在这里插入图片描述

  • vim prepare
    修改goharbor/prepare为toyangdon/prepare
    在这里插入图片描述
  • ./prepare生成docker-compose.yml
  • vim docker-compose.yml
    将改文件中所有image属性中的goharbor改成toyangdon(我们自己搭建的一个harbor)
    不要运行./install.sh,否则会重新生成docker-compose.yml覆蓋了之前的修改
  • docker-compose up -d
  • 由于网络问题,不见得会成功

2.Spring Boot官方仓库下载一个最基础的单体服务,选择Web就行

  • 进入spring boot官网并选择spring initializr
    在这里插入图片描述
  • 选择web的基础单体服务
    在这里插入图片描述
  • 进行下载
  • 将下载后的文件上传至/usr/local/spring-demo
  • cd demo
  • mnv install没有配置阿里云镜像的记得配置下
  • 之后运行java -jar demo-0.0.1-SNAPSHOT.jar启动服务
    在这里插入图片描述
  • 报错
    在这里插入图片描述
    原来是8080被占用了
  • java -jar demo-0.0.1-SNAPSHOT.jar --server.port=9090改用9090启用,成功(^-^)V
  • 参考如何搭建简单的web项目

3.编写Docker file打包发布这个微服务

  • 进入刚才的demo项目根目录,创建Dockerfile文件与target平级
  • vim Dockerfile
FROM openjdk:8-jdk-alpine
ADD target/demo-0.0.1-SNAPSHOT.jar /app.jar
EXPOSE 8081
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  • 不要使用frolvlad/alpine-oraclejdk8因为是arm架构,O(∩_∩)O哈哈~
  • Djava.security.egd=file:/dev/./urandom 是因为linux中和windows中取随机数时的参考策略不同,linux默认的随机数会被取完,导致返回-1.而制定/dev/./urandom这个取随机数的策略时,当随机数取完之后会返回伪随机数,不至于影响业务。
    Dockerfile相关命令
  1. docker build -t test:v0.1 .这里设置镜像名称为test,版本为v0.1记得末尾加.
  2. docker run -p 8081:8081 test:v0.1
    在这里插入图片描述
  3. docker images
    在这里插入图片描述
  4. docker login没有注册的去dockerhub注册一个
  5. docker tag imageID username/repository:tag标记你的docker库和tag
  6. docker push username/repository:tag进行push

4.通过nginx对外进行服务

在nginx配置中增加

location /docker {
	proxy_pass   http://127.0.0.1:8081/;
}

5.通过Docker Compose对nginx和Spring Boot单体进行管理

  1. cd /usr/local/docker-compose
  2. vim docker-compose.yml
  3. 将我们刚才创建的image加入其中
version: '2'
services:
  nginx:
    image: nginx
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./nginx/conf:/etc/nginx/conf
      - ./nginx/log:/var/log/nginx
      - ./nginx/www:/var/www
      - ./nginx/web:/usr/share/nginx/html
  mysql:
     network_mode: "bridge"
     environment:
       MYSQL_ROOT_PASSWORD: "123456"
       MYSQL_USER: 'test'
       MYSQL_PASS: '123456'
     image: "mariadb"
     restart: "always"
     volumes:
     - "./mysql/db:/var/lib/mysql"
     - "./mysql/conf/my.cnf:/etc/my.cnf"
     - "./mysql/init:/docker-entrypoint-initdb.d/"
     ports:
     - "3306:3306"
  test:
     image: "test:v0.1"
     restart: "always"
     ports:
      - 8081:8081

一定要注意test镜像要跟版本号,否则会默认查找test:lastest,会找不到

  1. docker-compose down
  2. docker-compose up -d
    在这里插入图片描述

6.优化镜像大小

  1. docker images|grep test查看镜像大小
    在这里插入图片描述
  2. docker history 1e0b008cbe66查看镜像分层情况
    在这里插入图片描述

优化思路:

  1. 将连续的RUN命令合并在一起。
  2. 设置某个组件的基础镜像,这个基础镜像中只存放这个组件中不变的代码,将这个组件中会变化的部分放入该组件的各个服务中。
    以gnocchi为例,设置gnocchi-base作为gnocchi这个组件的基础镜像,里面放入不会改变的部分,
    将会修改的内容放入gnocchi的各个服务中,例如: gnocchi-metricd, gnocchi-statsd, gnocchi-api
  3. 删除镜像中不用的安装库,删除yum的缓存。
    即在执行执行yum安装命令后,就执行 yum clean all清理缓存和rm -rf /var/lib/yum/yumdb
    例子如下:
    RUN yum -y install epel-release
    && yum -y install rsyslog
    && yum clean all
    && rm -rf /var/lib/yum/yumdb

7.监控该微服务

先完成第9步再来监控

  1. 编写脚本,通过监听9000端口来判断是否关闭
#! /bin/sh
while [ 1==1 ]
   do
   state=`netstat -lnetp | grep 8081 | awk '{print $6}'`
echo "$state";
if [ "$state" == "" ]
   then `
        cd /usr/local/docker-compose/`;
        ./start.sh;
fi
   sleep 1
done
  1. 运行脚本即可

8.额外的任务(编写java内存溢出程序),让其产生OOM,观察崩溃的情况

9.编写自动打开和关闭该容器shell脚本

在/usr/local/docker-compose目录下编写
start.sh

#!/bin/bash
echo "start docker container ..."
docker-compose up -d
docker ps

stop.sh

#!/bin/bash
echo "stop docker container ..."
docker-compose down
echo `docker ps -a`

编写完后chmod +x start.sh stop.sh进行赋权

参考文档

https://blog.csdn.net/xp_lx1/article/details/103392812?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158496647819724846429825%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158496647819724846429825&biz_id=0&utm_source=distribute.pc_search_result.none-task

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值