CentOS 安装 Docker

docker 搭建 PHP 开发环境

拉取相应镜像

docker pull nginx:1.25.0
docker pull mysql:8.0.33
docker pull redis:7
docker pull php:7.4-fpm

创建网络

docker network create -d bridge my-net

# 查看网络
docker network inspect my-net

准备映射目录

cd
mkdir -p docker/mysql docker/redis docker/nginx/conf.d docker/nginx/logs

Nginx

准备配置文件

# 主配置文件
vim ~/docker/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;
}

# 虚拟站点文件

启动 nginx 容器

docker run -dp 80:80 -p 443:443 --name nginx --network my-net --mount type=bind,source=/root/docker/nginx/logs,target=/var/log/nginx --mount type=bind,source=/root/docker/nginx/nginx.conf,target=/etc/nginx/nginx.conf --mount type=bind,source=/root/docker/nginx/conf.d,target=/etc/nginx/conf.d --mount type=bind,source=/root/docker/nginx/cert,target=/etc/nginx/cert --mount type=bind,source=/www,target=/www nginx:1.25.0

redis

准备配置文件

vim /root/docker/redis/redis.conf

# 写入如下内容,这里只配置了端口和密码,全的配置请自行添加
port 6379
requirepass 123456

启动 redis 容器

docker run --name redis7 -dp 6379:6379 --network my-net --mount type=bind,source=/root/docker/redis,target=/data --mount type=bind,source=/root/docker/redis/redis.conf,target=/data/redis.conf redis:7 redis-server /data/redis.conf

测试连接:OK

MySQL

# 设置密码 123456,记得换掉
docker run --name mysql -it -dp 3306:3306 --network my-net -e MYSQL_ROOT_PASSWORD=123456 --mount type=bind,source=/root/docker/mysql,target=/var/lib/mysql mysql:8.0.33

PHP

docker run -d --name php74 --network my-net --mount type=bind,source=/www,target=/www php:7.4-fpm

dockerfile

php

编写 dockerfile 文件,下面是注释版

采用 git 拉取代码方式

# 以官方的 php:7.4-fpm 为基础镜像
FROM php:7.4-fpm

# 执行命令
RUN set -eux \
	# 更新源
    && apt-get update \

	# 安装 git,如不需要可以不用安装
	# 注意:安装这个很耗时,一般不需要安装,可以采用复制,将整个代码复制到镜像中去
    && apt-get install -y git \

	# 安装 php zip 扩展所需要的依赖
    && apt-get install -y zlib1g-dev \
    && apt-get install -y libzip-dev \

	# 安装 php gd 扩展所需要的依赖
	 && apt-get install -y libpng-dev \

	# 安装 PHP 扩展,pdo_mysql、zip、bcmath、gd、redis
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install zip \
    && docker-php-ext-install bcmath \
    && docker-php-ext-install gd \

	# Redis 扩展需要这样安装
    && pecl install -o -f redis \

	# 创建 php.ini 文件
    && cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini \

	# 将 Redis 扩展写入 php.ini 文件中
	&& echo "extension=redis.so" >> /usr/local/etc/php/php.ini \
    && cd \

	# 安装 composer,非必须,可以直接将提前准备好的 composer 复制进镜像
    && php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" \
    && php composer-setup.php \

	# 设置 composer 环境变量
    && mv composer.phar /usr/local/bin/composer \
    && mkdir /www \
    && cd /www \

	# 拉取代码,可以采用将宿主机的整个代码copy到镜像中
    && git clone https://用户名:密码@gitee.com/shuxiaoyuan/code_hooks.git \

	# 执行 composer
    && composer install \

如果git账号密码有特殊字符,转义如下

采用 COPY 代码方式

FROM php:7.4-fpm

WORKDIR /www

# 将当前目录下的所有文件复制到镜像的 /www/code_hooks 目录中
COPY . /www/code_hooks

RUN set -eux \
    && apt-get update \
    && apt-get install -y zlib1g-dev \
    && apt-get install -y libzip-dev \
    && apt-get install -y libpng-dev \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install zip \
    && docker-php-ext-install bcmath \
    && docker-php-ext-install gd \
    && pecl install -o -f redis \
    && rm -rf /tmp/pear \
    && docker-php-ext-enable redis\
    && cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini \
    && php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" \
    && php composer-setup.php \
    && mv composer.phar /usr/local/bin/composer

构建镜像

# -f 指定 dockerfile 文件位置, -t 指定镜像名和版本号,别忘了最后面有一个 .
docker build -f .\php74-fpm-1 -t shuxiaoyuan/php74:v1.3 .