一、整体的环境安装与部署
1.1、DOCKER环境的部署
1.1.1 安装DOCKER
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast && yum -y install docker-ce
systemctl restart docker
安装装成后,可以使用 docker指令验证是否正确安装
docker info
1.1.2 自定义 Docker 数据目录
默认情况下,DOCKER的数据目录都在系统盘下,可以修改 /etc/docker/daemon.json(如果不存在可以创建一个同名文件)
文件,并添加或修改如下配置,调整磁盘数据目录:
{
"data-root": "/my/custom/docker"
}
1.2、CONSUL环境的初始化
1.2.1 安装CONSUL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install consul
1.2.2 基本的参数配置
默认配置文件路径是:/etc/consul.d/consul.hcl,如果文件不存在,使用命令 sudo vi创建一个
#默认的数据文件路径,可以从其他的CONSUL里直接复制相关数据在这里
data_dir = "/var/consul"
#如果出现错误:将这个值修改为本机的IP
bind_addr = "0.0.0.0"
client_addr = "0.0.0.0"
#这里的默认配置是3,因为我是简易环境,只配置一个CONSUL节点
bootstrap_expect=1
#配合单节点启动使用
server = true
#是否启动UI,配置为TRUE的情况下,可以通过IP:8500进行CONSUL的UI访问。
ui_config{
enabled = true
}
1.2.3 自启动配置
创建文件:sudo vi /etc/systemd/system/consul.service
[Unit]
Description=Consul Agent
After=network.target
[Service]
Type=simple
#User=consul # 如果你的Consul是以特定用户身份运行的,请指定该用户;否则,可以省略此行
ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d -log-file=/var/log/consul/consul.log
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动,并设置为自启动
sudo systemctl daemon-reload
sudo systemctl start consul
sudo systemctl enable consul
验证是否正常启动
curl http://127.0.0.1:8500/ui/dc1/services
1.3、REDIS的安装与配置
1.3.1 安装REDIS
sudo yum update -y
在安装 Redis 之前,确保安装了编译 Redis 所需的基本工具和依赖
sudo yum install -y gcc make
从 Redis 的官方网站下载最新版本的源码,并进行解压:
cd /usr/local/src
sudo wget http://download.redis.io/redis-stable.tar.gz
sudo tar xzf redis-stable.tar.gz
cd redis-stable
使用 make
命令编译 Redis:
sudo make
编译完成后,运行以下命令进行测试并安装:
sudo make test
sudo make install
1.3.2 基本参数配置
Redis 提供了一个默认的配置文件,你可以将其复制到 /etc
目录以进行系统级别的配置管理:
sudo mkdir /etc/redis
sudo cp redis.conf /etc/redis/
你可以编辑 /etc/redis/redis.conf
文件,根据需要进行自定义配置:
你可以编辑 /etc/redis/redis.conf 文件,根据需要进行自定义配置:
基本配置
#守护进程模式:将 daemonize no 改为 daemonize yes,以使 Redis 作为后台服务运行。
daemonize yes
#绑定地址:如果你希望 Redis 监听所有接口,可以将 bind 127.0.0.1 改为 bind 0.0.0.0。
bind 0.0.0.0
#保护模式:如果你想允许远程连接,可能需要禁用保护模式,将 protected-mode yes 改为 protected-mode no。
protected-mode no
1.3.3 自启动配置
创建一个 Systemd 服务文件,以便在系统启动时自动启动 Redis
sudo vi /etc/systemd/system/redis.service
在文件中添加以下内容
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
重新加载 Systemd 配置,并启动 Redis 服务:
sudo systemctl daemon-reload
sudo systemctl start redis
sudo systemctl enable redis
1.4、 NGINX的安装与配置
1.4.1 安装NGINX
sudo yum update -y
sudo yum install epel-release -y
sudo yum install nginx -y
1.4.2 参数配置
Nginx的主配置文件位于/etc/nginx/nginx.conf
,虚拟主机配置文件位于/etc/nginx/conf.d/
目录下。
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
1.4.3 自启动配置
sudo systemctl start nginx
sudo systemctl enable nginx
检查NGINX状态
sudo systemctl status nginx
1.4.4 防火墙配置
如果已经启动了防火墙,需要允许HTTP和HTTPS流量
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
1.4.5 常用的Nginx服务管理命令
- 启动Nginx:
sudo systemctl start nginx
- 停止Nginx:
sudo systemctl stop nginx
- 重启Nginx:
sudo systemctl restart nginx
- 重新加载Nginx配置:
sudo systemctl reload nginx
- 查看Nginx状态:
sudo systemctl status nginx
- 重要命令:nginx -t 可以验证配置文件是否正确
二、项目的应用与部署
2.1 docker-compose
2.1.1 环境安装
下载二进制文件,具体版本号,可以去github的发布页面上查看一下
sudo curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
检查安装是否成功
docker-compose --version
2.1.2 yml文件配置说明
基本配置下如图。
version: "2.2"
services:
ccw_website:
build:
context: ./CXBIM.CCW_WebSite
dockerfile: Dockerfile
image: cxbim-ccw-website
ports:
- "8430:8430"
- "8431:8431"
volumes:
- /mnt/data/Publish/CXBIM.CCW_WebSite:/app
environment:
- ASPNETCORE_URLS=http://*:8430;http://*:8431
- SET_CONTAINER_TIMEZONE=true
- TZ=Asia/Shanghai
networks:
- cxbim-net
version:版本号,不同的的版本之间语法可能会有差异
services:需要构件或运行的服务集合,期下可以建立多个service,以上例子中为:ccw_website
build:context=指向项目的文件夹,相对于当前yaml文件的路径;dockfile:用于构件镜像的文件,一般默认为Dockerfile。
image:镜像名称
ports:宿主面端口:容器内端口,一般只配置一个即可。
volumes:将DOCKER挂载指向宿主机的某个具体的地址,对于拥有文件存储类的服务,这个是必要的。
environment:常用的一环境变量参数,在运行容器的时候,会带入
networks:网络,这个我是随意配置了一下。
2.2.1 常用指令
构建:docker-compose build —— 可追加追加 no-cache ,节省磁盘空间
运行:docker-compose up -d —— -d表示后台运行
停用:docker-compose stop
清理:docker system prune
三、遇到过的问题
3.1 时区问题
在DOCKER窗口内,默认使用的时区是伦敦时区,与北京时区差了8小时。在.NET项目内,使用DateTime.Now的时候就差了8小时。
在docker-compose.yml文件中,进行配置调整:
- TZ=Asia/Shanghai
另外,不同的 compose版本可能会有语法差异,可以使用另一个配置
- CONTAINER_TIMEZONE=Asia/Shanghai
实际效果截图如下:
3.2 磁盘占用问题
- 参考1.2中,调整DOCKER的数据目录
- 在docker-compose buid 的指令后,追加no-cache
- 使用指令《docker system prune》清理磁盘占用
3.3 REDIS 内存过度提交问题
如果你希望立即启用内存过度提交,可以运行以下命令:
sudo sysctl vm.overcommit_memory=1
要使内存过度提交设置在系统重启后依然有效,你需要将设置添加到 /etc/sysctl.conf
文件中
在文件末尾添加以下一行
vm.overcommit_memory = 1
然后,应用新的设置:
sudo sysctl -p
最后重启REDIS
sudo systemctl restart redis