docker-comple 部署lnmp

安装docker-comple

[root@docker ~]# mkdir -p compose_lnmp/php
[root@docker ~]# touch compose_lnmp/docker-compose.yml
[root@docker ~]# touch compose_lnmp/php/Dockerfile

[root@docker ~]# wget -c  https://github.com/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64
[root@docker ~]# mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
[root@docker ~]# chmod  a+x /usr/local/bin/docker-compose 
[root@docker ~]# docker-compose --version
docker-compose version 1.25.5, build 8a1c60f6

创建相应的文件和目录

[root@docker ~]# tree compose_lnmp/
compose_lnmp/
├── docker-compose.yml
└── php
    └── Dockerfile

1 directory, 2 files

编辑php/Dockerfile

[root@docker ~]# vim compose_lnmp/php/Dockerfile
FROM php:7.0-fpm
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        libmemcached-dev \
        zlib1g-dev \
        libcurl4-openssl-dev \
        libxml2-dev \
        --no-install-recommends && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install -j$(nproc) \
        iconv mcrypt gettext curl mysqli pdo pdo_mysql zip \
        mbstring bcmath opcache xml simplexml sockets hash soap \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

CMD ["php-fpm", "-F"]

编写docker-compose.yml

[root@docker ~]# vim compose_lnmp/docker-compose.yml
version: "3"

services:
  mysql:
    hostname: mysql
    restart: always
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - mysql-config:/etc/mysql
      - mysql-log:/var/log/mysql
      - mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_USER: user
      MYSQL_PASSWORD: user123
  php:
    hostname: php
    restart: always
    container_name: php
    build:
      context: ./php
      dockerfile: Dockerfile
    ports:
      - "9000:9000"
    links:
      - mysql:mysql
    volumes:
      - nginx-html:/var/www/html
      - php-config:/usr/local/etc
  nginx:
    hostname: nginx
    restart: always
    container_name: nginx
    image: nginx
    ports:
      - "80:80"
      - "443:443"
    links:
      - "php:php"
    volumes:
      - nginx-config:/etc/nginx
      - nginx-log:/var/log/nginx
      - nginx-html:/usr/share/nginx/html

volumes:
  mysql-config:
  mysql-log:
  mysql-data:
  nginx-html:
  php-config:
  nginx-config:
  nginx-log:

启动服务

cd compose_lnmp

docker-compose up -d 启动
docker-compose restart 重启

查看容器

[root@docker compose_lnmp]# docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED          STATUS                    PORTS                                                                      NAMES
f8c18829cabf   nginx                                "/docker-entrypoint.…"   11 seconds ago   Up 9 seconds              0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx
72176d819d74   compose_lnmp_php                     "docker-php-entrypoi…"   3 minutes ago    Up 3 minutes              0.0.0.0:9000->9000/tcp, :::9000->9000/tcp                                  php
ed1f8854128f   mysql                                "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes              0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                       mysql

数据化持久目录

[root@docker compose_lnmp]# docker volume ls 
DRIVER    VOLUME NAME
local     03c7770fea6d9350f979847be29f2b8146303fbd48116618616628b3b77221a0
local     4e5fed374feab2035464fad478c611db71aa6e1174065fe31b8c4626c7c08ca7
local     7fc541df71d8c55675f12ecf92e219b3f2353b54533a10701443bb3fa17b6d71
local     8c79a13f19fe88e0ece1013cc5bc28bca0433bda2d61c3e67dac4b6f5f61bff8
local     9cc1ed86d97c0dc679e8bc41ec7c4b0d96ced9562b64e42c3583b1d2e854bafc
local     16fe9d63e0550065f430ac23bfebc44d90eec5905c7e4c30761aaa8372d146c8
local     401f58ed1ca49d98ad53ac052adda6865a32e3ba82135c869a490d469b6d6f6f
local     1397ed5ef8e78fb5fc52b8ffb4c4dce37ed809e8baedacccec43af05f7e5cd5b
local     75855c7759d263a7bd9b6ef1ecf5481e828c46d083e55eba199ebb780da57bfd
local     907641a94d3a3c4d83e4978a43d9f64575cd4457dfb2b9cf9374556002084f48
local     9872933f652693474acdb9d723376abe90b429801aa6ce1e398face00b1e708d
local     a2e26dc94e5e02c4c69789c95a75d8d3d5f26fc7d206701ac9606620797949db
local     compose_lnmp_mysql-config #数据库配置文件
local     compose_lnmp_mysql-data	#数据库数据文件
local     compose_lnmp_mysql-log	#数据库日志
local     compose_lnmp_nginx-config #nginx配置文件
local     compose_lnmp_nginx-html	#nginx web目录
local     compose_lnmp_nginx-log	#nginx日志目录
local     compose_lnmp_php-config	#php配置文件
local     e7d2f4821be653b47497c2670e1d33b691ace4c39f279057efda3ae91a3d21c0

配置php

#默认的php.ini文件是没有的,需要手动把模板配置文件复制为php.ini
[root@docker ~]# cd /var/lib/docker/volumes/compose_lnmp_php-config/_data/php
[root@docker php]# cp php.ini-production php.ini

修改php.ini时区
[root@docker php]# vim php.in
date.timezone = Asia/Shanghai

配置nginx

[root@docker ~]# vim /var/lib/docker/volumes/compose_lnmp_nginx-config/_data/conf.d/default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;     #此处添加index.php

#取消注销并进行修改
    location ~ \.php$ {
        root           html;
        fastcgi_pass   php:9000;   #php为容器的名字
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
        include        fastcgi_params;
    }

mysql测试

[root@docker ~]# docker container exec -it mysql bash
root@mysql:/# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.26    |
+-----------+
1 row in set (0.01 sec)

mysql> 

验证php

[root@docker ~]# vim /var/lib/docker/volumes/compose_lnmp_nginx-html/_data/index.php
<?php phpinfo();

重启所有容器

[root@docker ~]# cd compose_lnmp
[root@docker compose_lnmp]# docker-compose restart
Restarting nginx ... done
Restarting php   ... done
Restarting mysql ... done
[root@docker compose_lnmp]# ss -antl
State        Recv-Q       Send-Q             Local Address:Port             Peer Address:Port       Process       
LISTEN       0            128                      0.0.0.0:80                    0.0.0.0:*                        
LISTEN       0            128                      0.0.0.0:22                    0.0.0.0:*                        
LISTEN       0            128                      0.0.0.0:443                   0.0.0.0:*                        
LISTEN       0            128                      0.0.0.0:9000                  0.0.0.0:*                        
LISTEN       0            128                      0.0.0.0:3306                  0.0.0.0:*                        
LISTEN       0            128                    127.0.0.1:1514                  0.0.0.0:*                        
LISTEN       0            128                         [::]:80                       [::]:*                        
LISTEN       0            128                         [::]:22                       [::]:*                        
LISTEN       0            128                         [::]:443                      [::]:*                        
LISTEN       0            128                         [::]:9000                     [::]:*                        
LISTEN       0            128                         [::]:3306                     [::]:*        

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# docker搭建lnmp环境 <!-- TOC --> - [docker搭建lnmp环境](#docker搭建lnmp环境) - [一、Dockerfile定制镜像](#一dockerfile定制镜像) - [二、docker-compose](#二docker-compose) - [三、docker-compose编排lnmp环境](#三docker-compose编排lnmp环境) - [1、mysql](#1mysql) - [2、redis](#2redis) - [3、mongo](#3mongo) - [4、nginx](#4nginx) - [5、php](#5php) - [6、完整版](#6完整版) - [四、参考](#四参考) <!-- /TOC --> 有收获的话请**加颗小星星**,没有收获的话可以 **反对** **没有帮助** **举报**三连 ## 一、Dockerfile定制镜像 ```bash # FROM 指定基础镜像 FROM 镜像 FROM php:7.2-fpm # RUN 执行 RUN or RUN ["可执行文件", "参数1", "参数2"] RUN echo 'Hello, Docker!' > /usr/share/nginx/html/index.html RUN ["php", "-S", "0.0.0.0:8080"] # COPY 复制文件 COPY ... COPY swoole-4.2.10.tgz /home COPY nginx.conf /etc/nginx/nginx.conf # ADD 复制文件或目录,如果是.tgz,会被解压缩 ADD ... ADD nginx.conf /etc/nginx/nginx.conf # CMD 容器启动 CMD echo $HOME => CMD [ "/bin/sh", "-c", "echo $HOME" ] CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] # ENTRYPOINT 入口点 ENTRYPOINT ["docker-entrypoint.sh"] 存在 ENTRYPOINT 后,CMD 的内容将会作为参数传给 ENTRYPOINT # ENV 环境变量 ENV ENV MYSQL_ROOT_PASSWORD root # ARG与ENV差不多 ARG 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的 ENV MYSQL_ROOT_PASSWORD root # VOLUME 匿名卷 VOLUME ["", ""...] VOLUME ["/data"] # EXPOSE 暴露端口 EXPOSE [...] EXPOSE 80 443 # WOEKDIR 指定工作目录,进入容器后的落地目录 WORKDIR WORKDIR /var/www # USER 指定当前用户 USER USER root ``` ## 二、docker-compose - 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 - 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。 ## 三、docker-compose编排lnmp环境 ### 1、mysql 这里我们使用了mysql5.5版本,没其它用意,相比5.7以上版本,占内存和硬盘最小的一个版本 我们准备了一个`my.cnf`作为额外配置,这里我修改了数据库的时区 ```cnf [mysqld] default-time-zone = '+8:00' ``` ```Dockerfile FROM mysql:5.5 COPY my.cnf /etc/mysql/conf.d EXPOSE 3306 ``` ### 2、redis 我们使用准备的配置文件`redis.conf`覆盖容器默认启动的配置文件,修改了`ip绑定`和`密码` ```conf bind 0.0.0.0 requirepass root ``` ```Dockerfile FROM redis:latest COPY redis.conf /usr/local/etc/redis/redis.conf CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] EXPOSE 6379 ``` ### 3、mongo mongodb我们没有特殊处理 ```Dockerfile FROM mongo:latest EXPOSE 27017 ``` ### 4、nginx 我们准备了一份`nginx.conf`和虚拟目录`conf.d`,为了以后可以动态的配置网站的代理和负载均衡 还有一个日志目录,放在外层`logs`目录里面,记录nginx的访问日志 特别注意的是`fastcgi_pass php:9000;`而不是`fastcgi_pass 127.0.0.1:9000;`,目前自己也没明白 ```Dockerfile FROM nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 ``` ### 5、php php算是这里面最难搞定的,因为我们需要额外的添加php扩展,虽然php的docker官方提供了`docker-php-ext-configure`, `docker-php-ext-install`, `docker-php-ext-enable`,还是有些扩展需要通过`手动编译`或者`pecl`安装 由于pecl官网下载慢,我们事先下载好了几个需要的扩展 php-fpm用的是debian的linux系统,下载也很慢,我们备用了阿里云的镜像`sources.list` 我们还准备了php的默认配置`php.ini`和`opcache.ini` 比如swoole扩展安装,记得安装包用完后清理,还有得用`COPY`命令,`ADD`会解压缩 ```Dockerfile # swoole COPY swoole-4.2.10.tgz /home RUN pecl install /home/swoole-4.2.10.tgz && \ docker-php-ext-enable swoole && \ rm /home/swoole-4.2.10.tgz ``` ### 6、完整版 ```yml version: '3' networks: frontend: driver: bridge backend: driver: bridge volumes: mysql: driver: local mongo: driver: local redis: driver: local services: php: build: ./php volumes: - ${WORKER_DIR}:/var/www ports: - 9100:9000 depends_on: - mysql - redis - mongo networks: - backend nginx: build: ./nginx volumes: - ${WORKER_DIR}:/var/www - ./logs/nginx:/var/log/nginx - ./nginx/conf.d:/etc/nginx/conf.d ports: - 8000:80 depends_on: - php networks: - frontend - backend mysql: build: ./mysql environment: - MYSQL_ROOT_PASSWORD=root volumes: - ${DATA_PATH}/mysql:/var/lib/mysql ports: - 3310:3306 networks: - backend mongo: build: ./mongo environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=root ports: - 27010:27017 volumes: - ${DATA_PATH}/mongo:/data/db networks: - backend redis: build: ./redis volumes: - ${DATA_PATH}/redis:/data ports: - 6310:6379 networks: - backend ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值