目的:
在阿里云ECS服务器上的docker下建立一个nginx的web服务器,并启动它,让外网可以看到
01-找到需要使用的镜像
docker pull nginx:1.17.5-alpine
#可以先到nginx.org官网查看当前最新版本,再到hub.docker.com查找nginx的版本,以上选中的alpine版本是一个非常小的版本
02-查看当前系统下有多少个镜像
docker images
# 或者
docker image ls

03-列出容器内的目录结构(非必要操作)
docker container run nginx:1.17.5-alpine ls
# 可以看到这应该是一个小型linux的目录结构

04-确认容器的核心版本(非必要操作)
docker container run nginx:1.17.5-alpine cat /etc/os-release
# 可以看到系统是Alpine Linux 3.10.3

05-启动nginx容器
docker container run --name mynginx -d -p 99:80 nginx:1.17.5-alpine
# container可以省略
# --name 该容器的名称
# -d 后台运行
# -p 99:80 在本地服务器端口和启动的容器内端口做映射。本地对外端口99, nginx容器端口80
# 可以看到返回了一串哈希码,表明启动成功了

06-检查一下nginx容器是否真的启动了
docker container ls
# 或
docker container ps
# 或
docker ps

07-检查一下nginx的web服务是否启动了
# 先用ifconfig检查一下当前服务器的ip地址,找出来后用curl命令来检测
curl http://172.16.130.208:99
# 或
curl http://127.0.0.1:99
# 可以看到web服务器已经启动了, 能看到默认的index.html文件内容。

08-复制服务器文件到docker的nginx指定目录下
docker cp /home/web.zip mynginx:/usr/share/nginx/html
09-检查一下nginx容器的bin目录下有什么自带指令
docker exec -it mynginx ls /bin

10-进入到nginx的命令行操作界面, 使用sh指令操作nginx容器
alpine linux没有附带bash, 只有sh可用
docker exec -it mynginx sh
# 可以看到已经进入到nginx容器内了

11-解压复制进来的文件
把原目录下的其它文件删除掉

解压web文件

12-在阿里云ECS控制面板上放行99端口

13-现在可以用浏览器访问了

补充:
从以上步骤来看, 其实有一个步骤非常繁琐, 就是将外部web文件复制进nginx容器的默认html存储路径, 如果我们需要经常性维护该网站, 需要来回的复制解压, 划不来.
可以采用路径映射的形式来操作, web文件还是放置在服务器的常规路径上, 让这个路径与nginx的html路径进行映射对应就可以. 维护时只需要维护服务器该路径下的文件即可.
- 停止当前的nginx容器
docker stop mynginx
- 移除nginx容器
docker rm mynginx
- 启动nginx容器, 并指定端口, 做好服务器端路径和nginx容器端路径映射
docker run --name mynginx -d -p 99:80 -v /usr/local/web:/usr/share/nginx/html nginx:1.17.5-alpine
现在可以检查一下了

至此, 基本完成了nginx容器的搭建和启动, 并将web程序挂载进去了, 以后更新web程序的话,只要用ftp或xshell之类的UI界面软件操作, 那样更友好.
one more thing:
web文件是从网上随便找的flutter生成的, 自己编译了一下. 仅做学习使用, 如有违规, 请提醒我删除, 谢谢!
网友评论