4

本篇概览

在本小节里,我们将从Image仓库里拉取并运行Nginx,尝试下将本地文件和container文件相映射,Nginx相比hello-world多了些启动参数,我们将逐个攻破。

准备应用

我们在本机新建一个项目文件夹,在里面创建我们的静态资源文件,随后往index.html随便写点内容,执行下pwd命令获取一下当前文件夹所在路径。

mkdir class01 && cd class01
touch index.html
pwd

获取Nginx Image

我们打开国内的Docker Hub镜像站,搜索Nginx,第一个便是我们所需要的,打开Image详情页,会有详细地使用说明,我们先使用命令行方式去运行这个Image

docker pull nginx
docker run --name my-nginx  -d -p 3000:80 nginx

命令解释:

  • --name为当前创建的container起一个好记的昵称,默认情况下docker会随机分配一个昵称

  • -d即Deamon,能够让进程在后台运行而不阻塞命令行。

  • -p端口暴露,nginx通常运行在80端口,为了能够在主机访问container里的nginx,所以需要进行端口暴露,格式为:[host port]:[container port]

这时我们在本机访问localhost:3000,将会看到nginx的欢迎页。

挂载本机目录

如果想让nginx伺服本机的某个目录,我们需要加上-v命令,-v即Volume,我们希望nginx能够以当前文件夹作为资源目录,这个过程称为挂载,通过[Host dir]:[container dir]的形式将主机的目录覆盖container里面的目录,当然b目录本来的内容不会丢失,当我们不选择挂载时,其又将会生效。

docker ps # 显示当前正在运行的container,我们可以找到刚刚创建的my-nginx
docker stop my-nginx
docker rm my-nginx # 停止并删除my-nginx
docker run --name my-nginx -v [your pwd]:/usr/share/nginx/html:ro -d -p 3000:80 nginx

添加的[your pwd]为最开始创建的index.html所在的文件夹,如~/coding/docker-learn/class01

命令解释:

  • :ro意为Read Only,对container增加只读权限,默认为可读写

我们再次访问localhost:3000,显示的内容已经是我们创建的index.html了。

复用挂载的目录

上一步我们为my-nginx这个container挂载了数据卷,如果我们新的container也想用和my-nginx相同的数据卷呢?我们可以使用--volumns-from来复用数据卷地址。

docker run --name my-nginx1 --volumes-from my-nginx -d -p 3001:80 nginx

现在访问localhost:3001便可以得到同3000端口一样的效果了,试试docker ps看看目前运行中的container信息吧。


LuckyJing
472 声望21 粉丝