+-
记录一次阿里云 ECS docker-compose 部署
首页 专栏 docker 文章详情
0

记录一次阿里云 ECS docker-compose 部署

hiveer 发布于 3 月 1 日
申明:这是我第一次独立完整的完成一次阿里云的单台服务器,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服务!

我不确定,我的方案是不是最佳实践,但是我确定我分享出来肯定可以帮助到某些朋友。无论成功失败,经历都是一种财富。

阿里云 docker docker-compose
阅读 154 更新于 3 月 1 日
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
hiveer

目前靠RoR养活,希望被JS包养

0 声望
0 粉丝
关注作者
0 条评论
得票 时间
提交评论
avatar
hiveer

目前靠RoR养活,希望被JS包养

0 声望
0 粉丝
关注作者
宣传栏
目录
申明:这是我第一次独立完整的完成一次阿里云的单台服务器,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服务!

我不确定,我的方案是不是最佳实践,但是我确定我分享出来肯定可以帮助到某些朋友。无论成功失败,经历都是一种财富。