共计 2156 个字符,预计需要花费 6 分钟才能阅读完成。
申明:这是我第一次独立残缺的实现一次阿里云的单台服务器,docker-compose 部署,我不能保障我的做法是合乎最佳实际的,有可能还是谬误的,所以请各位辩证对待,帮忙纠正!
首先去申请了一台收费的阿里云服务器,期限为一个月
地址:
https://free.aliyun.com/?spm=5176.15218677.J\_3610715980.3.da8265ddqqlV3e
类型截图:
在 ECS 装置 docker
参考文章:
https://help.aliyun.com/document_detail/51853.html
在 ECS 装置 docker-compose
这里有个坑,个别举荐办法是 $ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
然而因为网络问题很难胜利。所以这里举荐用第二种办法,通过 pip 来装置。
$pip install --upgrade pip
$pip install docker-compose
如果装置不胜利,请尝试装置 pip3
并通过 pip3
来装置pip install docker-compose
部署
这里首先分享下我本地的 docker-compose 的配置:
version: "3.9"
services:
web:
build: .
environment:
- MONGO_HOSTNAME=mongo
- MONGO_PORT=27017
command: npm start
ports:
- "3600:3600"
links:
- mongo
mongo:
image: mongo
ports:
- "27017:27017"
在本地通过 docker-compose up
就能不便的启动服务,并能失常工作。
然而我不确定,在阿里云的单台 ECS 部署线上利用的最佳实际,所以我做了
第一个尝试:
- 首先在本地 build 利用,
docker-compose build
mongo uses an image, skipping
Building web
Step 1/6 : FROM node:latest
---> 35ccd3263923
Step 2/6 : WORKDIR /usr/src/app
---> Using cache
---> a0ef79dd5c84
Step 3/6 : COPY package*.json ./
---> Using cache
---> f588ed7c91fd
Step 4/6 : RUN npm install
---> Using cache
---> 46b2e77171b8
Step 5/6 : COPY . .
---> 3daa6029fb4e
Step 6/6 : EXPOSE 3600
---> Running in 7b73e44ccbb5
Removing intermediate container 7b73e44ccbb5
---> 15dbff2e656c
Successfully built 15dbff2e656c
Successfully tagged topics-api_web:latest
而后把 build 进去的 image,打上本人想要的标签:docker tag topics-api_web:latest hiveer/topics-api:0.0.3
而后把打好标签的 image 部署到 docker hub(默认的 docker registry):docker push hiveer/topics-api:0.0.3
- 在服务器拉取镜像
docker pull hiveer/topics-api:0.0.3
- 在服务器启动镜像
docker run hiveer/topics-api:0.0.3
很遗憾,利用启动不起来,起因是 docker run hiveer/topics-api:0.0.3
只启动了 web 利用,并没有启动 mongo 利用。我的第一个 idea 到此宣告失败。
第二个尝试
我在服务器装置了 docker-compose
,而后通过 git clone 把我的项目代码拉取到了服务器,而后通过docker-compose up
来启动服务,我的预期是应该可能像本地一样启动服务,然而还是失败了,起因是在启动 web 服务的时候报错了。这里比拟纳闷,为啥本地没问题,这里有问题呢?
思考了一番,我感觉应该是环境起因。依据 docker-compose.yml
文件中 web 服务的设置是,依据本地文件 build 服务,那么因为服务器环境和本地环境的不统一导致了这个谬误。我这时候有了第三个想法。
第三个尝试
我新建了一个 docker-compose-production.ymml
文件,而后我把其中的 build .
改成了image hiveer/topics-api:0.0.3
这个改变的作用是,让咱们在 build web 服务的时候,应用咱们打包好的镜像,而不是从新去 build,这个就防止了环境差别。
finally,胜利了!
最初我到阿里云的控制台,在平安组中关上了我想要的 3600 端口给 tcp 服务。我如愿以偿的拜访到了我的 API 服务!
我不确定,我的计划是不是最佳实际,然而我确定我分享进去必定能够帮忙到某些敌人。无论成功失败,经验都是一种财产。