Docker 实用技巧三

运行第一个 Dockerfile
上一篇的 Dockerfile 我们停留在构建阶段,现在来把它跑起来
这里的-d
表示以分离模型运行 docker (detached),然后-p 是表示将容器的 80 端口开放给宿主机,然后容器名就叫 static_web,使用了我们上次构建的 static_web 镜像,后面的是让 nginx 在前台运行

可以看到返回了个容器 id,但是具体情况没出现,也没连上去,那我们想看看怎么访问在 Dockerfile 里写的静态页面,我们来看下 docker 进程

发现为我们随机分配了一个宿主机的端口,32768,去服务器的防火墙把这个外网端口开一下,看看是不是符合我们的预期呢

好像不太对额,应该是 ubuntu 安装的 nginx 的默认工作目录不对,我们来进容器看看,再熟悉下命令docker exec -it 4792455ca2ed /bin/bash
记得容器 id 换成自己的,进入容器后得找找 nginx 的配置文件,通常在/etc/nginx
,/usr/local/etc
等目录下,然后找到我们的目录是在这

所以把刚才的内容复制过去再试试

目标达成,give me five✌️
第二个 Dockerfile
然后就想来动态一点的,毕竟写过 PHP,就来试试 PHP 再建一个目录叫 dynamic_web,里面创建 src 目录,放一个 index.php 内容是
然后在 dynamic_web 目录下创建 Dockerfile,
Dockerfile 虽然只有三行,不过要着重说明下,这个底包其实不是 docker 官方的,有两点考虑,一点是官方的基本都是 php apache 的镜像,还有就是 alpine 这个,截取一段中文介绍
Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过 https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。Alpine 由非商业组织维护的,支持广泛场景的 Linux 发行版,它特别为资深/重度 Linux 用户而优化,关注安全,性能和资源效能。Alpine 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。
Alpine Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他 Docker 镜像,它的容量非常小,仅仅只有 5 MB 左右(对比 Ubuntu 系列镜像接近 200 MB),且拥有非常友好的包管理机制。官方镜像来自 docker-alpine 项目。
目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
一方面在没有镜像的情况下,拉取 docker 镜像还是比较费力的,第二个就是也能节省硬盘空间,所以目前有大部分的 docker 镜像都将 alpine 作为基础镜像了然后再来构建下

这里还有个点,就是上面的那个镜像我们也是 EXPOSE 80 端口,然后外部宿主机会随机映射一个端口,为了偷个懒,我们就直接指定外部端口了docker run -d -p 80:80 dynamic_web
打开浏览器发现访问不了,咋回事呢因为我们没看trafex/alpine-nginx-php7:latest
这个镜像说明,它内部的服务是 8080 端口的,所以我们映射的暴露端口应该是 8080,再用 docker run -d -p 80:8080 dynamic_web
这个启动,

本文使用署名 4.0 国际 (CC BY 4.0)许可协议,欢迎转载、或重新修改使用,但需要注明来源。
本文作者: Nicksxs
创建时间: 2020-03-21
本文链接: Docker 实用技巧三
版权声明: 本文为 InfoQ 作者【Nick】的原创文章。
原文链接:【http://xie.infoq.cn/article/da16d491dcaeac13a16f56bd9】。文章转载请联系作者。
评论