使用docker搭建lnmp环境

时间:2021-08-23 05:27:02

Docker容器LNMP环境搭建

安装

系统环境

  • 硬件型号: ThinkPad T520
  • 系统版本: ubuntu 14.04
  • CPU: i7
  • RAM: 8G

添加软件源

由于Ubuntu源中的最先版本为0.9无法满足要求,所以需要使用Docker的官方源
添加密钥:

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys \
36A1D7869245C8950F966E92D8576A8BA88D21E9

源地址: deb http://get.docker.io/ubuntu docker main
添加源可以通过"软件和更新->其它软件->添加"来操作
添加后执行如下命令:

$ sudo apt-get update
$ sudo apt-get install lxc-docker-1.1.1

注: 官方给出的源地址为https连接的,但是总是出现ssl验证失败的错误,最后改为非
ssl连接之后正常

测试

执行如下命令获取容器镜像,创建一个实例并打开一个实例shell

$ sudo docker run -t -i centos:latest /bin/bash

注:第一次运行由于需要下载镜像可能需要多等一会儿
运行成功后会有一个新的shell提示符


制作镜像

要求

  • web容器安装Nginx+PHP服务
  • 数据库容器安装Mysql服务
  • web服务和数据库分离
  • web服务容器可以访问数据库容器

制作nginx+php镜像

启动一个容器实例:

$ sudo docker run -t -i centos:latest /bin/bash

安装nginx与PHP:
Nginx可以使用源码或rpm包进行安装,PHP可以使用源码或yum安装.具体安装和配置这里
不进行具体讲述.

注:需要把nginx与php-fpm添加到系统服务中并设置开机启动
我设置的站点根目录为/opt/web

退出shell并执行如下命令制作镜像:

$ sudo docker commit -m="web service image nginx+php" -a="username" \
sudo docker ps -lq username/web:v1

这是一个组合命令:
sudo docker commit根据已有实例制作镜像
sudo docker ps -lq返回最后一个运行的实例id
已有镜像可以使用sudo docker images 查看
至此创建了第一个镜像 username/web:v1

制作mysql镜像

启动实例:

$ sudo docker run -t -i centos:latest /bin/bash

安装Mysql.
设置Mysql服务开机启动:

$ chkconfig mysqld on

启动mysql.
修改mysql登陆权限:

mysql> grant all privileges on . to 'root'@'%' identified by 'dbpasswd';
mysql> flush privileges;

mysql服务默认只能本地连接,制作镜像的时候需要注意.否则是无法连接到数据库的.

退出shell并执行如下命令制作mysql容器镜像:

$ sudo docker commit -m="mysql service image" -a="username" \
sudo docker ps -lq username/mysql:v1

清除不再需要的实例:

$ sudo docker rm sudo docker ps -aq

启动并关联实例

web实例依赖与mysql,所以先打开一个mysql实例:

$ sudo docker run -d --name db username/mysql:v1 /sbin/init

-d参数是让实例以dameon的形式运行. /sbin/init是创建实例后执行的操作,此处为初
始化系统服务,包括运行mysql.

启动web实例并与数据库实例进行关联:

$ sudo docker run -d --name web --link db:db -p 8080:80 -v /path/to/src:/opt/web username/web:v1 /sbin/init

--link参数设置关联的容器,可以设置多个.关联之后会自动更新web容器的host,把db
的地址指向到数据库容器的地址.
-p 参数用来进行ip映射.此处把容器的80端口映射到了本地的8080端口.web服务可是
通过localhost:8080访问.
-v 参数把数据挂载到容器指定目录.此处为把站点源码目录挂载到容器的站点目录.
在web容器中访问数据库容器的mysql服务可以使用db这个主机地址.