可根据自身要求更改目录设置,保持与创建容器时保持一致即可
D:/docker
┗━━mysql
┗━━conf
┗━━my.cnf
┗━━data
┗━━log
┗━━nginx
┗━━conf
┗━━default.conf
┗━━log
┗━━php
┗━━conf
┗━━php.ini
┗━━www.conf
┗━━redis
┗━━conf
┗━━redis.conf
┗━━data
┗━━www
┗━━index.php
docker pull mysql:5.7
docker run --name mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:5.7
MySQL 属于有状态应用,若将其容器化需将其状态抽离到宿主机,其配置文件、日志文件和持久化数据都应该挂载到宿主机上。在 PC 上创建目录存储 Mysql 的数据、配置、日志,这样数据存储在宿主机上,我们删除容器后再次安装,可直接使用,不会导致数据丢失。
docker stop mysql && docker rm mysql
my.cnf
可以按照常规使用进行相关配置
[mysqld]
datadir=/var/lib/mysql
default-time_zone = '+8:00'
log-error=/var/log/mysql/error.log
命令详解
docker run --name mysql
--restart=always ( Docker 重启时容器也跟随启动)
--privileged=true (Docker 为容易内的 root 用户赋予真正的 root 权限,不然会提示 log 目录权限不足)
-p 3306:3306
-v docker/mysql/conf:/etc/mysql/conf.d (将配置目录挂载到容器内的配置目录)
-v docker/mysql/data:/var/lib/mysql (将数据存储目录挂载到容器内的出局存储目录)
-v /docker/mysql/log:/var/log/mysql (将日志目录挂载到容器内的日志目录)
-e MYSQL_ROOT_PASSWORD=12345678
-d mysql:5.7
启动服务
docker run --name mysql --restart=always --privileged=true -p 3306:3306 -v D:/docker/mysql/conf:/etc/mysql/conf.d -v D:/docker/mysql/data:/var/lib/mysql -v D:/docker/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:5.7
$ docker exec -it mysql bash
$ mysql -u root -p12345678
$ mysql-> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
$ mysql-> FLUSH PRIVILEGES;
docker run -d -v D:/docker/www:/var/www/html -p 9000:9000 --name php73 php:7.3-fpm
docker cp php73:/usr/local/etc/php-fpm.d/www.conf D:/docker/php/conf/www.conf
docker cp php73:/usr/local/etc/php/php.ini-production D:/docker/php/conf/php.ini
docker stop php73 && docker rm php73
docker run -d -v D:/docker/www:/var/www/html -v D:/docker/php/conf/www.conf:/usr/local/etc/php-fpm.d/www.conf -v D:/docker/php/conf/php.ini:/usr/local/etc/php/php.ini -p 9000:9000 --name php73 php:7.3-fpm
如果使用mysql容器需要加上 --link mysql:mysql
如果使用redis容器需要加上 --link redis:redis
docker run -d -p 9000:9000 --name php73 -v D:/docker/www:/var/www/html --link mysql:mysql --link redis:redis -v D:/docker/php/conf/www.conf:/usr/local/etc/php-fpm.d/www.conf -v D:/docker/php/conf/php.ini:/usr/local/etc/php/php.ini php:7.3-fpm
$ docker exec -it php73 bash
apt-get update
apt-get install libssl-dev
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev
$ docker exec -it php73 bash
docker-php-ext-install sockets pdo_mysql opcache openssl gd
docker-php-ext-enable sockets pdo_mysql opcache openssl gd
安装redis
pecl install redis #安装redis拓展
docker-php-ext-enable redis #启用redis拓展
pecl install redis && docker-php-ext-enable redis
安装swoole
pecl install swoole && docker-php-ext-enable swoole
安装swoole指定版本,由于最新的是php8.0,本地是7.3,低版本PHP需要指定低版本版本4.5.2
pecl install swoole-4.5.2 && docker-php-ext-enable swoole
docker exec -it php73 bash
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
#换阿里云源(可选)
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
docker run -p 80:80 --name nginx118 nginx:1.18
docker container cp nginx118:/etc/nginx/conf.d D:/docker/nginx/conf
docker run --name nginx118 -p 80:80 -v D:/docker/nginx/conf:/etc/nginx/conf.d -v D:/docker/www:/usr/share/nginx/html -v D:/docker/nginx/log:/var/log/nginx --link php73:phpfpm -d nginx:1.18
docker pull redis
// 下载指定版本
docker pull redis:5.0.4
https://raw.githubusercontent.com/antirez/redis/5.0.14/redis.conf
daemonize no 一定
daemonize:yes:当,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程.
daemonize:no: 当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。
查阅容器相关资料相关的,docker 是以前台进程监控,如果设置 daemonize:yes redis在容器内是后台守护进程,docker检测不到认为服务未启动
docker run
-p 63798:6379 端口映射
--name redis 别名
-v D:/docker/redis/data:/data 挂载数据目录
-v D:/docker/redis/conf:/etc/redis 挂载配置文件
-d redis redis-server /etc/redis/redis.conf 指定配置文件启动
--requirepass "123456" 设置redis密码
--appendonly yes 开启持久化
docker run -d --name redis -p 6379:6379 -v D:/docker/redis/data:/data -v D:/docker/redis/conf:/etc/redis --privileged=true redis:5.0.14 redis-server /etc/redis/redis.conf
index.php
<?php
echo "redis-------------------<br />";
$redis = new \Redis();
var_dump($redis);
$redis->connect('172.17.0.3', 6379);
$redis->auth('123456'); //密码验证
$redis->set('count',1);
// $redis->select(2);//选择数据库2
$count = $redis->get('count');
echo "<br />" . $count . "<br />";
echo "mysql-------------------<br />";
try {
$dbh = new PDO("mysql:host=172.17.0.2;dbname=test", 'root', '12345678'); //初始化一个PDO对象
echo "连接成功<br/>";
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}
win10 下 用docker 部署nmp搭建开发环境
基于Docker搭建PHP开发环境
Docker 安装 Redis 容器 (完整详细版)
安装GD拓展