十年河东,十年河西,莫欺少年穷
学无止境,精益求精
1、新建 net6 webapi项目
一个非常简单的net6项目,使用mysql数据库,redis做缓存
关于项目的搭建,这里不做说明,本篇主要讲解docker-compose容器编排
2、项目的Dockerfile
如下
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 COPY . . ENTRYPOINT ["dotnet", "WebMySql.dll"]
3、将项目发布,项目文件传至linux服务器
采用scp命令传递文件
4、拉取mysql5.7 和 redis 镜像
此步骤省略,采用docker pull 指令
5、docker build 生成web项目镜像
此步骤省略
可参考:netcore 3.1 项目部署到docker 及遇到的各种坑 和 对应解决方案
docker build -f Dockerfile -t webapp:1.0 .
6、编写docker-compose.yml文件
在 /home/yaml/目录下创建该文件
version: "3.9" services: webapp: #服务名称 image: webapp:1.0 #所使用的镜像名称 container_name: myWebApp restart: always #开机启动 ports: #端口映射 - 8083:80 #左边为宿主机端口 右边为容器端口 - 1433:433 #左边为宿主机端口 右边为容器端口 networks: #使用自定义网络 - appNet volumes: #挂载 - /home/docker/volumes/myWebApp/appsettings.json:/app/appsettings.json #项目配置文件 - /home/docker/volumes/myWebApp/logs:/app/logs #Nlog日志 depends_on: #依赖的服务 - Redis #对应下面服务的名称 - Mysql #对应下面服务的名称 Redis: #服务名称 image: redis #所使用的镜像名称 container_name: myredis restart: always #开机启动 ports: #端口映射 - 6379:6379 networks: #使用自定义网络 - appNet volumes: #挂载 - /home/docker/volumes/redis/redis.conf:/etc/redis/redis.conf - /home/docker/data/redis/data:/data command: /bin/bash -c "redis-server /etc/redis/redis.conf" Mysql: #第二个服务名称 restart: always image: mysql:5.7 #所使用的镜像名称 container_name: mysql01 environment: MYSQL_HOST: mysql MYSQL_ROOT_PASSWORD: chch123 MYSQL_USER: chenwolong MYSQL_PASSWORD: ch12345678 MYSQL_DATABASE: Student TZ: Asia/Shanghai #时区 ports: #端口映射 - 3307:3306 networks: #使用自定义网络 - appNet volumes: #挂载 - /home/docker/volumes/mysql/conf/my.cnf:/etc/my.cnf - /home/docker/data/mysql/data:/var/lib/mysql command: --default_authentication_plugin=mysql_native_password #解决外部无法访问 networks: appNet:
7、创建挂载的文件【不可少,否则执行docker-compose up -d 时会失败】
通过rouch 或 vim 指令创建挂载的文件,并填充配置内容
其中redis.conf 可以不填充
/home/docker/volumes/myWebApp/appsettings.json
/home/docker/volumes/redis/redis.conf
/home/docker/volumes/mysql/conf/my.cnf
appsettings.json 内容如下:【注意配置文件中的两个连接字符串】
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "ConnectionStrings": { "studentDbContext": "Server=mysql01;Port=3307;Database=Student;Uid=root;Pwd=chch123;" }, "RedisConnectionString": "myredis:6379,allowadmin=true", // "RedisDbNum": 0 }
my.cnf 内容如下:
[mysqld] user=mysql default-storage-engine=INNODB character-set-server=utf8 character-set-client-handshake=FALSE collation-server=utf8_unicode_ci init_connect='SET NAMES utf8' [client] default-character-set=utf8 [mysql] default-character-set=utf8
8、目录定位到 docker-compose.yml 所在的目录,编排容器
9、进入mysql 容器,查看容器是否创建成功
进入容器
docker exec -it d94ca7bb1f2d /bin/bash
连接mysql,需输入root庄户密码
mysql -uroot -p
执行mysql命令
show databases;
10、查看挂载是否成功
在docker-compose.yml文件中,项目日志挂载到了/home/docker/volumes/myWebApp/logs 路径
日志挂载成功
11、运行项目
这样Net6项目就成功部署在了docker,使用了compose容器编排。
@天才卧龙的波尔卡
标签:compose,redis,nlog,volumes,mysql,home,docker From: https://www.cnblogs.com/chenwolong/p/docker-compose.html