记录下自己部署过程,先从前端简单的开始。 使用最简单的方式部署,前提是要了解Docker是干嘛的,并安装了Docker。
部署前端项目:
从掘金看一个合成大西瓜的游戏源码:
juejin.cn/post/692380…
拿过来稍稍魔改一下玩玩:
用cocosDashbord替换素材重新构建一下
直接打开index.html,效果如下图
原项目地址:github.com/tangxiangmi…,我改了下素材
接下来在这个index.html文件夹目录下创建Dockerfile文件,并输入以下内容
FROM nginx
#指定基础镜像,必须为第一个命令
COPY . /usr/share/nginx/html/
#本地Dockerfile文件目录所有内容添加到容器/usr/share/nginx/html/目录中
在index.html文件下打开命令行工具输入镜像打包命令:
docker build -t testimage .
-t后面的testimage是镜像的名字及标签,‘.’这个符号为当前目录查找DockerFile文件。执行DockerFile文件内容,生成一个名为testimage的镜像。后面将会把这个镜像run一个容器出来,或者上传到镜像仓库
接下来在命令行输入 docker images 可以看到这个testimage镜像
接下来在命令行输入docker命令:
docker run --name testcontainer -d -p 8090:80 testimage
--name后面 testcontainer 指定容器名称。
-p后面把容器80端口映射到宿主机8090端口,宿主机就是运行命令的电脑,Dockerfile里面FROM nginx,这个容器就直接有nginx环境并把目录在/usr/share/nginx/html/ 里的代码暴露在80端口,访问index.html就直接看到这个前端项目了,访问宿主机8090端口就等于访问容器80端口。
-d指后台运行容器并返回容器ID, 最后面testimage是镜像名字
现在就直接可以用docker ps 看到现在运行的容器:
访问127.0.0.1:8090/index.html 试试:
可以看到直接打开了。可以把镜像直接运行到有公网ip的机器上直接公网ip访问:公网ip:8090/index.html,
还可以在公网ip的机器上安装nginx,用域名解析上去,项目就上线了。
我自己稍微部署了一下:
xg.tuwei.space
部署后端项目:
后端项目比前端要复杂一点点,需要安装一些依赖包: 我们来用下最近特别火的基于Python的Web框架FastAPI,性能非常高,代码也很少的异步框架,跟Flask差不多,很简单 我们从本地把它跑起来吧,写一个接口 需要先本地安装两个包
pip install uvicorn
pip install fastapi
uvicorn:我的看法是类似于nginx的一种服务器软件, 百度是说: Uvicorn 是基于 uvloop 和 httptools 构建的非常快速的 ASGI 服务器 什么是ASGI: 异步网关协议接口,一个介于网络协议服务和 Python 应用之间的标准接口,能够处理多种通用的协议类型,包括 HTTP,HTTP2 和 WebSocket
新建一个main.py输入一下框架最简代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/index")
async def index():
return {'code': 200, 'msg': 'FastAPI niubi'}
启动命令:
uvicorn main:app --reload
修改代码会自动更新,框架默认暴露的端口为8000,来试试:
接下来在main.py文件夹下新建Dockerfile文件输入以下内容
FROM wynemo/python38
# 我想在python38环境下运行这个容器需要docker search搜索一下相关镜像,不能直接FROM python38。
ADD . /code
# ADD命令是将宿主机Dockerfile目录下所有的代码复制到wynemo/python38这个虚拟机镜像里/code目录下
WORKDIR /code
# WORKDIR是指以后的命令在该文件夹下执行,等同于cd命令
RUN python3 -m pip install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \
&& pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com fastapi \
&& pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com uvicorn
# RUN命令 这里主要做升级包管理工具,安装依赖包两个功能,后面-i是直接指定依赖包的源地址,加快构建速度。还可以做其他的跟多的功能,比如数据库迁移,清除缓存什么的。
CMD uvicorn main:app --host '0.0.0.0' --port 8080 --reload
#CMD 是指镜像运行时执行的命令,让容器里面的服务运行起来。--host能指定FastAPI的运行ip,不能指定为127.0.0.1,不然只能容器内访问啦。--port指框架运行的端口,后面运行容器会用到
在项目根目录下执行打包镜像命令,这里直接说命令了,不仔细截图了
docker build -t docker-fastapi:latest .
运行容器
docker run --name docker-fastapi -d -p 8100:8080 docker-fastapi
最后访问127.0.0.1:8100/index 试一下
部署成功,因为后端项目很简单就不上线了,就到此为止啦。
补充
最后补充一下,在线上运行时需要让docker开机自动启动,还需要在docker服务重启后容器也自动重启 加上--restart=always命令
docker run --restart=always
已经容器已经启动了,使用docker update命令
docker update --restart=always <CONTAINER ID>