Docker-compose

目录

Compose介绍

Docker Compose 安装

Docker-compose部署LNMP

下载镜像

拷贝nginx配置文件

拷贝PHP文件

MySQL文件准备

创建compose


Compose介绍

Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,build使用什么镜像,数据卷,映射端口等;然后一条命令管理所有服务,比如启动,停止,重启。简化部署多个容器的操作。

 

Docker-compose是一个定义和管理多容器的工具,主要用来编排相关联的容器。

Docker Compose 安装

最新下载地址:Overview | Docker Documentation

安装方案

1.下载二进制文件

[root@docker-server2 ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@docker-server2 ~]# docker-compose --version

Docker-compose部署LNMP

下载镜像

[root@docker-server2 ~]# docker pull nginx:1.23.3
[root@docker-server2 ~]# docker pull mysql:8.0.32
[root@docker-server2 ~]# docker pull php:8.1-fpm

拷贝nginx配置文件

[root@docker-server2 lnmp]# mkdir -p /usr/local/nginx/{conf,log,html}
[root@docker-server2 lnmp]# docker run -itd --name=web1 -p 81:80 nginx:1.23.3 
ce794b3be3a26c738258e48a28ef6bace2aa51579ff3f55dcd51711a7ce85cd0
[root@docker-server2 lnmp]# docker cp web1:/etc/nginx/nginx.conf /usr/local/nginx/conf/
Successfully copied 2.56kB to /usr/local/nginx/conf/
[root@docker-server2 lnmp]# docker cp web1:/var/log/nginx /usr/local/nginx/log/
Successfully copied 2.56kB to /usr/local/nginx/log/
[root@docker-server2 lnmp]# docker cp web1:/usr/share/nginx/html /usr/local/nginx/
Successfully copied 4.1kB to /usr/local/nginx/
[root@docker-server2 lnmp]# docker cp web1:/etc/nginx/conf.d /usr/local/nginx/
Successfully copied 3.58kB to /usr/local/nginx/
[root@docker-server2 lnmp]# 
[root@docker-server2 lnmp]# 
[root@docker-server2 lnmp]# ls /usr/local/nginx/
conf  conf.d  html  log

[root@docker-server2 lnmp]# vim /usr/local/nginx/conf.d/default.conf 
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name;
        include        fastcgi_params;
    }
}

拷贝PHP文件

[root@docker-server2 ~]# docker run -d --name=php111 php:8.1-fpm 
12b854387314f08eb837d9c9fb46b9810e157064a144880a9c0c8771e6e816fa

[root@docker-server2 ~]# docker exec -it php111 bash

root@12b854387314:/var/www/html# cd /usr/local/etc/php

root@12b854387314:/usr/local/etc/php# cp php.ini-development php.ini

root@12b854387314:/usr/local/etc/php# exit

[root@docker-server2 ~]# docker cp php111:/usr/local/etc/php/php.ini /usr/local/php/

MySQL文件准备

[root@docker-server2 ~]# mkdir -p /usr/local/mysql/{conf,data}

创建compose

[root@docker-server2 ~]# mkdir lnmp
[root@docker-server2 ~]# cd lnmp/
[root@docker-server2 lnmp]# vim docker-compose.yml 

#Nginx部分
version: '3.8'
services:
  web:
    image: nginx:1.23.3
    hostname: web
    ports:
      - "80:80"
    volumes:
      - /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /usr/local/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
      - /usr/local/nginx/log/nginx:/var/log/nginx
      - /usr/local/nginx/html:/usr/share/nginx/html
    links:
      - php

  php:
    image: php:8.1-fpm
    hostname: php
    volumes:
      - /usr/local/php/www:/www
      - /usr/local/php/pip.ini:/usr/local/etc/php/pip.ini



#编辑一个PHP页面
[root@docker-server2 lnmp]# vim /usr/local/php/www/index.php 
<?php
        echo phpinfo();
?>

[root@docker-server2 lnmp]# cp /usr/local/php/www/index.php /usr/local/nginx/html/
    
#写到这里测试一下
[root@docker-server2 lnmp]# docker-compose up -d


浏览器访问192.168.100.6/index.php

#这时如果想让PHP连接到MySQL的话需要进到容器里面安装mysql插件
[root@docker-server2 lnmp]# docker-compose exec php bash
root@php:/var/www/html# cd /usr/local/bin/
root@php:/usr/local/bin# ./docker-php-ext-install pdo_mysql
root@php:/usr/local/bin# ./docker-php-ext-install mysqli

#在php.ini添加进去
[root@docker-server2 lnmp]# vim /usr/local/php/php.ini 
#在最后添加
extension=mysqli
extension=pdo_mysql

#然后继续写compose
[root@docker-server2 lnmp]# vim docker-compose.yml 
version: '3.8'
services:
  web:
    image: nginx:1.23.3
    hostname: web
    ports:
      - "80:80"
    volumes:
      - /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /usr/local/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
      - /usr/local/nginx/log/nginx:/var/log/nginx
      - /usr/local/nginx/html:/usr/share/nginx/html
    links:
      - php

  php:
    image: php:8.1-fpm
    hostname: php
    volumes:
      - /usr/local/php/www:/www
      - /usr/local/php/php.ini:/usr/local/etc/php/php.ini
    links:
      - mysql

  mysql:
    image: mysql:8.0.32
    hostname: mysql
    ports:
      - "3306:3306"
    volumes:
      - /usr/local/mysql/conf:/etc/mysql/conf.d
      - /usr/local/mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123123

#测试
[root@docker-server2 lnmp]# docker-compose up -d
[+] Running 3/3
 ⠿ Container lnmp-mysql-1  Started                                                                                             2.0s
 ⠿ Container lnmp-php-1    Started                                                                                             1.9s
 ⠿ Container lnmp-web-1    Started                                                                                             1.9s

#编辑一个页面验证PHP是否连接了mysql
#编辑之前首先需要查一下mysql容器的ip
[root@docker-server2 lnmp]# docker ps
#找到mysql容器的名字或id号
#然后用inspect查, 最下面有一个IPAddress就是
[root@docker-server2 lnmp]# docker inspect lnmp-mysql-1 

[root@docker-server2 lnmp]# vim /usr/local/php/www/mysql.php 
<?php
        $conn = mysqli_connect("172.18.0.4", "root", "123123");
        if (!$conn) {
                die("连接失败: " . mysqli_connect_error());
        }
        echo "success";

        mysqli_close($conn);
?>

[root@docker-server2 lnmp]# cp /usr/local/php/www/mysql.php /usr/local/nginx/html/

浏览器访问192.168.100.6/mysql.php

 如果访问时报类似于

Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /www/mysql.php:2 Stack trace: #0 {main} thrown in /www/mysql.php on line 2

的错误,那可能是你PHP在装mysql插件的时候没装上去,需要进到容器里再装一遍,然后退出来重启PHP容器

最后完整的docker-compose.yml

version: '3.8'
services:
  web:
    image: nginx:1.23.3
    hostname: web
    ports:
      - "80:80"
    volumes:
      - /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /usr/local/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
      - /usr/local/nginx/log/nginx:/var/log/nginx
      - /usr/local/nginx/html:/usr/share/nginx/html
    links:
      - php

  php:
    image: php:8.1-fpm
    hostname: php
    volumes:
      - /usr/local/php/www:/www
      - /usr/local/php/php.ini:/usr/local/etc/php/php.ini
    links:
      - mysql

  mysql:
    image: mysql:8.0.32
    hostname: mysql
    ports:
      - "3306:3306"
    volumes:
      - /usr/local/mysql/conf:/etc/mysql/conf.d
      - /usr/local/mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123123

最后用docker-compose批量启动,停止,重启

#重启
[root@docker-server2 lnmp]# docker-compose restart 
[+] Running 3/3
 ⠿ Container lnmp-php-1    Started                                                                                             1.1s
 ⠿ Container lnmp-mysql-1  Started                                                                                             1.4s
 ⠿ Container lnmp-web-1    Started                                                                                             1.0s

#停止
[root@docker-server2 lnmp]# docker-compose stop
[+] Running 3/3
 ⠿ Container lnmp-web-1    Stopped                                                                                             0.4s
 ⠿ Container lnmp-php-1    Stopped                                                                                             0.4s
 ⠿ Container lnmp-mysql-1  Stopped                                                                                             0.8s
[root@docker-server2 lnmp]# docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
lnmp-mysql-1        "docker-entrypoint.s…"   mysql               exited (0)          
lnmp-php-1          "docker-php-entrypoi…"   php                 exited (0)          
lnmp-web-1          "/docker-entrypoint.…"   web                 exited (0) 

#启动
[root@docker-server2 lnmp]# docker-compose start
[+] Running 3/3
 ⠿ Container lnmp-mysql-1  Started                                                                                             0.9s
 ⠿ Container lnmp-php-1    Started                                                                                             0.8s
 ⠿ Container lnmp-web-1    Started                                                                                             0.9s
[root@docker-server2 lnmp]# docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
lnmp-mysql-1        "docker-entrypoint.s…"   mysql               running             0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
lnmp-php-1          "docker-php-entrypoi…"   php                 running             9000/tcp
lnmp-web-1          "/docker-entrypoint.…"   web                 running             0.0.0.0:80->80/tcp, :::80->80/tcp

#当环境搭好了以后
[root@docker-server2 lnmp]# docker-compose up -d
和
[root@docker-server2 lnmp]# docker-compose down 
就要慎用了,使用这两个命令后,PHP里的插件需要重新下载,并且mysql的ip会变动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值