云原生Java 架构师的第一课K8s + Docker + KubeSphere + DevOps
Docker仓库:https://hub.docker.com/
编码开发微服务、上线部署容器化、时时刻刻要监控、devops。
一次镜像,处处运行。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
虚拟机与 Docker
Docker 运行在CentOS 7 (64-bit)上,要求系统为64位、Linux系统内核版本为 3.8以上。
测试是否成功 docker run hello-world (本地没有这个景象,是从仓库拉取的)
配置阿里云镜像加速,这个看脑图吧。配置完后,在执行 docker run hello-world 就会很快了,(上图虽然没配置上面等了一段时间才打出来。)
镜像、容器、仓库。
先从本地拉镜像,本地没有,从仓库找。
1.2.1 镜像
1.2.2 容器
1.2.3 仓库
仓库(Repository)是集中存放镜像文件的场所。
2.1.1 docker run -it
docker run -it ubuntu /bin/bash
docker ps 查看所有正在运行的容器
可以看到IMAGE ubuntu 镜像正在运行,CONTAINER ID 容器ID,和上面 root@e34084 是一样的。
docker run -it --name=myu1 ubuntu bash,又启动了一个容器,这次NAMES 为 myu1,前面返回了容器ID 就是正常启动了。新开一个终端查看 docker ps。
2.2.1 docker run -d
上面 run -it 都是前台交互式启动, 后台守护式启动 run -d,比如 redis。
docker logs 容器ID,查看日志,比如redis
docker exec -it acb16932c06b /bin/bash 进入容器。 一般用 -d 后台启动,然后 exec 进入对应容器实例。
2.2.3 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径目的主机路径
docker export 927e21b06561 > /root/exportUbutun.tar 导出容器到主机上
cat exportUbutun.tar | docker import - cg/ubuntu:1.0 导入导出的容器,进入到这个容器 a.txt 还在。
2.2.4 复制容器生成一个新的镜像
https://cr.console.aliyun.com/cn-beijing/instances 阿里云容器镜像服务
3.1.1 镜像推送到阿里云
创建命令空间,创建镜像仓库。在从本地推送镜像到阿里云。
3.1.2 从阿里云拉取镜像
docker pull registry.cn-beijing.aliyuncs.com/cgxin/myubuntu:1.1
3.2.1 镜像推送到私服库
原来什么也没有的 ubuntu,安装了 net-tools 在exit,下次进入就没有了。Ctrl + P + Q,然后将整个容器生成一个新的镜像,整个新的镜像是有 net-tools的。在 stop 原来的ubuntu,run -it 新的镜像即可。
docker commit -m=“ifconfig cmd add ok” -a=“cg” 4c6f298ddda8 cgubuntu:1.0
curl -XGET http://localhost:5000/v2/_catalog 验证私服库上有什么镜像。(localhost 是私服库的ip)
docker tag cgubuntu:1.0 localhost:5000/cgubuntu:1.0
没配置成功啊,修改了配置,docker就起不来了。(docker 20.10.9 允许http 推送镜像…)
docker push localhost:5000/cgubuntu:1.0
3.2.2 从私服库拉取镜像
必须要记住版本号,没有版本号,没法拉取。
然后 run -it,ifconfig 测试可行。
就会进入到 ubuntu 镜像创建的一个容器里,
有点 vue 中 v-model 双向绑定的意思。
docker inspect 803b5d9531c0 查看容器挂载信息。
这个 u1 和 u2 docker ps 最后一列 name 可以看到。
继承过来了。
docker run -d -p 8081:8080 --name t1 tomcat
tomcat8 不需要修改上面的 webapps.dist 就可以访问猫首页。
上面这是简单版的,删除容器后数据就都没了。
高级篇 Mysql主从复制★(亲测成功)
server_id=101
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
binlog_expire_logs_seconds=7
replica_skip_errors=1062
server_id=102
binlog-ignore-db=mysql
log-bin=mall-mysql-slave1-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=mall-mysql-relay-bin
log_slave_updates=1
read_only=1
docker restart mysql-master
然后在主数据库中 show master status;
出现如上。
Bug:Mysql 8.0 采用新的身份验证插件。(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)
终于连接成功了!
一套丝滑走完。 但是删了也就凉凉了。
测试文件生效,在 redis.conf 的 databases 16 是16个库(015),改成10个库(09)
docker restart myr3
docker exec -it myr3 /bin/bash
redis-cli
然后在 select 15 时候就会报错了(因为并没有16库了。)
高级篇★Redis 集群(3主3从)
搭建Redis 集群3主3从
docker run -d --name redis-node-2 --net host --privileged=true -v /cg/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /cg/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /cg/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /cg/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /cg/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
hash slot 哈希槽,3个槽;0:0 - 5640、1:5461 - 10922、2:10923 - 16383
可以看到6381、6382、6383 是 master,6381的 slave 是6384,和下图一样。
查看主从节点关系:
stop 6381,6384上位:
依旧可以 get 值。
6381 恢复后,6381 是 slave,想让6381 当 master的话,需要 stop 6384,然后在 start 6384
再查看集群状态:redis-cli --cluster check ip:6381
查看 key的存储情况:
查看 9.3 Portainer 操作配置 nginx
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
之前是拉取镜像ubuntu ,不含有 vim/ifconfig … 这些命令,安装后, docker commit 构建功能更加强大的 ubuntu++ 镜像。每次增加功能,随时变化都需要 docker commit 构建新的镜像。这样很不方便。
Dockerfile 构建镜像3步骤:编写 Dockerfile文件,docker build 构建镜像,docker run 镜像运行容器实例。
6.2.1 保留字
更多详细的,看脑图吧。特别是 ENTRYPOINT 和 CMD。
6.2.2 Tomcat8 的 Dockerfile
6.2.2.1 WOEKDIR 落脚点
6.2.2.2 EXPOSE 和 CMD
6.2.3 Dockerfile 案例 - centos7
Centos7拉取下来是什么也没有,现在让Centos7镜像具备vim + ifconfig + jdk8。
注意:用centos7,docker pull centos:7,centos8 会报错的。
EXPOSE 80
Dockerfile 构建镜像(需要在当前目录下)
出现 Successfully 即是成功,本地镜像没有centos:7,FROM centos:7 会从远程拉取了。
EXPOSE 80
01. 建项目
随便建一个项目,打成一个 jar包。(可以看脑图建一个)
02. 写 Dockerfile
FROM java:8
MAINTAINER
VOLUME /tmp
ADD docker_boot.jar cgxin_docker.jar
将 Dockerfile 和 jar包放在同一目录下:
03. 构建镜像
docker build -t cgxin_docker:1.0 .
04. 运行镜像
docker run -d -p 8080:8080 cgxin_docker:1.0
访问成功!
容器间的互联和通信以及端口映射,容器IP变动时候可以通过服务名直接网络通信而不受到影响。
启动docker后,产生一个 docker0 的虚拟网桥。
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
docker run 的时候没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机ifconfig,就可以看到docker0和自己create的network(后面讲)eth0,eth1,eth2……代表网卡一,网卡二,网卡三……,lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址
7.2.1 bridge
启动两个容器后,在主机 ip address,可以看到多了个2个ip
在启动一个 u1 容器,查看 ip address,发现也增加了一个 ip。 (网络模式用 bridge 时)
7.2.2 host
docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8
docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
可以看到并没有增加新的 ip,而是和主机共用一个。
真的牛,亲测可以访问的, 8080 8081 8082 都可以进猫网。
7.2.3 none
禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)
7.2.4 container
7.2.5 自定义网络★
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
进入容器实例,互相 ping ip 和服务名。
结论:自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
查看容器网络:docker inspect u1 | tail -n 20
Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。 容器启动需要有加载顺序,比如 jar包,需要先启动mysql + redis容器。
改造 6.4 写的项目,添加上 mysql 和 redis,这就需要mysql 和 redis 环境。
8.3.1 改造项目
8.3.2 构建镜像
Dockerfile 还是原来,没有改动。
docker build -t cgxin_docker:1.1 .
8.3.3 编排容器
8.3.3.1 不使用compose
8.3.3.2 使用 compose 编排项目★
想了很久很久啊。还是不编排了,阿里云服务器上本来就装了redis 和 mysql 环境了,下面还要在搭一个镜像。需要先 stop 原来的,然后其这个容器,测试完了后,在 start 原来的那些。mysql 还好说, redis 那个配置文件都在另一份笔记上了。嗯,这里不测试了,就写写吧。
编写 docker-compose.yml
version: “3”
- “8080:8080”
volumes: - /01exec/01docker/02docker_boot/microService:/data
networks: - cgxin_net
depends_on: - redis
- mysql
- “6379:6379”
volumes: - /cg/redis/docker_boot/redis.conf:/etc/redis/redis.conf
- /cg/redis/docker_boot/redis/data:/data
networks: - cgxin_net
command: redis-server /etc/redis/redis.conf
- “3306:3306”
volumes: - /cg/redis/docker_boot/mysql/db:/var/lib/mysql
- /cg/redis/docker_boot/mysql/conf/my.cnf:/etc/my.cnf
- /cg/redis/docker_boot/mysql/init:/docker-entrypoint-initdb.d
networks: - cgxin_net
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
构建镜像
docker netword ls,可以看到自己创建了新的网络。
关停
Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
官网:https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux
http://ip:9000/
第一次登录需要创建admin。
可以手动启动容器。
9.3.1 拉取镜像
Pull the Image
9.3.2 部署容器
Deploy the container:部署容器。下面可以进行一个更多的设置。
部署后,浏览器访问 nginx,可以看到成功了。 Docker 是真牛啊!
CAdvisor监控收集 + InfluxDB存储数据 + Granfana展示图表
- PRE_CREATE_DB=cadvisor
ports: - “8083:8083”
- “8086:8086”
volumes: - https://blog.51cto.com/u_/data/influxdb:/data
- influxdb:influxsrv
command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
restart: always
ports: - “8080:8080”
volumes: - /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- influxdb:influxsrv
ports: - “3000:3000”
volumes: - grafana_data:/var/lib/grafana
environment: - HTTP_USER=admin
- HTTP_PASS=admin
- INFLUXDB_HOST=influxsrv
- INFLUXDB_PORT=8086
- INFLUXDB_NAME=cadvisor
- INFLUXDB_USER=root
- INFLUXDB_PASS=root
所以下面配置 Granfana 中的 panel 时,写的数据库用的域名InfluxDB。
CAdvisor:http://ip:8080/
InfluxDB:http://ip:8083/
Granfana:http://ip:3000/
默认账号密码:admin / admin
配置数据源:
出现上面 Data Souce is working 即是成功。
配置面板 panel:
这样子,就配置完成了。
到此这篇单机版 笔记软件(单机版笔记软件哪个好)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-zyjn/75709.html