开源项目:dnmp: 基于Docker的一键LNMP安装程序
实践
#新建一个目录,专门放置dnmp项目
$ mkdir codeOperateDir
$ cd codeOperateDir/
#git拉取dnmp项目
$ git clone http://github.com/yeszao/dnmp.git
#将用户yonghuming加入docker用户组
$ sudo dseditgroup -o edit -a yonghuming -t user docker
#进入dnmp项目
$ cd dnmp
$ ls -al
total 280
drwxr-xr-x 18 v_weishan INTERNAL\Domain Users 576 10 12 16:20 .
drwxr-xr-x 4 v_weishan INTERNAL\Domain Users 128 10 12 16:20 ..
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 37 10 12 16:20 .dockerignore
drwxr-xr-x 12 v_weishan INTERNAL\Domain Users 384 10 12 16:20 .git
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 78 10 12 16:20 .gitattributes
drwxr-xr-x 3 v_weishan INTERNAL\Domain Users 96 10 12 16:20 .github
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 99 10 12 16:20 .gitignore
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 1066 10 12 16:20 LICENSE
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 2230 10 12 16:20 README-en.md
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 27010 10 12 16:20 README.md
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 1874 10 12 16:20 bash.alias.sample
drwxr-xr-x 8 v_weishan INTERNAL\Domain Users 256 10 12 16:20 data
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 9764 10 12 16:20 docker-compose.sample.yml
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 6287 10 12 16:20 env.sample
drwxr-xr-x 5 v_weishan INTERNAL\Domain Users 160 10 12 16:20 logs
drwxr-xr-x 15 v_weishan INTERNAL\Domain Users 480 10 12 16:20 services
-rw-r--r-- 1 v_weishan INTERNAL\Domain Users 69126 10 12 16:20 snapshot.png
drwxr-xr-x 3 v_weishan INTERNAL\Domain Users 96 10 12 16:20 www
#复制配置文件。实际在运行过程中起作用的是 .env docker-compose.yml 配置文件
$ cp env.sample .env
$ cp docker-compose.sample.yml docker-compose.yml
#因宿主机3306端口已被占用,因此需要更改配置中的端口号才能使mysql服务正常启动
#docker-compose.yml文件中 - "${MYSQL_HOST_PORT}:3306" 表示宿主机端口MYSQL_HOST_PORT映射到容器的3306端口,宿主机端口MYSQL_HOST_PORT定义在.env配置文件中。因此需要将.env配置文件中的端口号更改
$ vi .env
# 更改本机端口3310,映射容器的3306端口,避免3306端口占用造成的mysql容器启动失败
MYSQL_HOST_PORT=3310
#启动docker。docker-compose.yml文件中列出的是可以启动的服务,被注释的为不启动
#仅启动某几个服务 docker-compose up mysql php
$ docker-compose up
#关闭服务
$ docker-compose stop
#重启服务
$ docker-compose restart
#更改nginx配置后重启nginx服务。这里两个nginx,第一个是容器名,第二个是容器中的nginx程序
$ docker exec -it nginx nginx -s reload
#启动成功
#拉取容器列表
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3310->3306/tcp, 33060/tcp
nginx /docker-entrypoint.sh ngin ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
php docker-php-entrypoint php-fpm Up 9000/tcp, 9501/tcp
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8cfb3e86afa2 mysql:8.0.13 "docker-entrypoint.s…" 22 minutes ago Up 20 minutes 33060/tcp, 0.0.0.0:3310->3306/tcp mysql
e8f75d59af26 dnmp_nginx "/docker-entrypoint.…" 23 hours ago Up 33 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx
cad8557dc812 dnmp_php "docker-php-entrypoi…" 23 hours ago Up 33 minutes 9000/tcp, 9501/tcp php
#进入mysql容器
$ docker exec -it 8cfb3e86afa2 bash
相关配置修改:
宿主机端口号,在.env配置文件中修改。
映射容器端口号,在docker-compose.yml配置文件中修改
php项目相关配置修改:
修改入口文件 services/nginx/conf.d/localhost.conf
listen 80 default;
server_name localhost;
root /www/localhost;
#index index.php index.html index.htm;
#访问http://localhost默认访问/www/localhost/swagger/preview.html文件
index swagger/preview.html;
即http://localhost访问的是www/localhost/swagger/preview.html文件
mysql权限相关
进入mysql容器连接mysql
创建用户及授权
# root账号连接进mysql
root@8cfb3e86afa2:/# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.13 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
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>
# 新增账户test,允许所有主机登录,密码为test
mysql> create user 'test'@'%' identified by 'test';
Query OK, 0 rows affected (0.14 sec)
# 修改test账户密码为123456
mysql> ALTER USER 'test'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.11 sec)
# 授予所有主机%的test账户对所有库*.所有表*的所有all权限
mysql> grant all privileges on *.* to 'test'@'%' with grant option;
Query OK, 0 rows affected (0.13 sec)
# 查看账户信息 主机,账户,密码
mysql> select host,user,authentication_string from mysql.user;
# 授权时的%并不包括localhost,用localhost进行登录时有权限问题,需要对localhost用户进行用户添加及相关授权。参考:https://blog.csdn.net/weixin_34236334/article/details/115928524