安装MySQL
-
获取镜像
docker pull mysql # 获取mysql镜像
-
创建测试容器
# a347a5928046 MySQL镜像ID # mysql_test 测试容器名称 # /mysql/conf 宿主机mysql配置文件夹 docker run -d -p 23306:3306 --name mysql_test a347a5928046 # 复制/etc/mysql/my.cnf到宿主主机 docker cp mysql_test:/etc/mysql/my.cnf /mysql/conf
-
创建正式容器
# 上面的测试容器可删除 docker run -d -p 23306:3306 --name mysql8 -v $PWD/mysql/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --privileged=true a347a5928046
安装Nginx
-
映射目录结构
docker_www # docker_www 主目录 -mysql # mysql --conf # 放配置文件 --data # 同步数据文件夹 -nginx # nginx --conf.d # 扩展配置 --dq.conf # 新增配置文件 --logs # 日志 --nginx.conf # nginx主配置文件 -www # www目录->/usr/share/html --index.html # 测试html文件,写入 <p>hello docker nginx</p> --info.php # 写入 phpinfo
-
获取镜像
docker pull nginx # 获取nginx基础镜像
-
创建测试容器
# ae2feff98a0c nginx的镜像ID # PWD 当前目录, 我这里进入的是docker_www目录 docker run -d -p 8080:80 -v $PWD/www:/usr/share/html --name nginx_test ae2feff98a0c # 测试访问 curl 127.0.0.1:8080 #输出 <p>hello docker nginx</p>
-
创建可挂载目录Nginx容器
# ae2feff98a0c nginx的镜像ID # PWD 当前目录, 我这里进入的是docker_www目录 # nginx.conf 可以从上一个测试容器中复制出来,操作命令如下: # docker cp 容器名称:/etc/nginx/nginx.conf 宿主机目录 # docker cp new_nginx_web_1:/etc/nginx/nginx.conf . docker run -d -p 8080:80 --name new_nginx_web_1 / -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf / -v $PWD/nginx/conf.d:/etc/nginx/conf.d / -v $PWD/www:/usr/share/nginx/html / -v $PWD/nginx/logs:/var/log/nginx / ae2feff98a0c
安装PHP
-
获取php镜像
docker pull php:7.1-fpm # 获取php基础镜像
-
创建测试PHP镜像
# 创建容器 # 404422fc039e php镜像ID docker run -d -v $PWD/www:/var/www/html -p 9000:9000 --name phpfpm_test 404422fc039e
-
创建正式PHP镜像
# 先从上一个测试镜像中将配置文件都复制出来 # 当前处于php目录下 docker cp phpfpm_test:/usr/local/var/log log # 复制日志 docker cp phpfpm_test:/usr/local/etc conf # 复制配置文件 # 创建 docker run -d -p 9000:9000 -v $PWD/php/conf:/usr/local/etc -v $PWD/php/log:/usr/local/var/log -v $PWD/www:/var/www/html --link mysql8:mysql8.0 # 关联mysql8容器 --name phpfpm_7.1 404422fc039e ### notcie ### 如果mysql无法运行,需要到容器中开启pdo扩展
镜像互联
-
Nginx 链接 PHP
# ae2feff98a0c nginx的镜像ID # PWD 当前目录, 我这里进入的是docker_www目录 # php7.1设置的链接别名,在nginx容器中可以使用 docker run -d -p 8080:80 --name new_nginx_web_1 -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf -v $PWD/www:/usr/share/nginx/html -v $PWD/nginx/logs:/var/log/nginx --link phpfpm_test:php7.1 ae2feff98a0c
-
conf.d/dq.conf文件配置
# php7.1 就是在创建的容器时 `--link phpfpm_test:php7.1` # 在容器中的/etc/hosts文件中,172.17.0.3 php7.1 server { charset utf-8; client_max_body_size 128M; listen 80; ## listen for ipv4 #listen [::]:80 default_server ipv6only=on; ## listen for ipv6 server_name mine.nginx.com; root /var/www/html; index index index.html index.php; location / { #-e表示只要filename存在,则为真 if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } # Redirect everything that isn't a real file to index.php try_files $uri $uri/ /index.php$is_args$args; } # uncomment to avoid processing of calls to non-existing static files by Yii #location ~ .(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { # try_files $uri =404; #} #error_page 404 /404.html; # deny accessing php files for the /assets directory location ~ ^/assets/.*.php$ { deny all; } location ~ .php$ { root /var/www/html; fastcgi_pass php7.1: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; #include fastcgi_params; #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_pass 172.17.0.3:9000; #fastcgi_pass unix:/var/run/php5-fpm.sock; #try_files $uri =404; } location ~* /. { deny all; } }
-
测试请求
curl 127.0.0.1:8080/info.php