2023年7月7日发(作者:)
Docker+node(koa)+nginx+mysql开发环境搭建什么是DockerDocker 是⼀个开源的应⽤容器引擎,基于 Go 语⾔ 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应⽤以及依赖包到⼀个轻量级、可移植的容器中,然后发布到任何流⾏的 Linux 机器上,也可以实现虚拟化。容器是完全使⽤沙箱机制,相互之间不会有任何接⼝(类似 iPhone 的 app),更重要的是容器性能开销极低。为什么要⽤Docker为了线下线上环境⼀致,更⽅便的部署⼤家⼀定经历过环境配置的折磨“明明在我这台机器上都可以运⾏,为什么跑你那去就出错了?”很⼤的可能环境不⼀致,如果线下更新了环境,那么服务器上也要更新⼀⼤堆。为了减少这些痛苦,Dokcer提供了很好的解决⽅案:打包我们的应⽤以及依赖到Docker容器中,从⽽避免了环境不⼀致Docker的⼀些概念镜像(Image):Docker 镜像(Image),就相当于是⼀个 root ⽂件系统。⽐如官⽅镜像 ubuntu:16.04 就包含了完整的⼀套Ubuntu16.04 最⼩系统的 root ⽂件系统。容器(Container):镜像(Image)和容器(Container)的关系,就像是⾯向对象程序设计中的类和实例⼀样,镜像是静态的定义,容器是镜像运⾏时的实体。容器可以被创建、启动、停⽌、删除、暂停等。仓库(Repository):仓库可看着⼀个代码控制中⼼,⽤来保存镜像。安装Docker⽀持的平台:DESKTOPDocker Desktop for Mac (macOS)Docker Desktop for Windows (Microsoft Windows 10)SERVERCentOSDebianFedoraUbuntuDocker仓库我们搭建环境使⽤的镜像都可以在上⾯的仓库找到在开发过程中如何使⽤Docker接下来我们就使⽤⼀个最简单的实例搭建⼀个基于koa的开发环境开发环境使⽤的配置Nodenode:12-alpinekoa 基础框架koa-router 路由promise-mysql mysqlnodemon ⾃动重启服务Nginxnginx:1.17Mysqlmysql:5.6⽬录结构- koa-docker - conf - data - - node_modules - - - static - 环境配置要先安装好本地的node环境,新建⼀个项⽬所有操作命令都在项⽬根⽬录中进⾏本地环境为Linux Mint,和Win平台的某些命令不⼀致,可以适当修改mkdir koa-dockercd koa-docker初始化项⽬# 进⼊根⽬录执⾏cmd命令,⽣成m init -y# 修改npm启动脚本{ "scripts":{ "start":"nodemon " }}安装node包包管理⼯具yarn,或者npm,cnpm,随意yarn add koa koa-router promise-mysql nodemonserver服务# t Koa = require('koa')const Router = require('koa-router')const mysql = require('promise-mysql')let app = new Koa()let router = new Router()// 根路由('/', async ctx=>{ = 'index'})// 测试mysql连接路由('/db', async ctx=>{ let db = await Pool({ host: 'mysql', port: 3306, user: 'root', password: '123456' }) let res = await ('SHOW DATABASES') = res})(())(3000)Compose 是⽤于定义和运⾏多容器 Docker 应⽤程序的⼯具。通过 Compose,您可以使⽤ YML ⽂件来配置应⽤程序需要的所有服务。然后,使⽤⼀个命令,就可以从 YML ⽂件配置中创建并启动所有服务。配置docker-compose如果我们只需要⼀个容器,可以⽤Dockerfile进⾏单独配置,(当然每个容器都可以写⼀个,然后docker-compose来build)现在我们有多个容器需要管理根⽬录新建⽂件我们⼀步⼀步构建服务version: "3"services: web: image: node:12-alpine #node镜像名称 working_dir: /code #⼯作⽬录 volumes: #挂载点 - .:/code #把本地当前⽬录挂载到容器的/code⽬录 ports: #端⼝映射 - "3000:3000" #本地端⼝:容器端⼝ command: npm start #这条命令会在⼯作⽬录下执⾏关于volumes挂载点:由于容器删除了数据也会删除,我们把容器⾥的⽬录挂载到本地⽬录,容器挂载了的⽬录有任何改变,都会保存到本地我们现在只有⼀个web服务,先跑起来看看能否正确运⾏docker-compose up如果你访问localhost:3000能够显⽰内容,说明容器正常运⾏起来了配置接着上⾯的配置,我们再添加⼀个mysql的配置# sion: "3"services: ... mysql: image: mysql:5.6 volumes: - ./data:/var/lib/mysql #挂载当前的data⽬录到容器默认mysql存储⽬录 environment: #环境变量 - MYSQL_ROOT_PASSWORD=123456 #mysql的root密码 - MYSQL_DATABASE=koa_docker #mysql的初始化数据库 ports: - "3306:3306"
我们现在有2个服务,web和mysql,⼀次同时运⾏两个服务docker-compose up不出意外,服务跑起来了,我们测试⼀下mysql是否能正常连接,访问localhost:3000/db,如果能够看到以下信息,说明mysql也正常连接了[{"Database":"information_schema"},{"Database":"koa_docker"},{"Database":"mysql"},{"Database":"performance_schema"}]配置我们需要nginx的默认配置⽂件,先把⼀个nginx容器跑起来,复制容器⾥⾯的配置运⾏⼀个nginx容器docker run -itd --rm nginx:1.17# -i 交互式操作
# -t 终端# -d 后台运⾏# --rm 容器停⽌后⾃动销毁我们会得到⼀个容器ID35c5c3671780也可以⽤docker ps查看运⾏的容器复制容器⾥⾯的⽂件# 复制nginx容器⾥的配置⽂件到当前⽬录docker cp 35c5c3671780:/etc/nginx/conf.d/ .配置⽂件server { listen 80; server_name localhost; location /static { alias /code/static; #路径可以⾃定义,放在什么⽬录都可以 } location / { proxy_pass web:3000; #地址web是⾥⾯的web服务名 } ...}移动配置⽂件到conf⽂件夹mv conf/sion: "3"services: ... ... nginx: image: nginx:1.17 volumes: - ./static:/code/static - ./conf/:/etc/nginx/conf.d/ #挂在nginx服务的配置⽂件到容器⾥ ports: - "80:80"我们有⼀个配置⽂件的挂载点,⽤于更改默认配置,如果mysql也需要更改配置⽂件,也可以添加⼀个配置⽂件的挂载点(也可以是挂载⼀个配置⽬录:./conf:/etc/nginx/conf.d)让我们⼀次跑3个服务,web,mysql,nginx,看看是否正确运⾏docker-compose up我们配置了nginx的代理,现在默认访问端⼝为80,不⽤再写端⼝号了注意,如果本地安装了nginx需要先停⽌本地nginx服务 systemctl stop nginx访问localhost不带端⼝号(默认80),是否正常访问localhost/db数据库是否连接正常访问localhost/static/测试static服务是否正常(静态⽂件就放在本地⽬录的static下)总结到此⼀个基于node的koa,nginx,mysql,开发环境就搭建完成,基于挂载点,开发调试也很⽅便如果你本地修改了⾥⾯的⽂件(随便什么⽂件),nodemon会监听⽂件变化,⾃动重启服务还有⼀个疑问,本地开发环境好了,是和线上环境⼀致的,那么怎样部署到服务器呢?我们下⼀篇见:附录sion: "3"services: web: image: node:12-alpine working_dir: /code volumes: - .:/code ports: - "3000:3000" command: npm start mysql: image: mysql:5.6 volumes: - ./data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=koa_docker ports: - "3306:3306" nginx: image: nginx:1.17 volumes: - ./static:/code/static - ./conf/:/etc/nginx/conf.d/ ports: - "80:80"github参考
发布者:admin,转转请注明出处:http://www.yc00.com/web/1688684358a162368.html
评论列表(0条)