0%

# docker比一般多一点的初学者介绍三

Posted on 2020-03-21 In Docker , 介绍 Views: Views: Disqus:

## 运行第一个 Dockerfile

上一篇的 Dockerfile 我们停留在构建阶段，现在来把它跑起来

    1
    2
    docker run -d -p 80 --name static_web nicksxs/static_web \
    nginx -g "daemon off;"

这里的`-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
内容是

    1
    2
    <?php
    echo "Hello World!";

然后在 dynamic_web 目录下创建 Dockerfile，

    1
    2
    3
    FROM trafex/alpine-nginx-php7:latest
    COPY src/ /var/www/html
    EXPOSE 80

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`这个启动，

Related Posts

- docker比一般多一点的初学者介绍
- docker比一般多一点的初学者介绍二
- docker使用中发现的echo命令的一个小技巧及其他

请我喝杯咖啡

WeChat Pay

Alipay

- Post author: Nicksxs
- Post link: https://nicksxs.me/2020/03/21/docker比一般多一点的初学者介绍三/
- Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.