Web开发

使用Dockerfile 部署 Lnmp+Redis 环境

2018-08-26  本文已影响0人  半岛迷音

Docker 简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。推荐内核版本3.8及以上

为什么使用Docker

  1. 加速本地的开发和构建流程,容器可以在开发环境构建,然后轻松地提交到测试环境,并最终进入生产环境
  2. 能够在让独立的服务或应用程序在不同的环境中得到相同的运行结果
  3. 创建隔离的环境来进行测试
  4. 高性能、超大规划的宿主机部署
  5. 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境

各环境安装Docker

windows 安装

参考

mac

docker toolbox参考

linux

sudo yum update
sudo yum -y install docker(下载的版本过低,在Ubuntu下可能会出现问题,不推荐)
或者 curl -sSL https://get.docker.com/ | sh  通过官方脚本获取安装最新版本(推荐)
#安装程序将docker程序安装到/usr/bin⺫⽬目录下,配置⽂文件安装在/etc/sysconfig/docker。安装好docker之后,可以 将docker加⼊入到启动服务组中 
sudo systemctl enable docker.service
#手动启动docker服务器,使⽤用命令 sudo systemctl start docker.service

curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#安装docker-compose

目录结构

docker_lnmp
├── mysql
│   └── Dockerfile
│   └── my.cnf
├── nginx
│   ├── Dockerfile
│   ├── nginx.conf
│   ├── log
│   │   └── error.log
│   └── www
│       ├── index.html
│       ├── index.php
│       ├── db.php
│       └── redis.php
├── php
│   ├── Dockerfile
│   ├── www.conf
│   ├── php-fpm.conf
│   ├── php.ini
│   └── log
│       └── php-fpm.log
└── redis
    └── Dockerfile
    └── redis.conf

创建镜像与安装

方法一、 直接使用docker-compose一键制作镜像并运行容器(推荐)

```
git clone https://github.com/voocel/docker-lnmp.git
cd docker-lnmp
docker-compose up -d
```
然后就可以通过访问127.0.0.1、127.0.0.1/index.php、127.0.0.1/db.php、127.0.0.1/redis.php 测试了
(若想使用https则请修改nginx下的dockerfile,和nginx.conf按提示去掉注释即可,灵需要在ssl文件夹中加入自己的证书文件,本项目自带的是空的,需要自己替换,保持文件名一致)

方法二、 逐步build并run

```
# build
docker build -t centos/nginx:v1.11.5 -v /www:/www -v /data:/data  ./nginx
docker build -t centos/mysql:v5.7 -v /data/mysql:/var/lib/mysql -v /data/logs/mysql:/var/log/mysql  ./mysql
docker build -t centos/php:v7.0.12 -v /www:/www -v /data:/data  ./php
docker build -t centos/redis:v3.2.6 -v /data:/data  ./redis

#备注:这里选取了172.172.0.0网段,也可以指定其他任意空闲的网段
docker network create --subnet=172.171.0.0/16 docker-at

# run
docker run --name mysql57 --net docker-at --ip 172.171.0.9 -d -p 3306:3306 -v /data/mysql:/var/lib/mysql -v /data/logs/mysql:/var/log/mysql -v /data/run/mysqlmysqld:/var/run/mysqld  -e MYSQL_ROOT_PASSWORD=123456 -it centos/mysql:v5.7
docker run --name redis326 --net docker-at --ip 172.171.0.10 -d -p 6379:6379  -v /data:/data -it centos/redis:v3.2.6
docker run --name php7 --net docker-at --ip 172.171.0.8 -d -p 9000:9000 -v /www:/www -v /data:/data --link mysql57:mysql57 --link redis326:redis326 -it centos/php:v7.0.12 
docker run --name nginx11 --net docker-at --ip 172.171.0.7 -p 80:80 -d -v /www:/www -v /data:/data --link php7:php7 -it centos/nginx:v1.11.5 
```

常用命令

docker rm `docker ps -a |awk '{print $1}' | grep [0-9a-z]` 删除停止的容器
docker rmi $(docker images | awk '/^<none>/ { print $3 }')

进入容器的命令

  1. nsenter 命令需要安装
# cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
# ./configure --without-ncurses
# make nsenter && sudo cp nsenter /usr/local/bin

为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取再执行。

PID=$(docker inspect --format "{{ .State.Pid }}" container_id)
# nsenter --target $PID --mount --uts --ipc --net --pid

dockerfile 语法

docker-compose.yml 语法说明

常见问题处理

vi /etc/sysctl.conf
或者
vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
    net.ipv4.ip_forward=1

重启network服务
systemctl restart network

查看是否修改成功
sysctl net.ipv4.ip_forward

如果返回为"net.ipv4.ip_forward = 1"则表示成功了
上一篇 下一篇

猜你喜欢

热点阅读