# docker

docker容器(Container)

容器就是独立运行起来的程序,一个容器就好比你在虚拟机里装好的一个系统。

我们可以创建、启动、停止、删除它。同时也可以将容器需要的数据放在容器之外。比如有一个数据库容器,里面有mysql服务,但数据不能放在容器里。我们可以把数据放在主机里,通过映射的方式让容器访问。

1.docker基础概念

docker介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。

社区办免费使用。企业版由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。

docker环境下php使用指南

最近由于业务原因,需要将 php7.0 升级到 7.2。升级要考虑一下几点
要满足以下需求

  1. php7.0 和 7.2 要共存,以免升级 7.2 以后出现问题,及时切换回来。
  2. 升级操作要简单,服务器数量比较多,原生方式安装太过复杂,操作步骤太多,就算携程 shell 脚本,维护起来也比较麻烦
  3. nginx 保持原样,只对项目相关的配置文件做简单调整即可。如果 nginx 变更日志处理等模块都收到牵连。

考虑到上面的因素,用 docker 显然是非常符合的。于是就开启了踩坑之旅。
主要遇到了两个问题,一个是502,还有一个是File not found。下面进行分析

省略sudo使用docker

安装 docker

1
wget -qO- https://get.docker.com/ | sh

1
sudo apt install docker

原理

为什么需要创建 docker 用户组?
Docker 守候进程绑定的是一个 unix socket,而不是 TCP 端口。这个套接字默认的属主是 root,其他是用户可以使用 sudo 命令来访问这个套接字文件。因为这个原因,docker 服务进程都是以 root 帐号的身份运行的。