溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mac中Docker如何配置LNMP開發(fā)環(huán)境

發(fā)布時(shí)間:2021-07-05 13:43:41 來源:億速云 閱讀:267 作者:小新 欄目:編程語言

小編給大家分享一下Mac中Docker如何配置LNMP開發(fā)環(huán)境,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

Mac下Docker配置LNMP開發(fā)環(huán)境的方法:1、安裝Docker;2、配置安裝環(huán)境;3、安裝Mysql5.7;4、安裝php7.4.5;5、安裝nginx1.16.1;6、配置docker-compose。

本文操作環(huán)境:macOS10.15系統(tǒng)、php7.4.5版,MacBook Air 2019電腦

Mac下Docker配置LNMP開發(fā)環(huán)境

前言:
1.Docker的標(biāo)準(zhǔn)用法是每個(gè)docker容器只提供一個(gè)服務(wù)。
所以應(yīng)該是mysql單獨(dú)一個(gè)容器,php-fpm單獨(dú)一個(gè)容器,nginx單獨(dú)一個(gè)容器。

2.Docker的設(shè)計(jì)理念是在容器里面不運(yùn)行后臺(tái)服務(wù),容器本身就是宿主機(jī)上的一個(gè)獨(dú)立的主進(jìn)程,也可以間接的理解為就是容器里運(yùn)行服務(wù)的應(yīng)用進(jìn)程。一個(gè)容器的生命周期是圍繞這個(gè)主進(jìn)程存在的,所以正確的使用容器方法是將里面的服務(wù)運(yùn)行在前臺(tái)。

1.安裝Docker

下載安裝

下載地址  https://download.docker.com/mac/stable/Docker.dmg

配置鏡像加速

Preferences >> Docker Engine

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

查看配置狀態(tài)
docker info

2.配置安裝環(huán)境

安裝centos (可跳過)

查看鏡像版本 https://hub.docker.com/_/centos?tab=tags
拉取鏡像

docker pull centos:centos7.8.2003

查看鏡像

docker images

建立容器

docker run -v /data:/docker_data -p 80:80 -itd --privileged=true centos:v0.0.1 /usr/sbin/init
// -v 掛載路徑 本地/data掛載到容器的/docker_data路徑
// -p 端口映射
// -i 允許你對(duì)容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進(jìn)行交互
// -t 在新容器內(nèi)指定一個(gè)偽終端或終端
// -d 在后臺(tái)運(yùn)行
// --privileged=true 以特權(quán)模式運(yùn)行容器(可以運(yùn)行后臺(tái)服務(wù))

查看容器

docker ps // -l 查看歷史容器

進(jìn)入容器

docker exec -it 46e9810a35e6 bash

更新鏡像(提交容器副本)

docker commit -m "test update" 21e09cfcc692 centos:test

刪除鏡像

docker rmi centos:test

問題1:unable to remove repository reference "centos:test" (must force) - container 46e9810a35e6 is using its referenced image 5b5eb956a405
解決:查看并刪除歷史鏡像

docker ps -l
docker rm 46e9810a35e6

安裝Mysql5.7

拉取鏡像

docker pull mysql:5.7

創(chuàng)建容器

docker run -p 3306:3306 --name mysql_test -v ~/Docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d --privileged=true mysql:5.7

命令說明

-p 3306:3306:將容器的3306端口映射到主機(jī)的3306端口
-v PWD/mysql/data:/var/lib/mysql:將主機(jī)當(dāng)前目錄下的mysql/data文件夾掛載到容器的/var/lib/mysql 下,在mysql容器中產(chǎn)生的數(shù)據(jù)就會(huì)保存在本機(jī)mysql/data目錄下(路徑會(huì)自動(dòng)創(chuàng)建)
-e MYSQL_ROOT_PASSWORD=passwd:初始化root用戶的密碼
-d 后臺(tái)運(yùn)行容器
--name 給容器指定別名
--privileged=true centos7 可能會(huì)碰到權(quán)限問題,需要加參數(shù)

進(jìn)入容器

docker exec -it mysql_test /bin/bash

docker加sudo的方法

1.創(chuàng)建docker組:sudo groupadd docker
2.將當(dāng)前用戶加入docker組:sudo gpasswd -a ${USER} docker
3.重啟服務(wù):sudo service docker restart
4.刷新docker成員:newgrp - docker

Mac下

#查看用戶組:
dscl . list /groups
#添加用戶組:
sudo dscl . -create /Groups/docker
添加user到group:
sudo dscl . -append /Groups/docker GroupMembership username

安裝php7.4.5

拉取鏡像

docker pull php:7.4.5-fpm

創(chuàng)建Dockerfile

vim Dockerfile

FROM  php:7.4.5-fpm
 RUN apt-get update && apt-get install -y \
 libfreetype6-dev \
 libjpeg62-turbo-dev \
 libpng12*-dev \
 && docker-php-ext-enable opcache \
 && docker-php-ext-install pdo_mysql \
 && docker-php-ext-install gd \

構(gòu)造鏡像

docker build -t="php:7.4.5v2" .

啟動(dòng)

docker run -d -p 9000:9000 -v /var/www/html/:/var/www/html/ --name php-with-mysql --link mysql_test:mysql  --volumes-from mysql_test --privileged=true php-fpm5.6/v2

命令說明

-v 將本地磁盤上的php代碼掛載到docker 環(huán)境中,對(duì)應(yīng)docker的目錄是 /var/www/html/ 
--name 新建的容器名稱 php-with-mysql
--link 鏈接的容器,鏈接的容器名稱:在該容器中的別名,運(yùn)行這個(gè)容器是,docker中會(huì)自動(dòng)添加一個(gè)host識(shí)別被鏈接的容器ip
--privileged=true 權(quán)限問題

備注

nproc內(nèi)核參數(shù),是系統(tǒng)上的最大進(jìn)程數(shù)。
$(nproc)是獲取安裝系統(tǒng)的該內(nèi)核參數(shù)。常用的還有獲取文件路徑的命令$(pwd)

擴(kuò)展相關(guān)

# 查看已開啟擴(kuò)展
php -m
# 查看現(xiàn)有可以啟動(dòng)的擴(kuò)展
ls /usr/local/lib/php/extensions/no-debug-non-zts-20190902/
# 啟動(dòng)擴(kuò)展
docker-php-ext-enable opcache
# 安裝并啟動(dòng)擴(kuò)展

參考 Docker php安裝擴(kuò)展步驟詳解

安裝nginx1.16.1

拉取鏡像

docker pull nginx:1.16.1

創(chuàng)建容器

docker run -d --link php-with-mysql:phpfpm --volumes-from php-with-mysql -p 80:80 -v /var/www/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf --name nginx-php --privileged=true  nginx

命令說明

--link php-with-mysql:phpfpm 將php容器鏈接到nginx容器里來,phpfpm是nginx容器里的別名。
--volumes-from php-with-mysql 將php-with-mysql 容器掛載的文件也同樣掛載到nginx容器中
-v /var/www/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf  將nginx 的配置文件替換,掛載本地編寫的配置文件

默認(rèn)配置

vim default.conf

server {
        listen       80;
        server_name  localhost;

        location / {
            root   /var/www/html;
            index  index.html index.htm index.php; # 增加index.php
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /var/www/html;
        }
        location ~ \.php$ {
            root           /var/www/html; # 代碼目錄
            fastcgi_pass   phpfpm:9000;    # 修改為phpfpm容器
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # 修改為$document_root
            include        fastcgi_params;
        }
    }

配置docker-compose

文件結(jié)構(gòu) tree

.
├── docker-compose.yml
├── mysql
│   └── Dockerfile
├── nginx
│   ├── Dockerfile
│   └── conf
│       └── default.conf
├── phpfpm
│   └── Dockerfile
└── res
    └── index.php

YAML配置

vim docker-compose.yml 

nginx:
  build: ./nginx
  ports:
    - "80:80"
  links:
    - "phpfpm"
  volumes:
    - /Users/majun/docker/res:/var/www/html
    - /Users/majun/docker/nginx/conf:/etc/nginx/conf.d
phpfpm:
  build: ./phpfpm
  ports:
    - "9000:9000"
  volumes:
    - /Users/majun/docker/res:/var/www/html
  links:
    - "mysql"
mysql:
  build: ./mysql
  ports:
    - "3306:3306"
  volumes:
    - /Users/majun/docker/mysql/data:/var/lib/mysql
  environment:
    MYSQL_ROOT_PASSWORD : root

Mysql Dockerfile

FROM mysql:5.7

Nginx Dockerfile

FROM nginx:1.16.1

PHPFPM Dockerfile (這里直接用上面build過的鏡像了)

FROM php:7.4.5v2

PHP連接Mysql測(cè)試

vim index.php

//PDO中的預(yù)處理1:sql語句中是: (別名的方式)的
header("Content-type:text/html;charset=utf-8");
//實(shí)例化PDO
try{
    $pdo = new PDO(
        "mysql:host=mysql;dbname=test",
        "root",
        "root"
    );
}catch(PDOException $pe){
    die("PDO實(shí)例失?。≡颍?quot;.$pe->getMessage());
}
//定義sql語句
$sql = "select * from test";
//預(yù)處理sql
$stmt = $pdo->prepare($sql);
//執(zhí)行
$stmt->execute();
// 獲取多條數(shù)據(jù)
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($res);

備注 host需要寫mysql容器名稱

運(yùn)行

docker-compose up -d

其他

安裝redis

拉取鏡像

docker pull redis

創(chuàng)建容器

docker run -itd -p 6379:6379 redis

進(jìn)入容器調(diào)試

# redis-cli
127.0.0.1:6379> set name 1
OK
127.0.0.1:6379> get name
"1"

看完了這篇文章,相信你對(duì)“Mac中Docker如何配置LNMP開發(fā)環(huán)境”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI