Docker搭建LNMP
环境踩坑笔记与操作流程
创建并运行容器
- 拉取镜像:
docker search images //搜索镜像
docker pull images:版本或指定的内容
- 创建容器:
-p port:port //是端口映射 主机(宿主)端口:容器端口
-v directory:directory //目录挂载,目录一致甚至是权限修改也一致
- 创建容器实例:(之后创建类比即可,注意镜像要在最后,不然创建后一直挂起)
run -itd --name myphp -v /home/..:/www php:7.4-fpm
- 注意
mysql
容器在创建的时候加入登入的密码,否则也会挂起:
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql /bin/bash
- 停止和重启容器以及看参数使用了
portainer.io
小工具来管,可以在网页直接进入容器命令行 - 进入容器
docker exec -it 容器名 /bin/bash
项目运行思路与踩坑
思路
- 新建立一个网络将各个容器之间连接,保证一个网络内部各个容器可以互相访问
- 若使用
laravel
框架,则注意在.env
文件里mysql
,redis
等服务标为容器名
踩坑记录
-
注意各个容器之间的容器数据库的数据挂载和
nginx
容器的配置文件挂载,前者是数据备份,后者是方便nginx
容器配置文件修改,注意改完配置文件重启下容器或者服务,如果没有挂载的话,容器就会跑不起来,也就修改不了内部的文件,就很难办了 -
值得注意的是每次重启一次docker服务后,网络里的
ip
会改变,所以在配置文件中推荐写容器名,写ip
的话改了之后可能出问题 -
mysql
容器需要注意在mysql/user
的表中将权限设置好:(有个细节就是删除用户的时候可能没删除干净),推荐做一个端口映射-
CREATE USER 'javacui'@'%' IDENTIFIED BY '123456'; //注意密码要加上 GRANT privileges ON databasename.tablename TO 'username'@'host';//权限设置
-
-
php
容器得将拓展安好,报错就直接搜了安装拓展即可,也是可以直接取找安好拓展的镜像的来创建容器- 一般是
php
的mysql
驱动拓展和redis
拓展没安好,下载对应的拓展文件然后在php.ini
文件(有两个)里注释删除,然后进入docker安装拓展的目录直接安装即可
- 一般是
-
在创建容器的时候尽量别加
/bin/bash
,这样的话就算容器内的服务没有跑起来但是容器也可以运行,就比如我配的域名转发到的nginx
容器一直502了好久,一直找不到结果呜呜,这里放个参考链接
容器创建成镜像,上传到Dockerhub
上
-
创建自己的镜像:
docker commit -m '镜像注释' -a '用户名' 容器名 自定义镜像名
-
登录
docker login -u 用户名 -p 密码
-
加上tag
docker tag 镜像id 'Dockerhub的用户名'/镜像名
-
上传
docker push "用户名"/镜像名
-
在
dockerhub
上直接拉取即可