二. 部署到 Heroku Railway
课程中部署到Heroku的步骤:
- 容器化我们的app(hello_crow)
- heroku 登录
- 创建一个heroku的app
- 推送这个容器,并发布它
- 在浏览器里测试
heroku收费,弃。在试验了heroku的替代品:fly.io, render, railway后,
fly.io: 在launch
阶段提示添加信用卡,弃;
render: 可以直接部署Image,操作最简单,但部署页面一直是in process
,弃;
railway: 使用railway CLI部署,部署成功。
以下是部署到railway的流程:
1. 容器化app
在部署之前,需把卷永久保存到docker image里,因为卷不是docker image的一部分。
下面把正在运行的app版本放入image里。
在主机目录cppweb下中,运行cppbox:latest image。
docker run -ti cppbox:latest bash
列出所有正在运行的容器:
docker ps
显示:
如果列出所有在运行和不在运行的容器,用命令:
docker ps -a
正在运行的容器id: c7b1adf797a8(含卷)
复制所需要的CONTAINER ID (一定不要含卷的容器,因为它的内容无法commit
到新的image里)ec814bc48bc5
,复制到容器,输入以下命令,把主机当前目录(cppweb)下的内容复制到<容器id(不能是带卷的容器)>下的/usr/src/cppweb
docker cp . ec814bc48bc5:/usr/src/cppweb
接下来,把容器的内容带到新的image(hello_crow:latest):
docker commit ec814bc48bc5 hello_crow:latest
显示:
sha256:385043f8207f1cb9035220360e16e6f468daa6790ddc11a35ef3859b8a60f2a8
返回vscode,在hello_crow目录下,新建Dockerfile
如下:
FROM hello_crow
WORKDIR /usr/src/cppweb/hello_crow/build
CMD ["./hello_crow"]
由于当FROM hello_crow
,部署时显示错误:
ERROR: failed to solve: bbox:latest: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
使用build目录作为开始目录,当image被启动时,在这个目录下,启动hello_crow app。
因此,把hello_crow推送到docker hub自己的仓库中,修改为From auly/hello_crow
,可解。
2. 保存容器到Docker Hub
我们可以用自己的image,也可用他人的image,因此有docker hub。
docker hub:基于云的注册服务,用于存储和查找docker image,免费注册,可以存储任意多的公有image和1个私有image。
保存容器到Docker Hub的步骤:
(1) 登录
在hello_crow目录下,登录docker hub。
docker login
(2) 标记
列出所有image:
docker images
标记image:
docker tag <最新的image id> auly/hello_crow:latest
(3) 推送
docker push auly/hello_crow
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usymNisO-1685891427233)(images/docker_push.jpg)]
(4) 浏览器登录hub.docker.com查看
image的url:docker.io/auly/hello_crow
3. 部署到railway
注册一个railway账号/用谷歌账号登录。
使用railway CLI部署。
(1) 下载railway ClI
在wsl下,安装命令:
bash <(curl -fsSL cli.new)
需等待一会儿才显示进度条。
验证安装成功:
railway version
(2) 登录
登录railyway:
railway login
打开浏览器页面确认登录(有时需断开vpn才能登录成功)。
(3)创建新project
创建一个新的project:
railway init
可自己取名字也可直接Enter
随机取。
(4) 链接
把project和当前的目录连接起来:
railway link
(5)部署
在部署前在浏览器railway bashboard界面,找到service,点setting,在最下面一个选项,把\health
删除,不让它健康检查。
部署:
railway up
在bashboard - service界面显示部署成功。
(3) 浏览器查看
在bashboard - service界面 setting复制链接,在浏览器打开,显示页面。