支持 Docker 的托管服务提供商有很多种:
- AWS: Amazon web services
- Microsoft Azure
- Google Cloud
等等。
这里选用 EC2: Amazon Elastic Compute Cloud 亚马逊弹性计算云, EC2 是 AWS 提供的一项服务,使用 EC2 可以启动自己在云上的远程主机,之后就可以连接到这些计算机,然后在这些机器上安装任何软件。
有两种将App部署到远程服务器上的方法:
-
复制 App 源代码到远程服务器上,然后在远程服务器上build image。但这种方法增加了不必要的复杂性,因为要在服务器上build image,没有任何额外的好处,所以一般不考虑。
-
部署现成的 image,也就是先在本地电脑上build image,然后将构建后的image 部署到远程计算机上。
下面是一个 简单的 Node demo App,现在将这个App 部署到 AWS EC2.
步骤如下:
需要信用卡,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 在远程服务器上安装 dockersudo amazon-linux-extras install docker
amazon-linux-extras 显然是亚马逊的指令,各种 OS 如何安装docker, docker 网站上有对应文档。
1.6 修改 security group, 这一步必不可少找到与实例对应的security group,增加 inbound rules,type HTTP, port 80
否则之后直接输入实例 ip地址,将无法访问网页,非bug,而是一个安全特征。
EC2 实例默认与万维网上的一切都断开连接,因此除了你本人能使用 ssh 进行连接之外,所有其他人都无法连接。
创建一个名称为 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-12.5 终端运行 docker login
使用用户名和密码,用户名不一定是邮箱,没有这一步,下面的 push 无法执行。
2.6 将本地 image push 到 hub.docker.comdocker push yanchun2022/node-example-13. 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 创建容器。



