安装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 [::]:*