Docker教程:二、Docker 安装 Nginx

1,048 阅读2分钟

安装nginx

bash命令行输入下面3行:

// 下载nginx镜像
docker image pull nginx

/*运行nginx容器
* --name 容器名字
* -p 宿主机和容器的端口映射
* -d 后台运行
*/
docker container run --name my-nginx -p 8001:80 -d nginx

// 查看虚机地址,例如:192.168.99.100
docker-machine ip default

完成以上步骤,在浏览器中打开虚机地址:8001,会出现以下界面:

如果需要挂载目录,则需要下面的操作

容器挂载本地目录说明

Windows 和 MacOS 不能原生地支持 Docker ,所以需要先启动一个 docker machine ,然后在里面运行 Docker 。所以 docker machine 实际上就是一个虚拟机,通过 VirtualBox 可以进行配置。

那么问题来了, docker machine 是一个虚拟机,所以其内部的文件系统与外部是分离的,也就是说,从 Docker 里面是无法直接访问到物理机的文件系统的。正常情况下,通过 Volume 可以将文件系统挂载到 Docker 内部,但是在 docker machine 中运行的 Docker 则只能访问到 docker machine 里的文件系统。

docker machine 在启动的时候,会自动将 Users 文件夹挂载到 docker machine 内部,如 Windows 上通过 /c/Users 即可访问,但是却无法访问其他文件夹。

如果要挂载其他文件夹,则需通过以下步骤:

通过 VirtualBox 配置,将需挂载的文件夹添加到共享目录,假设共享名字为“share”。

在 docker machine 里将共享的文件夹 mount 到 ~/share:

docker-machine ssh default 'mkdir -p ~/share && sudo mount -t vboxsf share ~/share' 接下来就可以在 docker machine 的 ~/share 访问到该目录,也就可以通过 Volume 挂载到 Docker 内部了。

win10中挂载目录

启动容器并挂载目录

docker run -d -p 8001:80 --name my-nginx -v /c/Users/nginx/www:/usr/share/nginx/html -v /c/Users/nginx/logs:/var/log
/nginx nginx

注意,/c/Users/其实指的并不是win10当前物理机的目录,而是名为default的docker-machine虚拟机。
也就是说物理机的/c/Users/被自动挂载到docker-machine虚拟机中,然后docker-machine虚拟机中的/c/Users/又被挂载到docker容器中。 然后执行:

cd /c/Users
mkdir -p ./nginx/html ./nginx/logs
cd nginx/html
touch index.html

在index.html中加入以下内容:

    <html>
        hello,new nginx!
    </html>

查看虚机地址,例如192.168.99.100:

docker-machine ip default

完成以上步骤,在浏览器中打开虚机地址:8001,会出现以下界面: