docker-yaf环境

背景

博主多年一直使用vm虚拟机开发(一套环境走天下),近日听闻docker这门技术,发现好处不少

  • 极其轻量体积小
  • 运行速度极快
  • 资源丰富,你能想到的容器别人都共享了
  • 部署简单,本地和线上的环境不一致引起的问题再也不用担心。
    玩转之。

安装

centos7下安装

环境检测

目前,CentOS 仅发行版本中的内核支持 Docker。
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本

//命令查看你当前的内核版本 
uname -r  

安装

//yum安装
yum -y install docker 
//启动docker服务
systemctl start docker 
//查看docker版本
docker -v     

测试

由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。

docker run hello-world

看到输出说明docker安装成功

镜像加速设置

由于众所周知的原因,docker国外源速度不快,所以这边我们使用ali的源,当然你可以选择其它的源。
ali的源需要先去https://cr.console.aliyun.com/注册,会得到一个加速的个人连接,注册相关请自行百度。

vim /etc/docker/daemon.json:
{
  "registry-mirrors": ["https://yt3uvnue.mirror.aliyuncs.com"]
}
//重启使配置生效
systemctl restart docker

制作自己的镜像(lnmp)

几个概念

  • 镜像和容器的概念:
  • 镜像可以当成安装系统的ISO文件
  • 容器就是安装好可使用的系统

博主出于研究学习,并没有采用别人配好的镜像文件,而是pull了最简单的版本,自己配置相关环境,制作一个全新的个人镜像。

安装nginx容器

//查看有哪些nginx的镜像可以使用
docker search nginx
//检出nginx官方镜像
docker pull nginx
//建立对应的目录
mkdir docker
cd docker
mkdir -p $PWD/nginx/www $PWD/nginx/logs $PWD/nginx/conf $PWD/nginx/conf/conf.d
cd ~
//下面运行最简单的nginx镜像
docker run -p 8000:80 --name mynginx -d nginx 
//查看容器是否启动
docker ps
//进入容器找到nginx.conf目录及html目录
docker exec -it mynginx /bin/bash
//退出容器
exit
//切换目录
cd nginx
//拷贝nginx.conf
docker cp mynginx:/etc/nginx/nginx.conf ./conf/nginx.conf
docker cp mynginx:/etc/nginx/conf.d/default.conf ./conf/conf.d/default.conf
//停止容器服务
docker stop mynginx
//删除容器
docker rm 容器ID (docker ps -a 查询)
//生成新容器并映射相关的目录和文件
docker run -p 80:80 --name mynginx -v $PWD/www:/usr/share/nginx/html -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v $PWD/logs:/var/log/nginx -d nginx

安装php容器

//搜索php镜像
docker search php
//下载php56官方镜像
docker pull php:5.6-fpm
//准备好相关的目录
cd docker
mkdir -p $PWD/php-fpm/logs $PWD/php-fpm/conf
//运行php容器
//注意在/usr/local/etc/php目录下放好一份php.ini文件,官网php镜像没有php.ini
docker run -p 9000:9000 --name  myphp -v $PWD/nginx/www:/var/www/html -v $PWD/php-fpm/conf:/usr/local/etc/php -v $PWD/php-fpm/logs:/phplogs -d php:5.6-fpm

nginx与php

//查看php容器IP
docker inspect 容器ID或容器名 |grep '"IPAddress"'
//编辑nginx配置
vi /nginx/conf/conf.d/default.conf:

//重启nginx容器
docker restart mynginx

安装yaf

官方docker镜像安装扩展已有工具

//进入php容器
docker exec -it myphp /bin/bash
//切换安装工具目录
cd /usr/local/bin  
//安装mysql扩展
./docker-php-ext-install pdo_mysql  
//安装yaf扩展
./docker-php-ext-install yaf
//也可以自己下载好yaf包,拷贝进容器内,执行编译安装
//查看是否安装成功
php -m 

容器打包push

打包

容器打包成镜像:
先注册https://hub.docker.com (需要科学上网),自行百度

//打包,注意最后XXX必须为你的用户名
docker commit 容器ID  XXX/nginx 
//修改tag
//docker 容器ID XXX/nginx:latest (latest为版本,自行设置)
//登录dockerhub
docker login
docker push XXX/nginx

push的一些问题

博主使用dockerhub库的过程中,有天突然发现pull操作正常,push却报错“net/http: TLS handshake timeout”,谷歌之,都在讲墙的原因,需要加上加速服务,博主换了163,ali等等一圈,发现并没解决问题,另外提醒一下各位,国内的daocloud push操作只对收费会员开放。最后,博主,注册了ali的镜像仓库服务(免费),push成功,ali镜像仓库官方教程很全面,我这边就不赘述了。

关于docker-compose

上面一顿操作,服务是配好了,同时也感觉很累,毕竟搭建这么一套简单lnmp都这么多命令,能不能有种工具可以帮我们?
docker-compose登场。只需一个yml文件,即可快速制作镜像。

安装

https://github.com/docker/compose/releases/下载最新
curl -L https://github.com/docker/compose/releases/download/1.20.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

创建必要的目录结构和文件

dir docker
cd docker
mkdir -p $PWD/nginx/www $PWD/nginx/logs $PWD/nginx/conf $PWD/nginx/conf/conf.d
mkdir -p $PWD/php-fpm/logs $PWD/php-fpm/conf

//准备好/nginx/conf/nginx.conf和/nginx/conf/conf.d/default.conf
nginx.conf:

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}

default.conf:

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    if (!-e $request_filename) {
        rewrite ^/(.*)  /index.php?$1 last;
    }
    location ~ \.php$ {
        #此处注意,是php容器内的代码目录,所以不是/usr/share/nginx/html;
        root           /var/www/html;
        #这里testphp是php容器的服务名,不写IP,因为IP会变
        fastcgi_pass   testphp:9000;  
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
        include        fastcgi_params;
    }
}   

编写yml文件

编写vim docker/docker-compose.yml:

###指定撰写文件格式版本:1,2,3(最新)
version: '2.1'
services:
    testnginx:           #给容器一个名称
      image: XXX/nginx   #此处填写你之前push的镜像名
      volumes:           #此处为映射目录
          - ./nginx/www:/usr/share/nginx/html
          - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
          - ./nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf
      ports:             #映射IP
          - "80:80"
      container_name: testnginx   #容器名称
      depends_on:                 #容器依赖项,说明nginx依赖php,会先启动php
          - testphp
      links:
          - testphp

    testphp:
      image: XXX/php
      volumes: 
          - ./nginx/www:/var/www/html
          - ./php-fpm/conf:/usr/local/etc/php
          - ./php-fpm/logs:/phplogs
      ports:
          - "9000:9000"
      container_name: testphp    

几个注意点

如果你制作的镜像全部push成功,那么你只需保存好你的源码目录和docker-compose.yml文件,下次执行

docker-compose up -d

即可运行
当然,相关目录和yml也可托管到git
最后善用提醒,上传镜像前最好检查好权限:

  1. 在你使用的docker镜像平台上区分好镜像是否开放给别人下载
  2. 除非部署自用,否则push前请删除镜像内的逻辑代码,有效减少镜像体积,同时也能保证泄露

请关注我的订阅号

订阅号.png

你可能感兴趣的:(phper那些年,docker,yaf,环境配置)