前言:1、Docker的标准用法是每个docker容器只提供一个服务。所以mysql应该有一个容器,php-fpm应该有一个容器,nginx应该有一个容器。2、Docker的设计理念是不在容器中运行后台服务。容器本身是宿主机上一个独立的主进程,也可以间接理解为容器中运行服务的应用进程。容器的生命周期围绕着主进程而存在,所以容器的正确使用方式是在前台运行其中的服务。1.安装Docker下载安装下载地址https://docs.docker.com/docker...配置镜像加速Preferences>>DockerEngine{"registry-mirrors":["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]}查看配置状态dockerinfo2.配置安装环境和安装centos(可跳过)查看镜像版本https://hub.docker.com/_/centos?tab=tags拉取镜像dockerpullcentos:centos7.8.2003查看镜像dockerimages创建容器dockerrun-v/data:/docker_data-p80:80-itd--privileged=truecentos:v0.0.1/usr/sbin/init//-v本地挂载路径/数据挂载到容器的/docker_data路径//-p端口映射//-i允许您与容器中的标准输入(STDIN)交互//-t指定新容器中的伪终端或终端//-d在后台运行//--privileged=true运行特权模式下的容器(可以在后台运行services)viewContainerdockerps//-l查看历史容器entercontainerdockerexec-it46e9810a35e6bashupdateimage(commitcontainercopy)dockercommit-m"testupdate"21e09cfcc692centos:testdeleteimagedockerrmicentos:testproblem1:unabletoremoverepositoryreference"centos:test"(mustforce)-container46e9810a35e6isusingitsreferencedimage5b5eb956a405解决方法:查看并删除历史镜像dockerps-ldockerrm46e9810a35e6installMysql5.7拉取镜像dockerpullmysql:5.7创建容器dockerrun-p3306:3306--namemysql_test-v~/Docker/mysql/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=root-d--privileged=truemysql:5.7命令说明-p3306:3306:将容器的3306端口映射到宿主机的3306端口-vPWD/mysql/data:/var/lib/mysql:映射当前目录下的mysql/data文件夹host挂载到容器的/var/lib/mysql,mysql容器中产生的数据会保存在本地的mysql/data目录下(路径会自动创建)-eMYSQL_ROOT_PASSWORD=passwd:初始化密码rootuser-d后台运行容器--name为容器指定别名--privileged=truecentos7可能会遇到权限问题,需要加参数才能进入容器dockerexec-itmysql_test/bin/bashdocker加sudo方法一、创建docker组:sudogroupadddocker2.将当前用户加入docker组:sudogpasswd-a${USER}d3.重启服务:sudoservicedockerrestart4。刷新docker成员:newgrp-dockerMac下#查看用户组:dscl。list/groups#Add用户组:sudodscl。-create/Groups/docker将用户添加到组:sudodscl。-append/Groups/dockerGroupMembershipusernameinstallphp7.4.5pullimagedockerpullphp:7.4.5-fpm创建DockerfilevimDockerfileFROMphp:7.4.5-fpmRUNapt-getupdate&&apt-getinstall-y\libfreetype6-dev\libjpeg62-turbo-dev\libpng12*-dev\&&docker-php-ext-enableopcache\&&docker-php-ext-installpdo_mysql\&&docker-php-ext-installgd\constructmirrordockerbuild-t="php:7.4.5v2"。启动dockerrun-d-p9000:9000-v/var/www/html/:/var/www/html/--namephp-with-mysql--linkmysql_test:mysql--volumes-frommysql_test--privileged=truephp-fpm5.6/v2命令说明-v将本地磁盘的php代码挂载到docker环境中,对应的docker目录为/var/www/html/--name新建容器的名称php-with-mysql--link被链接的容器,被链接的容器名称:容器中的别名,运行这个容器时,docker中会自动添加一个host来识别被链接的容器ip--privileged=true权限问题备注nproc内核参数,是系统最大进程数$(nproc)是获取安装系统的内核参数。常用的是命令$(pwd)获取文件路径扩展名相关#查看已经打开的扩展名php-m#查看已有的可以启动的扩展名ls/usr/local/lib/php/extensions/no-debug-non-zts-20190902/#启动扩展docker-php-ext-enableopcache#安装启动扩展参考Dockerphp安装扩展步骤详解安装nginx1.16.1pullimagedockerpullnginx:1.16.1createcontainerdockerrun-d--linkphp-with-mysql:phpfpm--volumes-fromphp-with-mysql-p80:80-v/var/www/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf--namenginx-php--privileged=truenginx命令说明--linkphp-with-mysql:phpfpm将php容器链接到nginx容器,phpfpm是nginx容器中的别名。--volumes-fromphp-with-mysql挂载在php-with-mysql容器中的文件也挂载在nginx容器中-v/var/www/nginx/conf/default.conf:/etc/nginx/conf。d/default.conf替换nginx的配置文件,挂载本地编写的配置文件。默认配置vimdefault.confserver{listen80;服务器名称本地主机;位置/{root/var/www/html;索引index.html索引。htm索引.php;#增加index.php}#error_page404/404.html;#将服务器错误页面重定向到静态页面/50x.html#error_page500502503504/50x.html;location=/50x.html{root/var/www/html;}位置~\.php${root/var/www/html;#代码目录fastcgi_passphpfpm:9000;#更改为phpfpm容器fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;#修改为$document_rootincludefastcgi_params;}}配置docker-compose文件结构tree.├──docker-compose.yml├──mysql│└──Dockerfile├──nginx│├──Dockerfile│└──conf│└──default.conf├──phpfpm│└──Dockerfile└──res└──index.phpYAML配置vimdocker-compose.ymlnginx:build:./nginxports:-"80:80"links:-"phpfpm"volumes:-/Users/majun/docker/res:/var/www/html-/Users/majun/docker/nginx/conf:/etc/nginx/conf.dphpfpm:build:./phpfpmports:-"9000:9000"volumes:-/Users/majun/docker/res:/var/www/html链接:-“mysql”mysql:构建:./mysql端口:-“3306:3306”卷:-/Users/majun/docker/mysql/data:/var/lib/mysql环境:MYSQL_ROOT_PASSWORD:rootMysqlDockerfileFROMmysql:5.7NginxDockerfileFROMnginx:1.16.1PHPFPMDockerfile(这里直接使用上面构建的镜像)FROMphp:7.4.5v2PHPconnecttoMysqltestvimindex.php//在PDO1中预处理:sql语句中间is:(aliasmethod)header("Content-type:text/html;charset=utf-8");//实例化PDOtry{$pdo=newPDO("mysql:host=mysql;dbname=test","root“,“根”);}catch(PDOException$pe){die("PDO实例失败!原因:".$pe->getMessage());}//定义sql语句$sql="select*fromtest";//预处理sql$stmt=$pdo->prepare($sql);//执行$stmt->execute();//获取多条数据$res=$stmt->fetchAll(PDO::FETCH_ASSOC);var_dump($res);备注host需要写mysql容器名才能运行docker-composeup-dotherinstallredispullimagedockerpullrediscreatecontainerdockerrun-itd-p6379:6379redisentercontainerdebugging#redis-cli127.0.0.1:6379>setname1OK127.0.0.1:6379>getname"1"参考1https://www.runoob.com/docker/docker-tutorial.html参考2https://www.cnblogs.com/blogscc/p/9473123.html
