Docker入门(php开发环境)
编写本文的主要目的是让大家对docker有一个简单的认识,知道它能做什么,也希望大家能考虑这个工具本身能给大家带来哪些便利。
一、 什么是Docker?
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
开发者在笔记本上编译测试通过的容器可以批量地在生产环境、测试环境、预发布环境 中部署。
二、 为什么要用Docker?
简化程序
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
避免选择恐惧症
如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
三、 Docker初体验(PHP开发环境)
docker安装教程忽略,有兴趣请查看以下链接
MAC : https://www.runoob.com/docker/macos-docker-install.html
CentOS :https://www.runoob.com/docker/centos-docker-install.html
(一)、 创建容器
Nginx容器创建并启动
docker run -itd -p 80:80 --name nginxm \
-v /Users/XXX/Docker/www/:/usr/share/nginx/ \
-v /Users/XXX/Docker/nginx/conf/:/etc/nginx/conf.d/ \
--privileged=true -d nginx
Php容器创建并启动
docker run -p 9000:9000 --name php5-6 \
-v /Users/XXX/Docker/www/:/usr/share/nginx/ \
-v /Users/XXX/Docker/php/conf/:/usr/local/etc/php/ \
-d php:5.6-fpm
docker-php-ext-install pdo_mysql # 需要先进入PHP容器 安装pdo 看实际项目本身的代码需要
Mysql容器创建并启动
docker run -p 3306:3306 --name mysql5.6 \
-v /Users/XXX/Docker/mysql/conf:/etc/mysql/conf.d \
-v /Users/XXX/Docker/mysql/logs:/logs \
-v /Users/XXX/Docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.6
mysql -h 172.17.0.4 -u root -p # mysql 链接语句
Redis 容器创建并启动
docker run -p 6379:6379 -v /Users/XXX/Docker/redis/data:/data -d redis:latest redis-server --appendonly yes
docker exec -it 容器名称 redis-cli -h 172.17.0.5 -p 6379 -a your_password
(二)、容器常用操作
查看容器
docker ps -a #查看所有容器
docker ps #查看开启的容器
启动容器
docker start nginx
# docker start 容器名称
进入/退出 容器
docker exec -it php5-6 /bin/bash
# docker exec -it 容器名称 /bin/bash #进入docker
exit #退出
查看容器IP地址
docker inspect 容器名称或 id #查看容器IP
PS:
1、每次重启docker软件,启动容器后,各容器的IP都会变化,因此需要特别留意;
2、需要检查nginx站点配置里的fastcgi_pass IP 为PHP容器的IP;代码中链接数据库host为MySQL容器的IP;
(三)、Nginx配置
站点配置config(1.修改配置后需要重启nginx;2.配置文件存放在创建容器时,所映射的目录)
server
{
listen 80;
server_name xxx.com;
index index.html index.htm index.php index.shtml;
root /usr/share/nginx/XXX/xxx.com/;
location ~ /uploads/.*\.(php|php5)$ {
deny all;
}
location ~ .*\.(php|php5)?$
{
fastcgi_pass 172.17.0.3:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
error_page 404 = /404.php;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 1h;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
location ^~ /daemon{
deny all;
break;
}
}
(四)、其他
容器下常用工具的安装(需要先进入容器)
1、vim
apt-get update # 同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引。这样才干获取到最新的软件包。
apt-get install vim #安装vim
将容器做成镜像
docker commit -m "" -a "" 容器ID(可以简写) 镜像名称 #-m 提示信息 -a 作者
docker commit -m "nginx" -a "xxx" d7537e914c48 nginx0731a
四、 讲在最后
最后,Docker可以应用在很多方面,这里只是一个入门初体验,如果大家想了解更多关于docker内容,可以进入docker官网学习,后续有任何问题都可以共同探讨。
附上官网地址: https://docs.docker.com/