标题
下载的docker点击
登录阿里云找到镜像加速器把地址复制进去
开始安装nginx
docker search nginx
拉取官方的nginx
docker pull nginx
tips:系统会默认拉去最后一个nginx
查看镜像
docker images
启动一个nginx镜像 映射本地目录到nginx容器 需要自己创建目录
docker run -d -p 8080:80 --name nginx1 nginx
-d:后台运行
-p:设置端口号映射到本机,将 80 端口映射到本机的 8080 端口,外部访问8080端口即可
--name:设置容器名称
接下来是关键
创建目录 到指定目录 当初我创建的时候多写了一个docker 憨derder
/docker/nginx/nginx/conf
/docker/nginx/nginx/conf.d
/docker/nginx/nginx/www
/docker/nginx/nginx/log
在本地创建目录 映射docker文件到本地
nginx的结构目录在容器中:
docker cp 容器名:/etc/nginx/nginx.conf E:\docker\Docker\nginx\conf\
需要把conf.d下的default.conf 拷贝到本地主配置文件位置
第一种 docker cp nginx1:/etc/nginx/conf.d/default.conf E:\docker\Docker\nginx\conf.d\default.conf
第二种 docker cp 4aa7fdf3db6d:/etc/nginx/nginx.conf . 有个点
如果你想在本地去添加location 需要把这些容器中的配置挂载到本地:
配置文件相对来说有点麻烦,一般nginx只需要加载nginx.conf就可以了,在dokcer中,是首先加载nginx.conf,然后在nginx.conf有这么一行include /etc/nginx/conf.d/*.conf;,就是加载conf.d目录下的配置文件。所以对于配置只需要挂载到conf.d,覆盖掉即可。
启动成功
我是直接拉取的docker hub的nginx镜像
在容器中相关位置分别是:
日志位置:/var/log/nginx/
配置文件位置:/etc/nginx/
主配置文件位置:/etc/nginx/conf.d
项目位置:/usr/share/nginx/html
然后停止stop nginx(nginx1 是启动时起的名字) 删掉 rm掉nginx
重新运行nginx镜像
docker run -it -d -p 808:80 --name nginx1
-v E:/docker/Docker/nginx/www:/usr/share/nginx/html #把项目放进去
-v E:/docker/Docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v E:/docker/Docker/nginx/conf.d:/etc/nginx/conf.d
-v E:/docker/Docker/nginx/logs:/var/log/nginx
#--link php1:php
nginx
命令说明:
-p 808:80: 将容器的 80 端口映射到主机的 808 端口.
第一个-v:挂载项目目录
第二个-v:挂载配置目录
第三个-v:挂载主配置文件
第四个-v:挂载日志目录
–like 这一步就是让nginx和php关联起来 目前还木有安装php 所以可以先注释
php和nginx类似随后补充
下载PHP7.3镜像
命令:docker pull php:7.3
因为同样要复制PHP的配置文件及日志文件,所以操作方法与mysql相同。复制出来的文件目录深度同样要退一层。
PHP的配置文件及日志文件目录地址:
配置文件:/usr/local/etc
日志文件:/usr/local/var/log
项目文件:/var/www/html 和nginx一样映射到同一个目录
随便启动一个,因为需要将php的配置文件和日志文件复制出来到本地
docker run -it --name php1 php:7.3-fpm
#cp docker 到本地
docker cp php1:/usr/local/etc E:\docker\Docker\php\php-conf
docker cp php1:/usr/local/var/log E:\docker\Docker\php\php-log
#docker cp php1:/var/www/html E:\docker\Docker\nginx\www<br> php1:是我们前面运行的php的名称 这一步不需要 后期直接挂载和nginx同一挂载的文件即可
删除原有的php1,重新运行php 容器重命名最好带有版本标识。全命令:
docker run -d
-v E:/docker/Docker/php/php-conf:/usr/local/etc
-v E:/docker/Docker/php/php-log:/usr/local/var/log
-v E:/docker/Docker/nginx/www:/var/www/html
-p 9000:9000
--name php1
php:7.3-fpm
#上文nginx中–link提到的php1 就是php的名字 下面那个php是拉取的php加tag
容器创建完成之后,进入容器,docker exec -ti php1 sh (如果需要VIM,安装方法同mysql)
安装PHP的扩展 这写扩展可以放在最后面安装
命令1:docker-php-ext-install pdo_mysql
命令2:docker-php-ext-install mysqli
命令3:docker-php-ext-install bcmath
安装redis扩展
curl -L -o /tmp/redis.tar.gz https://codeload.github.com/phpredis/phpredis/tar.gz/5.0.2
root@803cbcf702a4:/# cd /tmp
root@517b9c67507a:/tmp# tar -xzf redis.tar.gz
root@517b9c67507a:/tmp# ls
phpredis-5.0.2 reids.tar.gz
root@517b9c67507a:/tmp# docker-php-source extract
root@517b9c67507a:/tmp# mv phpredis-5.0.2 /usr/src/php/ext/phpredis
#检查移过去的插件源码包是否存在
root@517b9c67507a:/tmp# ls -l /usr/src/php/ext | grep redis
drwxrwxr-x 6 root root 4096 Jul 29 2019 phpredis
root@517b9c67507a:/tmp# docker-php-ext-install phpredis
# 检查redis 扩展是否已经安装上
root@517b9c67507a:/tmp# php -m | grep redis
redis
root@517b9c67507a:/tmp#
###安装memcached
安装预编译环境
apt-get update -y && apt-get install -y pkg-config libmemcached-dev autoconf gcc make zlib1g zlib1g-dev vim
安装php-memcached扩展
pecl channel-update pecl.php.net && pecl install memcached
修改php的配置文件php.ini :/usr/local/etc/php/php.ini
这时候你的nginx+php是可以访问的 只需要输出phpinfo 就可以指定ini的目录
echo 'extension=memcached.so' >> /usr/local/etc/php/php.ini
查看扩展是否已经安装。php -m
#查看php镜像的ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' php1
可以先配置启动php+nginx在去安装扩展 记住先启动php在启动nginx启动nginx时需要–like关联php
记住一点需要修改conf.d下的default.conf
server {
listen 80;
listen [::]:80;
server_name localhost 127.0.0.1;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/local/nginx/html;
index index.html index.htm index.php;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /var/www/html; #php的目录 php启动的时候映射的目录是和nginx 映射的目录一直
fastcgi_index index.php;
fastcgi_pass php:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
本能执行docker
docker run -d -v E:/docker/Docker/php/php-conf:/usr/local/etc -v E:/docker/Docker/php/php-log:/usr/local/var/log -v E:/docker/Docker/nginx/www:/var/www/html -p 9000:9000 --name php1 php:7.3-fpm
docker run -it -d -p 808:80 --name nginx1 -v E:/docker/Docker/nginx/www:/usr/share/nginx/html -v E:/docker/Docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v E:/docker/Docker/nginx/conf.d:/etc/nginx/conf.d -v E:/docker/Docker/nginx/logs:/var/log/nginx --link php1:php nginx
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer-test
**记得在
E:\docker\Docker\nginx\conf
创建一个nginx.conf
内容就是容器nginx内的nginx.conf
大致内容如下**
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
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;
}