docker快速安装笔记
centos安装docker
ubuntu 参考Install Docker 其他系统可以参考Install Docker Engine
更新yum源
代码语言:javascript复制$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
安装docker
代码语言:javascript复制$ sudo yum install docker-engine -y
获取镜像
nginx php mysql
代码语言:javascript复制docker pull nginx:1
docker pull php:7-fpm
docker pull mysql:5
运行
代码语言:javascript复制# mysql
docker run -e MYSQL_ROOT_PASSWORD=laogao -p 3306:3306 -d mysql:5
# php
docker run -p 127.0.0.1:9000:9000 -d php:7-fpm
# nginx
docker run -d -p 8080:80 nginx:1
优化
这样我们启动了三个docker容器,不过到现在他们是没法一起工作的!
ps 老高在这里报错,
address family not supported by protocol
,原因是老高的虚拟环境禁用了IPV6,而php的docker配置中绑定端口使用了listen = [::]:9000
,如果你也遇到这个问题,就需要将它改成listen = 0.0.0.0:9000
即可!
首先,nginx在接到动态请求后会发送请求信息给php-fpm,之后php-fpm处理请求后返回给nginx, php在执行的时候可能会用到mysql数据库,他们之间可以使用文件交换数据,也可以使用网络交换数据。
在弄清楚了他们之间的关系后,我们尝试着修改上面的命令,已达到预期目标。
生成配置文件和测试文件
代码语言:javascript复制# 保存到/tmp/conf.d/default.conf
server {
listen 80;
root /usr/share/nginx/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ .php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_pass php-fpm:9000;
}
}
# 保存到/tmp/html/index.php
<?php
phpinfo();
运行容器
代码语言:javascript复制# --name 表示将这个container命名
docker run -v /tmp/html:/usr/share/nginx/html --name php-fpm-container -d php:7-fpm
# --volumes-from 同时挂载php-fpm挂载的路径
# --link 表示将php-fpm-container,命名为php-fpm主机
# --link 会在nginx:1的/etc/hosts文件添加一条类似 172.11.11.11 php-fpm的条目,因为IP只有在运行时才确定,这个配置呼应了/tmp/conf.d/default.conf中的/tmp/conf.d/default.conf一行
docker run -d -p 8080:80 -v /tmp/conf.d:/etc/nginx/conf.d --volumes-from php-fpm-container --link php-fpm-container:php-fpm nginx:1
Reference:
PHP-FPM nginx version #54