构建前后端分离项目
准备工作
创建 backend 与 frontend 目录,成功后创建 backend 与 frontend 的子目录及文件
> mkdir backend frontend db
> mkdir backend/publish frontend/dist -p
> touch db/my.cnf db/init.sql db/Dockerfile backend/Dockerfile frontend/Dockerfile frontend/app.conf
创建完成后的完整目录如下:
.
├── backend
│ ├── Dockerfile
│ └── publish
├── db
│ ├── Dockerfile
│ ├── init.sql
│ └── my.cnf
├── docker-compose.yml
└── frontend
├── default.conf
├── dist
└── Dockerfile
创建专用网络
创建一个专用网络,名字为 appnet
> docker network create appnet
数据库部署
编辑 my.cnf,设置字符集为 utf8mb4,并设置默认时区为 +08:00,并设置表名大小写敏感
[mysql]
default-character-set=utf8mb4
[mysqld]
lower-case-table-names=1
character-set-server=utf8mb4
default-time-zone='+08:00'
同时准备数据库初始化脚本 init.sql
CREATE DATABASE IF NOT EXISTS `appdb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
...
编写 Dockerfile 文件
在 Dockerfile 中设置默认访问端口为 3306,并开放端口,允许修改端口
Dockerfile
FROM mysql:5.7
COPY ./my.cnf /etc/mysql/my.cnf
COPY ./init.sql /docker-entrypoint-initdb.d/
EXPOSE 3306
构建镜像
> docker build -t db .
完成构建后可以通过 docker images 查看新镜像
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
db latest 96159225485d 10 minutes ago 441MB
运行
设置自动启动,开放端口 3306,并设置网络为 appnet
docker run --name appdb -itd -p 3306:3306 \
-v ./conf.d:/etc/mysql/conf.d -v ./data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 --restart=always --network appnet appdb
接口部署
将接口项目发布后的文件上传至 publish 目录下
编写 Dockerfile 文件
在 Dockerfile 中设置默认访问端口为 5000,并开放端口,允许修改端口
Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app
COPY ./publish .
EXPOSE 5000
ENTRYPOINT ["dotnet", "app.dll"]
CMD ["--urls","http://*:5000"]
构建镜像
> docker build -t appapi .
完成构建后可以通过 docker images 查看新镜像
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
appapi latest 49c6deeec83d 38 minutes ago 933MB
运行
设置自动启动,开放端口 5000,并设置网络为 appnet
> docker run --name appapi1 -itd -p 5000:5000 --restart=always --network appnet appapi