- 服务器搭建 lnmp 环境
后来发现有一键安装的镜像, 后面再做尝试.(Laradock) 先记录下一步一步的踩坑过程...
之前安装的.png
这是之前安装的, 删掉再来一遍... - 容器删除命令
docker rm -f [容器id or 容器名]
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
- 这是我删除的命令, 报错了
docker rm -f 99fc29787153 //
Error response from daemon: Conflict, cannot remove the default name of the container
Error response from daemon: Conflict, cannot remove the default name of the container
Error response from daemon: Conflict, cannot remove the default name of the container
这种情况的可能原因是在过去的某个时刻,已创建了一个命名容器,然后您已将其保持运行状态。之后,主机因任何原因重新启动,并且没有优雅地终止容器。剩下的文件现在似乎阻止你重新生成旧名称的新容器,因为系统认为旧容器仍然存在。
我们先使用docker ps -a 看看所有容器的运行记录,以异常方式退出的容器将具有非零状态代码。根据名称搜索需要的名称,然后使用实际的十六进制代码将其删除 docker rm xxxxxx。
但是,有时候发现-a并没有多余信息。则可用手动删除容器方法。即删除/var/lib/docker/containers/下的对应文件夹,将其删除,注意使用root权限
手动删除之后, 再次执行, 就可以成功执行了! 现在我的 docker 里面是空的了
安装 MySQL
- 拉取 MySQL 镜像
docker pull mysql:5.7.24
- 查看 MySQL 镜像
docker images
- 启动容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=lzm123456 --name lzm_mysql mysql:5.6
参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置
–name 容器的名字,随便取,但是必须唯一查看容器
docker ps
mysql container
安装 PHP
- 拉取 PHP 镜像
docker pull php // 默认从官方拉取最新版
docker pull php:7.3.18-fpm // 也可以指定版本
- 查看 PHP 镜像
docker images
- 启动 PHP 容器
启动 PHP 的容器的时候, 和 MySQL容器 建立关联, 这个是核心, 两个容器间进行交互
docker run -d -v /mnt/nginx/www/html:/var/www/html -p 9000:9000 --link lzm_mysql:mysql --name lzm_php php:7.3.18-f pm
- 参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,即主机上的/mnt/nginx/www/html和容器中/var/www/html目录是同步的
–name 容器的名字
–link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。
ps : 容器中默认是没有vim的,所以我们首先要安装vim,需要注意的是安装前记得先执行apt update命令,不然安装会出现问题。
在/mnt/nginx/www/html 创建 phpinfo.php
image.png
- 进入容器
docker exec -it lzm_php /bin/bash
container
我们发现我们在主机的/var/nginx/www/html目录中新建的文件也在容器里的/var/www/html目录中,因为在创建容器的时候,我们已经把主机中的目录挂载到了容器中去了。
安装 Nginx
- 取最新版的 Nginx 镜像
$ docker pull nginx:latest
- 查看自己安装的镜像
docker images
下载的镜像
在上图中可以看到我们已经安装了最新版本(latest)的 nginx 镜像
- 启动容器 和 PHP 进行关联
docker run -d -p 80:80 --name lzm_nginx -v /mnt/nginx/www/html:/var/www/html/ --link lzm_php:php --name lzm_nginx nginx:latest
- 参数说明:
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一点非要一模一样,如果不一样在配置nginx的时候需要注意
–name 容器的名字
–link 与另外一个容器建立起联系
- 修改 Nginx 容器配置
进入容器
docker exec -it lzm_nginx /bin/bash
查看配置文件, 在 /etc/nginx/conf.d 文件夹下, 由于容器内没有 Vim , 我是在宿主机内编辑好了之后, 再 copy 到容器内, 也可以再容器内安装 Vim 直接在容器内编辑.
在宿主机内 /mnt/nginx/conf.d 创建 phpinfo.conf (目录可以自由创建, 但是你得知道创建在哪儿)
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /var/www/html;
index index.html index.htmi index.php; // 添加解析 php
}
#error_page 404 /404.html;
root /usr/share/nginx/html;
}
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass f565661117b6:9000; // 这里选择 php_fpm 容器id , 也可以是 php_fpm 容器的名字
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; // 这里写容器内的项目目录, 有的写($document_root), 他们说版本高了不支持, 我两个都试过了, 好像都支持, 或许我的版本不够高...
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
从宿主机拷贝文件到容器中
docker cp /mnt/nginx/conf.d/phpinfo.conf 容器:/etc/nginx/conf.d
进入容器查看是否真的复制进去了
copy
- 在容器内部检查下 Nginx 端口是否配置成功
nginx -t
image.png
重新加载
nginx -s reload
-
配置成功
最后我们可以通过浏览器可以直接访问
image.png
当看到这个页面的时候 , 说明 环境搭建成功 !
后面会有更多的坑在等着去踩呢, 可能文章中有许多错误的地方, 希望各位 猿/媛 多多指出, 共同进步...