目录
1 安装centos系统
下载centos镜像,地址 https://mirrors.aliyun.com/centos/
在虚拟机中安装centos
网上教程很多,示例1,本次安装硬盘40G,内存2G,网络选择了桥接模式。语言选择了中文,时间设成与当前一致,软件选择带GUI,系统自动分区,网络和主机名用了默认的,设置root密码,之后设置新建用户名和密码,也可跳过;
Centos安装完成后,重启,设置ip
用ifcongfig看此时ens33此时是没有IP地址的,且ping www.baidu.com也不通,说明上不了网,由于此时选择的是桥接模式,需要把有线网断开(因为常用无线网上网),打开手机热点,电脑连接手机热点,运行指令su root切换到root权限,运行指令dhclient自动获取ip地址,如果该指令不成功,reboot系统,再重新使用dhclient指令即可。
说明:如果采用的是公司网络,若在网络中做了限制,在安装过程中会报错。Centos的ip设置方法
也可以只将ifcfg-ens33文件中的ONBOOT=no改为yes,桥接模式,主机联网则虚拟机也能联网。service network restart重启网络服务。
查看centos版本,cat /etc/redhat-release
查看Linux版本,uname -a
查看内核版本,cat /proc/version
2 设置centos为固定IP
方法1:更改ifcfg-ens33文件
默认配置文件目录为cd /etc/sysconfig/network-scripts
用指令进入vi ifcfg-ens33文件,进入如下更改
按键盘”i”键进入编辑模式,更改完成后,按ESC键,之后按shift+Q键,再输入wq!指令(保存并推出),此时更改成功,reboot系统,用ifconfig指令即可看到ip被设置为静态IP
注意事项,如果文件非正常退出,会生产缓存文件,采用l.查看缓存文件
使用“rm -rf 文件名” 逐个删除这些临时文件,这样在用vi指令打开文件时就不会出现提示了,打开文件后,如果不能直接编辑,先按“A”键,即进入编辑模式,按照上面指令保存退出即可。
如果dhcp模式下获取不到ip,断开公司无线网,连接自己手机热点即可
方法2:利用NetworkManager
命令栏输入指令nmtui即可打开配置页面,如下,更改完配置后保存即可
通过上述方法更改的IP地址,利用vi ifcfg-ens33打开文件可以看到文件内容也变化了。
如果nmtui指令不能打开上述页面,可能是NetworkManager服务被关掉了,采用指令server NetworkManager start打开即可。
注意:部分情况需要关机该服务,并设置为开机不启动,方法如下
关于network服务和NetworkManager 服务说明
将NetworkManager 服务设置开机不启动
chkconfig NetworkManager off
将NetwokManager服务关闭
service NetworkManager stop
重新启动一下network服务
service network restart
或如下指令
临时关闭
systemctl stop NetworkManager
永久关闭
systemctl disable NetworkManager
重启
systemctl restart network
注意:中间出现过一次dhclient指令无反应的状态,各种折腾未果,关闭了NetworkManager也还是不行,后来发现是把桥接模式中的网卡设为了本地,改为自动后,也不行,重启电脑后才可以。
3 往centos中拷贝文件
利用WinSCP设置SFTP登录,设置如下,一定要选择SFTP协议,如果选择SCP协议,那么打开会有乱码
4 安装docker环境
参考网上教程进行docker安装,很好的docker入门,示例1,示例2,
主要步骤为:(通过docker软件仓库进行安装)
卸载旧版本docker-->安装基础组件-->添加docker软件仓库地址(使用阿里的镜像站)-->安装所需版本的docker,这里选择文件版-->验证密钥指纹-->安装完成后启动docker-->运行hello world镜像来验证按照是否正常,由于本地没有该镜像,系统会自动从远程镜像仓库下载。
扩展说明:yum是Yellowdog update Modified的简称。yum的宗旨是自动化的升级、安装/移除rpm安装包(也就说yum这个命令它的操作对象是RPM包),收集rmp的相关信息,检查依赖性,并提示用户解决。
RPM的全称是“RedHat Package Manager”,最早是Red Hat公司开发的,而rpm包则是软件编译完成后按照RPM机制打包起来的一个文件,可以用rpm命令安装的一个软件安装包,它省去了Linux软件安装中编译的步骤,安装成功后软件就可以用了。
docker常用命令如下
sudo systemctl start docker 启动docker
sudo systemctl status docker 查看docker运行状态
sudo systemctl stop docker 暂停docker
docker images 查看本地镜像
docker -v 查看docker版本
说明:上面指令都使用了sudo表示超级管理员权限,可以把当前用户加入到docker用户组,指令为usermod -aG docker your_username
设置docker开机自启动命令,sudo systemctl enable docker
比较好的链接,Docker基础用法篇
5 在docker中安装rabbitmq
查找镜像,docker search rabbitmq:management
拉取docker镜像,指令为docker pull rabbitmq:management,之后会自动从网上下载,如果提示不成功,有可能centos没联网,或docker未启动;
注意:要选择带rabbitmq 后面带management的镜像,这个是web端
这里是直接安装最新的,如果需要安装其他版本在rabbitmq后面跟上版本号即可。
官网查看rabbitmq版本,https://hub.docker.com/_/rabbitmq
带版本拉取镜像举例:docker pull rabbitmq:3.7.7-management
查看拉取的docker镜像是否存在,指令docker images
创建和启动容器,指令如下
docker run -di --hostname myRabbitmq1 --name rabbitmq -p 5672:5672 -p 15672:15672 -p 61613:61613 -p 1883:1883 rabbitmq:management
说明:直接输入该指令,不用前2步也行,因为系统自动检测,如果没有image会自动下载;
补充说明1:
-d 后台运行容器;
--name 指定容器名;
-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
-v 映射目录或文件;
--hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码),RABBITMQ_ERLANG_COOKIE,因为RabbitMQ使用Erlang实现的,Erlang Cookie相当于不同节点之间相互通讯的秘钥,Erlang节点通过交换Erlang Cookie获得认证
确认和启动容器
查看容器是否启动,指令 docker ps
查看容器,指令 docker ps -a
设置容器开机自启动,sudo docker update --restart=always containerID(容器名ID)
补充说明2:
docker images 查看镜像
docker ps -a 查看所有容器
docker ps 查看正在运行容器
docker stop containerID(容器名ID) 暂停正在运行的容器
docker rm containerID(容器名ID) 删除容器
docker rmi imagename(镜像名) 删除镜像
注意一定要先暂停容器,再删除容器,最后删除镜像,否则如果直接删除镜像,只是该镜像的tag被删除,会报错
补充说明3:
本次测试过程中发现创建的容器并没有启动,即使手动执行docker start containerID(容器名)也还是启动不了,使用docker logs containerID(容器名)进行查看,发现报错信息
此时删除之前创建的docker,更改docker run指令重新启动,成功如下
确认Web端可访问
在虚拟机外面的电脑,输入虚拟机ip:15672,访问rabbitmq控制台,由于上面提示用户名和密码不能更改,采用系统默认的,均为guest,可打开界面如下,代表安装成功
进入容器,并利用rabbitmq指令查看相应信息,参考网页,举例如下
docker exec -it containerID(容器名ID) bash
关于rabbitmq知识,参考网址,C#调用RabbitMQ实现消息队列
下面描述摘自网络:以熟悉的电商场景为例,如果商品服务和订单服务是两个不同的微服务,在下单的过程中订单服务需要调用商品服务进行扣库存操作。按照传统的方式,下单过程要等到调用完毕之后才能返回下单成功,如果网络产生波动等原因使得商品服务扣库存延迟或者失败,会带来较差的用户体验,如果在高并发的场景下,这样的处理显然是不合适的,那怎么进行优化呢?这就需要消息队列登场了。
消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。
RabbitMQ就是这样一款我们苦苦追寻的消息队列。RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。
RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。Erlang语言在数据交互方面性能优秀,有着和原生Socket一样的延迟,这也是RabbitMQ高性能的原因所在。可谓“人如其名”,RabbitMQ像兔子一样迅速。
6 在docker中搭建WordPress网站
WordPress是一个非常著名的PHP编写的博客平台,发展到目前为止已经形成了一个庞大的网站平台系统。本文会将出现两个容器,一个Wordpress的网站程序的容器,另一个则是MySQL的数据库容器,从中将看到两个容器是如何协同工作的。
用root权限登录centos,创建文件夹skg/do/for_mysql和for_wordpress,之后用下面指令进行安装,如果用其它用户名进行安装,则下面root改为home:
拉取MySQL数据库镜像并创建容器
docker run -d \
--name wordpressdb \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wordpress \
-p 33306:3306 \
-v /root/skg/do/for_mysql:/var/lib/mysql \
mysql:5.7
拉取WORDPRESS镜像并创建容器
docker run -d \
-p 8080:80 \
--name wordpress \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_PASSWORD=123456 \
--link wordpressdb:mysql \
-v /root/skg/do/for_wordpress:/var/www/html \
wordpress
之后会自动拉取镜像并创建和运行容器,之后进到/root/skg/do/for_wordpress目录,找到wp-config.php文件,打开,并设置用户名为root,密码为xxx,如果不设置会有报错,参考网站,重启WordPress的容器,用docker inspect 容器ID 指令进入容器,看分配的IP地址,在centos系统上用浏览器打开该地址即可看到如下页面。或在本地PC浏览器输入centosIP:8080也可以打开。
7 在docker中安装node-red
使用指令下载镜像到本地,参考教程
docker pull nodered/node-red
使用指令创建nodered容器
docker run -d -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
设置容器开机自启动
sudo docker update --restart=always containerID(容器名ID)
浏览器输入 centosIP:1880即可看到node-red界面,如下
8 在docker中安装可视化管理工具Portainer
执行查看都有哪些Portainer镜像指令,docker search portainer
拉取镜像 docker pull portainer/portainer
创建容器
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --name portainer-test portainer/portainer
设置容器开机自启动 sudo docker update --restart=always containerID(容器名ID)
浏览器输入 centosIP:9000即可看到界面,我这里设置的密码是12345678,默认用户名admin
下面是local docker的状况,这里可以看到镜像功能、容器功能、权限管理功能等。
- 镜像功能有查看列表、导入导出、拉取、推送、创建、删除等功能,基本涵盖了命令行常用的命令。
- 容器功能也一样,有新建、启动、停止、杀死、重启、删除等。
- 权限管理功能有涉及团队、角色、用户的管理。
9 在docker中安装homeassistant
新建一个文件夹存放config,路径,名字可改 mkdir /root/haconfig/ -p
执行查看都有哪些Portainer镜像指令,docker search homeassistant
拉取镜像 docker pull homeassistant/home-assistant
创建容器
docker run --init -d --name="home-assistant" -v /root/haconfig:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant
设置容器开机自启动 sudo docker update --restart=always containerID(容器名ID)
浏览器输入 centosIP:xx即可看到界面
10 在docker中安装mqtt服务器mosquitto
参考链接,很全面
注意需要手动建立相关文件夹,文件授予相关权限,并在mosquitto.conf文件中输入如下信息
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
listener 9001
port 1883
allow_anonymous true
注意:由于之前的rabbitmq已经占用1883端口,这里创建容器时要避免冲突
sudo docker run -it --name=mosquitto --privileged \
-p 1883:1883 -p 9001:9001 \
-v /mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf \
-v /mosquitto/data:/mosquitto/data \
-v /mosquitto/log:/mosquitto/log \
-d eclipse-mosquitto
查错参考如下链接
docker安装mosquitto2.0.14问题_蓝色格子的博客-CSDN博客_docker安装mosquitto
11 docker中安装emqx
docker run -dit --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 -p 8084:8084 emqx/emqx:latest
参考链接