做网站云主机,在那个网站做任务赚,5g对网站建设的影响,上海建设行政主管部门政务网站Docker Compose简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose#xff0c;您可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令#xff0c;就可以从 YML 文件配置中创建并启动所有服务。而DockerCompose作为一种容器编排工具您可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令就可以从 YML 文件配置中创建并启动所有服务。而DockerCompose作为一种容器编排工具可以让我们轻松地配置和管理多个Docker容器从而快速搭建PHP开发环境。
Compose 使用的三个步骤
使用 Dockerfile 定义应用程序的环境。使用 docker-compose.yml 定义构成应用程序的服务这样它们可以在隔离环境中一起运行。如果你还不了解 YML 文件配置可以先阅读 YAML 入门教程。最后执行 docker-compose up 命令来启动并运行整个应用程序。
安装docker Ubuntu
依次执行下面的命令
# 更新apt
sudo apt update
sudo apt upgrade
# 安装依赖
sudo apt-get install ca-certificates curl gnupg lsb-release
# 添加Docker官方GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 配置Docker镜像源
sudo add-apt-repository deb [archamd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable
# 安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 配置用户组可选
sudo usermod -aG docker $USER
# 查看版本检查是否安装成功
docker --version
# 启动docker一般安装完会自动启动如果没有启动请手动执行
systemctl start dockerCentOS
依次执行下面的命令
# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置Docker镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache fast
# 安装docker
yum install docker-ce
# 查看版本检查是否安装成功
docker --version
# 启动docker一般安装完会自动启动如果没有启动请手动执行
systemctl start docker安装docker-compose 访问Releases · docker/compose (github.com)查看最新版本
然后依次执行下面的命令
# 下载docker-compose文件自行修改版本号
sudo curl -L https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose# 给他执行权限
sudo chmod x /usr/local/bin/docker-compose# 查看是否安装成功
docker-compose --version如果觉得下载慢可以将github.com替换为其他镜像域名加速下载例如
sudo curl -L https://hub.nuaa.cf/docker/compose/releases/download/v2.24.6/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-composedocker-compose初始配置 创建初始 docker-compose.yml 文件不含各服务的配置文件映射在哪个目录不做要求内容如下自行修改项目路径和配置文件路径为自己的电脑文件夹路径我这里新建在home/docker目录下
#yaml 配置实例
version: 3
services:php:container_name: php7.4image: php:7.4-fpmrestart: alwaysprivileged: trueports:- 9000:9000volumes:- /home/www:/var/www # php代码目录nginx:container_name: nginximage: nginx:latestprivileged: truerestart: alwaysenvironment:- TZAsia/Shanghaiports:- 80:80- 443:443depends_on:- phpvolumes:- /home/www:/var/www # php代码目录- /home/docker/nginx/logs:/var/log/nginx # nginx日志文件mysql:image: mysql:5.7container_name: mysql5.7privileged: truerestart: alwaysports:- 3306:3306volumes:- /home/docker/mysql/data:/var/lib/mysql # mysql数据目录- /home/docker/mysql/log:/var/log/mysql # mysql日志文件- /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步避免时间的问题ro是read only只读的意思environment:- MYSQL_ROOT_PASSWORD123456 # root账户密码redis:image: redis:latestcontainer_name: redisprivileged: truerestart: alwaysports:- 6379:6379command: redis-server /usr/local/redis/conf/redis.conf # 启动redis服务并指定配置文件volumes:- /home/docker/redis/data:/data # redis数据目录- /home/docker/redis/conf/redis.conf:/usr/local/redis/conf/redis.conf #redis配置文件常用参数说明 version指定Docker Compose文件的语法版本3是当前广泛使用的版本 services要运行的服务里面是各个服务名称和服务配置 container_name容器名称 image使用的镜像名称 restart容器在退出后的行为[always总是重启容器no不重启unless-stopped重启容器除非容器被手动停止on-failure退出状态码不为0即失败时自动重启该容器] networks将当前容器加入到这个网络中以方便数据传输默认是使用brige连接方式名为docker_default的网络但重启容器后会改变ip地址如果要固定容器ip就要自定义网络 volumes宿主机和容器的目录映射 environment添加环境变量可添加一个或多个键值对布尔含义的值要用引号包裹 ports宿主机和容器的端口映射 build使用当前目录下的dockerfile构建 expose暴露容器端口但不映射到宿主机只通过ip等方式访问容器的时候访问 depends_on以依赖性顺序启动服务先启动depends_on中的服务再启动当前服务注意事项服务启动不会等依赖服务里面的程序启动完才启动只依赖服务是否启动 privileged给容器root权限 启动服务 在 docker-compose.yml 文件所在的目录下执行下面的命令一键启动所有服务
docker-compose up现在打开浏览器访问locahost应该能访问到nginx的首页了如果你是在本地电脑或虚拟机的docker需要在宿主机添加hosts文件ip映射
# 将ip改为你的服务器ip
192.168.204.128 demo.net下面是docker-compose的其他命令
# 一键启动所有服务
docker-compose up# 或者启动所有服务并在后台运行
docker-compose up -d# 停止服务
docker-compose stop# 重启服务
docker-compose restart# 进入指定容器
docker-compose exec [service_name] bash# 查看容器状态
docker-compose ps复制配置文件 如果你不需要自定义配置各个服务可以跳过这个也不用下一步调整docker-compose配置
复制容器的默认配置文件到宿主机冒号前是容器名称冒号后面是容器中配置文件的路径最后是宿主机的配置文件存放目录如果宿主机目录不存在请创建
# nginx
sudo docker cp nginx:/etc/nginx/nginx.conf /home/docker/nginx/nginx.conf
sudo docker cp nginx:/etc/nginx/conf.d /home/docker/nginx/conf.d
# php
sudo docker cp php7.4:/usr/local/etc/php/php.ini-production /home/docker/php/php.ini
# mysql
sudo docker cp mysql5.7:/etc/my.cnf /home/docker/mysql/my.cnf
# redis
自动生成空白配置调整docker-compose配置 这个配置加入了各个服务自定义的配置文件映射先执行docker-compose stop停止服务然后用下面的配置替换上面 docker-compose.yml 文件的初始配置然后重新启动服务即可
#yaml 配置实例
version: 3
services:php:container_name: php7.4image: php:7.4-fpmrestart: alwaysprivileged: trueports:- 9000:9000volumes:- /home/www:/var/www # php代码目录- /home/docker/php/php.ini:/usr/local/etc/php/php.ini # php配置文件目录nginx:container_name: nginximage: nginx:latestprivileged: truerestart: alwaysenvironment:- TZAsia/Shanghaiports:- 80:80- 443:443depends_on:- phpvolumes:- /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf # nginx配置文件目录- /home/docker/nginx/conf.d:/etc/nginx/conf.d # nginx虚拟主机配置文件目录- /home/www:/var/www # php代码目录- /home/docker/nginx/logs:/var/log/nginx # nginx日志目录mysql:image: mysql:5.7container_name: mysql5.7privileged: truerestart: alwaysports:- 3306:3306volumes:- /home/docker/mysql/data:/var/lib/mysql # mysql数据目录- /home/docker/mysql/my.cnf:/etc/my.cnf # mysql配置文件- /home/docker/mysql/log:/var/log/mysql # mysql日志文件- /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步避免时间的问题ro是read only只读的意思environment:- MYSQL_ROOT_PASSWORD123456 # root账户密码redis:image: redis:latestcontainer_name: redisprivileged: truerestart: alwaysports:- 6379:6379command: redis-server /usr/local/redis/conf/redis.conf # 启动redis服务并指定配置文件volumes:- /home/docker/redis/data:/data # redis数据目录- /home/docker/redis/conf/redis.conf:/usr/local/redis/conf/redis.conf #redis配置文件新建站点 创建站点配置文件例如网站域名是http://demo.net那么就在ngxin/conf.d目录下新建一个demo.net.conf
cd /home/docker/nginx/conf.d
sudo vi demo.net.conf文件内容如下
server {listen 80;server_name www.demo.net demo.net;root /var/www/demo;index index.php index.html;location ~ \.php(.*)$ {fastcgi_pass php: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;}
}注意修改你的root为容器里的代码目录server_name为你的域名
在你的站点代码目录新建php文件内容随便写
cd /var
sudo mkdir www
cd ./www sudo mkdir demo
sudo vi test.php?php
echo hello world;如果你是在本地电脑或虚拟机的docker需要在宿主机添加hosts文件ip映射
# 将ip改为你的服务器ip
192.168.204.128 demo.net然后重启服务现在打开浏览器访问http://demo.net/test.php就能看到输入的hello world了
常见问题 laravel、thinkphp等框架站点配置伪静态示例 server {listen 80;server_name hello.net;root /var/www/hello/public; # 站点根目录include /var/www/hello/public/nginx.htaccess; # 配置伪静态location ~ \.php(.*)$ {fastcgi_pass php: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;}
}laravel框架报错The stream or file /var/www/hello/storage/logs/laravel.log could not be opened in append mode: failed to open stream: Permission denied The exception occurred while attempting to log 原因日志目录没有权限 解决sudo chmod -R 777 storage laravel框架报错could not find driver (SQL: select * from admin_userswhereusername admin limit 1) 原因没有安装php-pdo驱动 解决 1.进入php容器一次执行下面的命令安装驱动 docker-compose exec php bash
docker-php-ext-install pdo pdo_mysql2.在php.ini文件添加扩展 extensionpdo_mysql3.重启容器