1.簡介
項目介紹:
系統:Centos7
環境:Docker
項目: Netcore2.1
數據庫:Mysql
在部署前需要拉取三個官方鏡像:
mysql,nginx,microsoft/dotnet
[root@localhost NETCore]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest d72169616e20 3 days ago 443MB
nginx latest 27a188018e18 11 days ago 109MB
microsoft/dotnet latest e268893be733 2 weeks ago 1.74GB
2.項目部署配置
項目路徑:/root/Documents/NETCore
項目結構:
只顯示主要配置的文件
├── database
└── jhgdsm.sql (數據庫配置)
├── data.dll.config (數據庫連接字符串)
├── Dockerfile (docker配置)
├── proxy.conf (nginx配置)
├── docker-compose.yml(compose配置)
各個配置文件說明如下:
1.jhgdsm.sql :
文件內容如下:
USE mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
DROP DATABASE IF EXISTS `jhgdsm`;
CREATE DATABASE jhgdsm;
USE jhgdsm;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `jh_user`;
CREATE TABLE `jh_user` (
`id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`account` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`mtype` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '2',
`nickname` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1',
`mstatus` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'normal',
`company` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`mobile` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`img` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`createtime` datetime(0) NULL DEFAULT NULL,
`createuser_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`updatetime` datetime(0) NULL DEFAULT NULL,
`updateuser_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`logintime` datetime(0) NULL DEFAULT NULL,
`limitdevcount` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of jh_user
-- ----------------------------
INSERT INTO `jh_user` VALUES ('effd9698-01ab-49c8-9399-5f4ac7fd8d1b', 'admin', 'F5AAE2AA35E781EE3E1C03957B54F6F3', '1', '管理員11', '', 'normal', 'Giada', '', '', '', '2018-11-15 10:36:55', '', '2019-02-19 15:21:16', 'effd9698-01ab-49c8-9399-5f4ac7fd8d1b', '2019-04-10 17:09:36', 10);
#後面都是一些表的創建,忽略了
該文件是數據庫的數據表結構和數據,用於創建鏡像的時候初始化數據庫。數據庫名爲:jhgdsm,密碼123456。
2.data.dll.config
文件內容如下:
<?xml version="1.0" encoding="utf-8" ?>
<BaseSetting>
<MySqlConnection value="server=db;User ID=root;Password=123456;Database=jhgdsm;Allow User Variables=True;"></MySqlConnection>
</BaseSetting>
該文件就是mysql的連接字符串。注意“server=db”,後面會配置到。
3.Dockerfile
內容如下:
FROM microsoft/dotnet:latest
WORKDIR /app
COPY . /app
EXPOSE 5000
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet","GDSMPlateForm.dll"]
FROM指定容器需要的鏡像,GDSMPlateForm.dll是運行項目的dll文件,端口號是5000
4.proxy.conf
內容如下:
server {
listen 8080;
location / {
proxy_pass http://gdsm:5000;
}
}
監聽docker下的8080端口,轉發路徑爲gdsm:5000,注意“gdsm”,後面會配置到。
5.docker-compose.yml
內容如下:
version: '2'
services:
db:
container_name: gdsm.db
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- ./mysql:/var/lib/mysql
- ./database:/docker-entrypoint-initdb.d/
gdsm:
container_name: gdsm.web
build: .
depends_on:
- db
links:
- db
reverse-proxy:
container_name: gdsm.proxy
image: nginx
depends_on:
- gdsm
ports:
- "80:8080"
volumes:
- ./proxy.conf:/etc/nginx/conf.d/default.conf
以上內容部署了3個服務:
db:數據庫服務,data.dll.config文件的“server=db”相對應。
容器命名爲:gdsm.db,
參數“MYSQL_ROOT_PASSWORD: 123456”是數據庫密碼。
./mysql:/var/lib/mysql:掛載當前項目下的mysql文件夾來持久化存儲。
./database:/docker-entrypoint-initdb.d/:將/database目錄下的文件拷貝到/docker-entrypoint-initdb.d目錄下,也就是拷貝jhgdsm.sql文件。docker會遍歷docker-entrypoint-initdb.d目錄下所有的.sh和.sql後綴的文件並執行。
gdsm:web項目服務
容器命名爲:gdsm.web
build: .表示根據當前路徑來創建鏡像,創建過程與Dockerfile相關。
depends_on:表示依賴於db服務。
links:表示與db服務連接。
reverse-proxy:nginx服務
容器命名爲:gdsm.proxy
依賴於gdsm服務。
本機80端口映射到8080端口
./proxy.conf:/etc/nginx/conf.d/default.conf :掛載了當前項目下的proxy.conf文件作爲反向代理配置文件。其中該文件下的 "http://gdsm:5000"的gdsm映射的是gdsm服務。
3.項目部署
[root@localhost ~]# cd /root/Documents/NETCore/
[root@localhost NETCore]# docker-compose up -d
Building gdsm
Step 1/6 : FROM microsoft/dotnet:latest
---> e268893be733
Step 2/6 : WORKDIR /app
---> Running in 4fc18b3680d0
Removing intermediate container 4fc18b3680d0
---> 43376cb667e1
Step 3/6 : COPY . /app
---> 75f4a926b38c
Step 4/6 : EXPOSE 5000
---> Running in 1e1876652a14
Removing intermediate container 1e1876652a14
---> 0bd0204fac76
Step 5/6 : ENV ASPNETCORE_URLS http://*:5000
---> Running in cbbb308d7100
Removing intermediate container cbbb308d7100
---> ab5978301ee1
Step 6/6 : ENTRYPOINT ["dotnet","GDSMPlateForm.dll"]
---> Running in 0c089e311d50
Removing intermediate container 0c089e311d50
---> 600f8e56ef40
Successfully built 600f8e56ef40
Successfully tagged netcore_gdsm:latest
WARNING: Image for service gdsm was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating gdsm.db ... done
Creating gdsm.web ... done
Creating gdsm.proxy ... done
[root@localhost NETCore]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a2b8448e42a nginx "nginx -g 'daemon of…" 45 seconds ago Up 41 seconds 80/tcp, 0.0.0.0:80->8080/tcp gdsm.proxy
79aad0c9a764 netcore_gdsm "dotnet GDSMPlateFor…" 46 seconds ago Up 45 seconds 5000/tcp gdsm.web
6e8659acfb21 mysql "docker-entrypoint.s…" 47 seconds ago Up 46 seconds 3306/tcp, 33060/tcp gdsm.db
[root@localhost NETCore]#
完!