使用 docker 在 AWS EC2 上部署 Node App

支持 Docker 的托管服务提供商有很多种:

  1. AWS: Amazon web services
  2. Microsoft Azure
  3. Google Cloud
    等等。

这里选用 EC2: Amazon Elastic Compute Cloud 亚马逊弹性计算云, EC2 是 AWS 提供的一项服务,使用 EC2 可以启动自己在云上的远程主机,之后就可以连接到这些计算机,然后在这些机器上安装任何软件。

有两种将App部署到远程服务器上的方法:

  1. 复制 App 源代码到远程服务器上,然后在远程服务器上build image。但这种方法增加了不必要的复杂性,因为要在服务器上build image,没有任何额外的好处,所以一般不考虑。

  2. 部署现成的 image,也就是先在本地电脑上build image,然后将构建后的image 部署到远程计算机上。

下面是一个 简单的 Node demo App,现在将这个App 部署到 AWS EC2.
在这里插入图片描述
步骤如下:

1. AWS

1.1 创建 AWS 账号

需要信用卡,EC2可以免费使用一年。除此之外AWS 账号超过3个月未登录会被永久终止。

1.2 创建一个 EC2 实例

得到一个在远程运行的主机,选项一般选默认免费的就好。需要下载一个 .pem 用于实现 ssh 连接EC2 实例。实例的状态由 pending 变为最终的running,中间有 delay.

1.3 连接 EC2 实例

网页上有好几种连接方法,可以用ssh连,但是第一种方法可以直接连,最为方便。

1.4 更新 EC2 实例的 OS

使用 ssh 连上 ec2 实例之后,运行命令:

sudo yum update -y

这将简单地确保该远程计算机上的所有基本软件包都已更新并使用其最新版本。

1.5 在远程服务器上安装 docker

sudo amazon-linux-extras install docker

amazon-linux-extras 显然是亚马逊的指令,各种 OS 如何安装docker, docker 网站上有对应文档。

UPDATE 230416: above commad does not work any more:
Instead, use this approach / these commands:

sudo yum update -y
sudo yum -y install docker
sudo service docker start
sudo usermod -a -G docker ec2-user

Make sure to log out + back in after running these commands.

Once you logged back in, run this command:

sudo systemctl enable docker

Thereafter, you can check whether Docker is available by running:

docker version

1.6 修改 security group, 这一步必不可少

找到与实例对应的security group,增加 inbound rules,type HTTP, port 80在这里插入图片描述
否则之后直接输入实例 ip地址,将无法访问网页,非bug,而是一个安全特征。
EC2 实例默认与万维网上的一切都断开连接,因此除了你本人能使用 ssh 进行连接之外,所有其他人都无法连接。

2. 将本地 image push 到 hub.docker.com

2.1 hub.docker.com 上创建账号

2.2 docker hub 上创建 repository

创建一个名称为 node-example-1 的repository

2.3 本地 build image:

docker build -t node-dep-example-1 . 

2.4 修改 image 名称,参考 docker hub 上的指令:

docker tag node-dep-example-1 yanchun2022/node-example-1

2.5 终端运行 docker login

使用用户名和密码,用户名不一定是邮箱,没有这一步,下面的 push 无法执行。

2.6 将本地 image push 到 hub.docker.com

docker push yanchun2022/node-example-1

3. EC2 实例上运行容器:

sudo docker run -d --rm -p 80:80 yanchun2022/node-example-1

网页上可以找到实例的 ip 地址,浏览器输入 ip 地址,就可以看到 App 界面,这里端口号使用默认的 http 端口 80, 因此可以直接省略,只输入 ip 地址就可以。

4. image 更新,如果本机修改了code

所有的必要的命令全部重新执行一遍,例如 build image, docker push, 等。
EC2 实例执行 docker stop:

docker stop the-container-name

然后使用命令:

sudo docker pull yanchun2022/node-example-1

此命令将从 hub.docker.image 上拉取最新版本的 image,
然后执行 docker run ... ,如果不使用 pull, docker run 仍将基于旧的 image 创建容器。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值