docker images里面image相当于可执行程序吗?

谈到微服务的话题,技术上我们往往会涉及到多服务、多容器的部署与管理。
Docker 有三个主要的作用:Build, Ship和Run。使用docker compose我们可以在Run的层面解决很多实际问题,如:通过创建compose(基于YUML语法)文件,在这个文件上面描述应用的架构,如使用什么镜像、数据卷、网络、绑定服务端口等等,然后再用一条命令就可以管理所有的服务(如启动、停止、重启、日志监控等等)。

Compose是定义和运行多容器Docker应用程序的工具。 使用Compose,您可以使用YAML文件来配置应用程序的docker服务。 然后,使用单个命令,您可以创建并启动配置中的所有docker服务。

Compose适用于所有环境:生产,开发,测试以及CI工作流程。使用Compose基本上是一个三步过程:

  • 使用Dockerfile定义应用程序的环境,以便在任何地方进行复制。
  • build 构建或重建服务
    logs 显示容器的输出内容
    port 打印绑定的开放端口
    pull 拉取服务镜像
    run 运行一个一次性命令
    scale 设置服务的容器数目
    

    可以看到一份标准配置文件应该包含 version、services、networks 三大部分,共有三级标签,每一级都是缩进两个空格。下面来详细说明一下里面的内容:

    这是定义compose的版本号为version 3,可以参考官方文档详细了解具体有哪些版本

    来查看一下是否启动完成:

    大家想想,仅仅使用Compose,就可以构建自己的容器云吗?答案显然是否定的。docker-compose解决的问题局限在“编排”二字,甚至连“部署”范畴都涉足甚少,而在一个能够服务于大众的云平台中,编排与部署也仅仅是其中的一个组成部分而已。来一起分析一下它的局限制会有哪些:

    1、docker-compse是面向单宿主机部署的,这是一种部署能力的欠缺。在更多的场合下,管理员需要面对大量物理服务器(或者虚拟机),这时如果要实现基于docker-compose的容器自动化编排与部署,管理员就得借助成熟的自动化运维工具(ansible、puppet、chef、saltstack)来负责管理多个目标主机,将docker-compose所需的所有资源(配置文件、用户代码)交给目标主机,然后在目标主机上执行docker-compose指令。
    2、同样网络和存储也比较棘手,Docker不能提供跨宿主机的网络,完全面向Docker daemon的docker-compose当然也不支持。这意味着管理员必须部署一套类似于Open vSwich的独立网络工具,而且管理员还需要完成集成工作。当好不容易把容器编排都安排妥当之后,又会发现容器还处在内网环境中,于是负载均衡、服务发现等一堆问题就面临而来了,这些问题很快能消耗掉工程师所有的耐心。

    那么,是否有一种能够提供完善的面向服务器集群的Docker编排和部署方案呢?Docker官方给出的答案是Compose同Machine和Swarm联动,其实还有大家近期经常听到了kubernetes(k8s)

本文介绍如何使用Docker容器,快速部署LNMP环境。 最终完成的环境我们称为:DNMP(即 Docker + Nginx + MySQL + PHP)。 最终实现一键部署LNMP环境的目的,该环境特点:

  1. 以上是我的加速地址。 然后重启Docker Daemon:

    │ │ ├── (同localhost)和。 要在本地访问这两个域名,需要修改你的hosts文件,添加以下两行:

    
    

    其中,为支持SSL/https和HTTP/2的示例站点。 因为站点2的SSL采用自签名方式,所以浏览器有安全提示,继续访问就可以了,自己的站点用第三方SSL认证证书替换即可。 如果只用到站点1,把站点2相关的目录和配置文件删除:

    这里,我们还需要稍微修改nginx配置文件:

    这样Nginx容器启动的时候,就会自动修改自己的/etc/hosts,让fpm指向php-fpm容器的IP。修改之后,重启容器中的nginx:

    其中,dlnmp_nginx_1是容器的名称,也可以指定容器的ID。

    有时候,我们的PHP代码需要某个目录的写权限。 比如,Wordpress的wp-content/uploads目录,只有写权限我们才能正常上传文件。 默认的,容器中的/var/www/html目录属于root,我们需要修改为www-data,PHP才能正常写目录。

    这样PHP就能正常读写目录了。

    在docker-compose.yml文件中,我们指定了MySQL数据库root用户的密码为123456。 所以,我们就可以在主机中通过:

    输入密码,就可以进入MySQL命令行。 说明:这里MySQL的连接主机不能用localhost,因为MySQL客户端默认使用unix socket方式连接,应该直接用本地IP。在PHP代码中的使用方式与在主机中使用稍有不同,如下:

    就是说,mysql自动指向了MySQL容器动态生成的IP。

    Redis使用和MySQL类似。 在主机和容器内部都通过地址127.0.0.1,端口6379访问。 PHP则是跨容器访问,host参数用redislinks指定的名称),端口用6379

    到这里我们用docker搭建的Docker (Linux) + Nginx + MySQL + PHP环境已经可以正常使用了。 但每次启动系统都得切换到项目目录,再执行compose up,就略显繁琐。 要是能在系统启动的时候自动启动容器,岂不是更好,下面是具体的方法。

    然后Add一项,名字:dnmp,命令填:

    其他命令行下的Linux系统,可以直接编辑 /etc/rc.local 文件,加上上面的命令。

    Docker相关的有用文章:

- Dockerfile 多阶段构建 实战多阶段构建 Laravel 镜像 其它制作镜像的方式 实现原理 操作容器 启动 守护态运行 终止 进入容器 导出和导入 删除 访问仓库 Docker Hub 私有仓库 私有仓库高级配置 Nexus 3 数据管理 数据卷 挂载主机目录 使用网络 外部访问容器 容器互联 配置 DNS 高级网络配置 快速配置指南 容器访问控制 端口映射实现 配置 Docker Swarm Swarm mode 基本概念 创建 Swarm 集群 部署服务 使用 compose 文件 管理密钥 管理配置信息 滚动升级 安全 内核命名空间 控制组 服务端防护 内核能力机制 其它安全特性 总结 底层实现 基本架构 命名空间 控制组 联合文件系统 容器格式 网络 Etcd 项目 简介 安装 集群 使用 etcdctl CoreOS 项目 简介

我要回帖

更多关于 docker images 的文章

 

随机推荐