docker搭建lnmp環(huán)境的實(shí)現(xiàn)步驟
近期閑來無事,用公司電腦部署了一套環(huán)境,記錄一下部署經(jīng)過和踩的坑。
Nginx
1、拉取鏡像,需要使用鏡像創(chuàng)建容器
拉取的Nginx版本可以自己設(shè),我是用的nginx:latest
// 拉取鏡像 docker pull nginx:1.18.0 1.18.0: Pulling from library/nginx f7ec5a41d630: Pull complete 0b20d28b5eb3: Pull complete 1576642c9776: Pull complete c12a848bad84: Pull complete 03f221d9cf00: Pull complete Digest: sha256:e90ac5331fe095cea01b121a3627174b2e33e06e83720e9a934c7b8ccc9c55a0 Status: Downloaded newer image for nginx:1.18.0 docker.io/library/nginx:1.18.0 // 安裝完成后可以使用命令查看安裝了哪些鏡像 docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 605c77e624dd 2 years ago 141MB
2、宿主機(jī)創(chuàng)建Nginx所需的映射文件
這個(gè)需要提前創(chuàng)建,因?yàn)槿绻苯邮褂胐ocker命令創(chuàng)建容器會(huì)報(bào)錯(cuò)本地沒有映射文件
先把nginx所需目錄創(chuàng)建了
[root@localhost ~]# mkdir -pv /lnmp/nginx/{conf/conf.d,data,logs,html}
mkdir: created directory ‘/lnmp'
mkdir: created directory ‘/lnmp/nginx'
mkdir: created directory ‘/lnmp/nginx/conf'
mkdir: created directory ‘/lnmp/nginx/conf/conf.d'
mkdir: created directory ‘/lnmp/nginx/data'
mkdir: created directory ‘/lnmp/nginx/logs'
mkdir: created directory ‘/lnmp/nginx/html'
[root@localhost ~]# ls /lnmp/nginx/
conf data logs html
[root@localhost ~]#
在conf中創(chuàng)建nginx.conf,conf.d中也需要一個(gè)default.conf,這些后面映射都會(huì)用到,創(chuàng)建好nginx配置文件后打開將默認(rèn)配置存進(jìn)去,因?yàn)樵谟成鋾r(shí)本地的這個(gè)文件會(huì)將容器中的文件覆蓋掉(當(dāng)然你也可以先創(chuàng)建容器,將容器中的nginx.conf復(fù)制出來)
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
autoindex on;
}
location ~ \.php$ {
// 這里是我踩的一個(gè)大大的坑
// 如果不指定php-fpm運(yùn)行目錄,會(huì)為空導(dǎo)致nginx無法解析php文件
// 所以這里必須要明確指定運(yùn)行根目錄?。。?
root /var/www/html;
fastcgi_pass php81-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
}
3、創(chuàng)建容器
這里有一個(gè)點(diǎn)需要注意,在創(chuàng)建之前我們需要先創(chuàng)建一個(gè) Docker 網(wǎng)絡(luò),以便 Nginx、MySQL 和 PHP 容器可以相互通信
docker network create lnmp-network
之后創(chuàng)建容器,創(chuàng)建成功后可以使用ps命令查看有哪些容器
docker run -it --name nginx --network lnmp-network -p 80:80 -v D:/lnmp/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v D:/lnmp/nginx/conf/conf.d:/etc/nginx/conf.d -v D:/lnmp/nginx/html:/usr/share/nginx/html -v D:/lnmp/nginx/logs:/var/log/nginx -d nginx:latest
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
a9af314321d6 nginx:latest "/docker-entrypoint.…" 25 hours ago Up 57 minutes 0.0.0.0:80->80/tcp nginx命令中的鏡像名稱和地址需要改成自己的,我這里只映射了80端口,443端口也可以一起映射,有需要的話就加上。
Mysql
沒什么好說的,mysql還是一樣的流程,上才藝
#拉取Mysql鏡像,這里使用5.7版本
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.18.0 c2c45d506085 12 months ago 133MB
[root@localhost ~]# docker pull mysql:5.7.32
5.7.32: Pulling from library/mysql
a076a628af6f: Pull complete
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
25b5c6debdaf: Pull complete
43a5816f1617: Pull complete
7065aaa2655f: Pull complete
b4bc531db40f: Pull complete
8c3e9d7c9815: Pull complete
fadfb9734ed2: Pull complete
Digest: sha256:e08834258fcc0efd01df358222333919df53d4a0d9b2a54da05b204b822e3b7b
Status: Downloaded newer image for mysql:5.7.32
docker.io/library/mysql:5.7.32
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.18.0 c2c45d506085 12 months ago 133MB
mysql 5.7.32 cc8775c0fe94 15 months ago 449MB
[root@localhost ~]#
#創(chuàng)建數(shù)據(jù)目錄
[root@localhost ~]# mkdir -pv /lnmp/mysql/{conf,data,logs}
mkdir: 已創(chuàng)建目錄 "/lnmp/mysql"
mkdir: 已創(chuàng)建目錄 "/lnmp/mysql/conf"
mkdir: 已創(chuàng)建目錄 "/lnmp/mysql/data"
mkdir: 已創(chuàng)建目錄 "/lnmp/mysql/logs"
[root@localhost ~]# ls /lnmp/mysql/
conf data logs
[root@localhost ~]#
#啟動(dòng)mysql容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4c36a62dde4 nginx:1.18.0 "/docker-entrypoint.…" 18 minutes ago Up 12 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@localhost ~]# docker run -d -p 3306:3306 --name mysql \
> -v /lnmp/mysql/conf:/etc/mysql/conf.d \
> -v /lnmp/mysql/logs:/logs \
> -v /lnmp/mysql/data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=root \
> mysql:5.7.32
55cc5694695d26327abee0580af2cbcaf28c49f33da8da24aa50c5b049946e01
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55cc5694695d mysql:5.7.32 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
d4c36a62dde4 nginx:1.18.0 "/docker-entrypoint.…" 18 minutes ago Up 12 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
[root@localhost ~]#
PHP
其實(shí)也還一樣,拉取鏡像
docker pull nfqlt/php81-fpm:latest
創(chuàng)建映射目錄、文件
cd /lnmp/php-fpm mkdir logs touch php.ini touch php-fpm.conf
當(dāng)然了,php.ini這種配置文件我是萬萬不會(huì)去弄的,所以我創(chuàng)建了一個(gè)臨時(shí)容器,cp了出來哈哈,感興趣的也可以這么操作,我把命令貼出來
// 啟動(dòng)容器(不映射 php.ini 文件) docker run -d --name php81-fpm --network lnmp-network -v D:/lnmp/nginx/html:/var/www/html -v D:/lnmp/php-fpm/logs:/var/log/php-fpm nfqlt/php81-fpm:latest // 復(fù)制容器中的 php.ini 文件到本地 docker cp php81-fpm:/etc/php/8.1/fpm/php.ini D:/lnmp/php-fpm/php.ini // 停止并刪除原容器 docker stop php81-fpm docker rm php81-fpm
然后,熟悉的環(huán)節(jié),創(chuàng)建容器
docker run -d --name php81-fpm --network lnmp-network -p 9000:9000 -v D:/lnmp/nginx/html:/var/www/html -v D:/lnmp/php-fpm/php.ini:/etc/php/8.1/fpm/php.ini -v D:/lnmp/php-fpm/php-fpm.conf:/etc/php/8.1/fpm/php-fpm.conf -v D:/lnmp/php-fpm/logs/error.log:/tmp/log/error.log nfqlt/php81-fpm:latest
注:D:/lnmp/nginx/html:/var/www/html映射這個(gè)的時(shí)候是使用映射nginx的運(yùn)行目錄(D:/lnmp/nginx/html)的地址來映射,/var/www/html這個(gè)是我們上面提到的我踩的大坑,需要設(shè)置php運(yùn)行根目錄,如果搞錯(cuò)了就會(huì)導(dǎo)致無法解析php文件?。?/p>
到此這篇關(guān)于docker搭建lnmp環(huán)境的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)docker搭建lnmp環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker 使用mysqldump命令備份導(dǎo)出項(xiàng)目中的mysql數(shù)據(jù)
這篇文章主要介紹了docker 使用mysqldump命令備份導(dǎo)出項(xiàng)目中的mysql數(shù)據(jù)本文通過命令給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
Docker部署ELK7.3.0日志收集服務(wù)最佳實(shí)踐
這篇文章主要介紹了Docker部署ELK7.3.0日志收集服務(wù)最佳實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Docker安裝MySql8并遠(yuǎn)程訪問的實(shí)現(xiàn)
本文主要介紹了Docker安裝MySql8并遠(yuǎn)程訪問的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
使用Golang玩轉(zhuǎn)Docker API的實(shí)踐
這篇文章主要介紹了使用Golang玩轉(zhuǎn)Docker API的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

