经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
Docker 实战—使用 Dockerfile 构建镜像
来源:cnblogs  作者:浮云Cloud  时间:2019/11/4 8:33:17  对本文有异议

GitHub Page:http://blog.cloudli.top/posts/Docker实战-使用-Dockerfile-构建镜像/

Dockerfile 指令详解请访问:https://www.cnblogs.com/cloudfloating/p/11737447.html

使用 Alpine Linux 作为基础镜像

Alpine 是一个非常轻量的 Linux 镜像,他只有大约 5MB 的大小,基于它构建镜像,可以大大减少镜像的体积。

Alpine 的 Docker Hub 页面:https://hub.docker.com/_/alpine

  1. docker pull alpine

Alpine 使用 apk 命令来安装软件包,支持的软件包列表可以在官网查看:https://pkgs.alpinelinux.org/packages

这里以安装 Nginx 为例,学习镜像的构建。另外 Nginx 本身有官方镜像,pull 即可。

构建 Nginx 镜像

编写 Dockerfile

  1. FROM alpine
  2. RUN apk update # 安装 nginx
  3. apk add --no-cache nginx mkdir /run/nginx && # 清除缓存
  4. rm -rf /tmp/* /var/cache/apk/*
  5. # 添加容器启动命令,启动 nginx,以前台方式运行
  6. CMD [ "nginx", "-g", "daemon off;" ]

这里有一个坑点,必须创建 /run/nginx 目录,不然会报错。

构建镜像

使用 docker build 命令构建:

  1. docker build -t nginx-alpine .

在 Dockerfile 目录下执行以上命令即可构建镜像。-t 参数指定了镜像名称为 nginx-alpine,最后的 . 表示构建上下文(. 表示当前目录).

在使用 COPY 指令复制文件时,指令中的源路径是相对于构建上下文的(如果指定上下文为 /home,那么相当于所有的源路径前面都加上了 /home/)。

如果你的 Dockerfile 文件名不是 “Dockerfile”,可以使用 -f 参数指定。

千万不要将 Dockerfile 放在根目录下构建,假如你将 Dockerfile 放在一个存放大量视频目录下,并且构建上下文为当前目录,那么镜像将会非常大(视频都被打包进去了)。最佳做法是将 Dockerfile 和需要用到的文件放在一个单独的目录下。

运行容器

使用构建的镜像运行容器:

  1. docker run --name my-nginx -p 80:80 -d nginx-apline
  • --name 指定容器的名称,可以省略(后续只能通过容器 id 来操作);
  • -p 映射端口,宿主端口 -> 容器端口;
  • -d 后台运行。

运行后访问 http://localhost/,会出现一个 nginx 的 404 页面,说明已经运行成功了,因为这里安装的 Nginx 并没有默认页面,/etc/nginx/conf.d/default.conf 中的内容:

  1. # This is a default site configuration which will simply return 404, preventing
  2. # chance access to any other virtualhost.
  3. server {
  4. listen 80 default_server;
  5. listen [::]:80 default_server;
  6. # Everything is a 404
  7. location / {
  8. return 404;
  9. }
  10. }

使用构建的 Nginx 镜像运行一个静态页面

在一个空目录下创建 Nginx 配置文件:

  1. server {
  2. listen 80 default_server;
  3. listen [::]:80 default_server;
  4. root /var/www;
  5. location / {
  6. index index.html;
  7. }
  8. }

编写一个静态页面:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Index</title>
  5. </head>
  6. <body>
  7. <h1>Hello, Docker!</h1>
  8. </body>
  9. </html>

使用之前构建的镜像构建一个新的镜像:

  1. FROM nginx-alpine
  2. # 拷贝配置文件,覆盖默认的
  3. COPY default.conf /etc/nginx/conf.d/
  4. # 拷贝静态页面
  5. COPY index.html /var/www

构建镜像、运行容器:

  1. docker build -t site .
  1. docker run --name my-site -p 80:80 -d site

现在访问 http://localhost/,就可以看到 Hello, Docker!

原文链接:http://www.cnblogs.com/cloudfloating/p/11788000.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号