1. 安裝Docker
下載地址:https://www.docker.com/get-started
下載適合M1芯片的Docker桌面程序,安裝


Docker官方維護了一個公共倉庫Docker Hub,其中已經(jīng)包括了數(shù)量上百萬的鏡像,大部分需求都可以通過在Docker Hub 中直接下載鏡像來實現(xiàn)。
接下來我們?nèi)ocker Hub上找到我們需要用到的程序(交互和Github非常相似)
了解Docker:菜鳥教程https://www.runoob.com/docker/docker-tutorial.htmlc
2. 安裝MySQL
(1)下載鏡像,注意因為是M1芯片,需要增加--platform linux/x86_64,不然會報錯如下:
docker pull mysql:5.7.36
報錯信息如下:
5.7.36: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries
所以我們重新執(zhí)行docker pull mysql:5.7.36 --platform linux/x86_64:
docker pull mysql:5.7.36 --platform linux/x86_64
5.7.36: Pulling from library/mysql
ffbb094f4f9e: Pull complete
...
6c1cb25f7525: Pull complete
Digest: sha256:d1cc87a3bd5dc07defc837bc9084f748a130606ff41923f46dec1986e0dc828d
Status: Downloaded newer image for mysql:5.7.36
docker.io/library/mysql:5.7.36
(2) 創(chuàng)建一個自定義配置路徑
mkdir -p ~/dockerconf/mysql
(3)運行一個MySQL實例:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag,其中some-mysql,您要分配給容器的名稱my-secret-pw是要為 MySQL 根用戶設(shè)置的密碼,是tag指定所需 MySQL 版本的標(biāo)簽,按照說明我們啟動一個mysql實例:
docker run --name mysql5.7 -v ~/dockerconf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.36
注意:-v ~/dockerconf/mysql:/etc/mysql/conf.d是使用你的宿主機自定義配置文件的路徑和名稱,/etc/mysql/conf.d是原默認配置路徑。
3. 安裝Nginx
(1):下載鏡像docker pull nginx,默認最新的版本
docker pull nginx
(2)創(chuàng)建Nginx的配置目錄、日志目錄、訪問根目錄
mkdir -p ~/dockerconf/nginx/conf ~/dockerconf/nginx/logs ~/dockerconf/nginx/www
(3)先啟動一個實例(方便docker cp 文件到宿主機):
docker run --name nginx -p 80:80 -d nginx
(3)從容器內(nèi)復(fù)制配置文件到宿主機,經(jīng)配置文件映射到容器內(nèi)對應(yīng)的目錄中
docker cp nginx:/etc/nginx/conf.d/default.conf ~/dockerconf/nginx/conf/default.conf
(4)#移除之前創(chuàng)建的容器,重新啟動Nginx實例,-p 為容器和宿主機創(chuàng)建端口映射,這樣本地瀏覽器可以localhost訪問80端口了
#移除之前創(chuàng)建的容器:
docker stop nginx && docker rm nginx
#重新運行實例
docker run --name nginx -p 80:80 -v ~/dockerconf/nginx/conf:/etc/nginx/conf.d -v ~/dockerconf/nginx/www:/usr/share/nginx/html -v ~/dockerconf/nginx/logs:/var/log/nginx -d nginx
4. 安裝PHP
(1)找到對應(yīng)版本鏡像下載docker pull php:7.2.34,我們用7.2的版本
docker pull php:7.2.34-fpm
(2)運行PHP實例
docker run --name php7.2 -p 9000:9000 -d php:7.2.34-fpm
(3)創(chuàng)建PHP的配置目錄、日志目錄
mkdir -p ~/dockerconf/php/conf ~/dockerconf/php/logs
(4)從容器中復(fù)制配置文件
docker cp php7.2:/usr/local/etc/php-fpm.d/www.conf ~/dockerconf/php/conf/www.conf
docker cp php7.2:/usr/local/etc/php/php.ini-production ~/dockerconf/php/conf/php.ini
(5)移除實例,重新運行實例,1.聯(lián)通PHP和Nginx兩個容器;2.映射目錄;
#移除之前創(chuàng)建的容器:
docker stop php7.2 && docker rm php7.2
#重新運行實例
docker run --name php7.2 -p 9000:9000 --link nginx:nginx -v ~/dockerconf/nginx/www:/var/www/html -v ~/dockerconf/php/conf/www.conf:/usr/local/etc/php-fpm.d/www.conf -v ~/dockerconf/php/conf/php.ini:/usr/local/etc/php/php.ini -d php:7.2.34-fpm
5. 總結(jié)
(1)常用docker命令參數(shù)
run:創(chuàng)建一個新的容器
-i 表示允許我們對容器進行操作
-t 表示在新容器內(nèi)指定一個為終端
-d 表示容器在后臺執(zhí)行
/bin/bash 這將在容器內(nèi)啟動bash shell
-p 為容器和宿主機創(chuàng)建端口映射
--name 為容器指定一個名字
-v 將容器內(nèi)路徑掛載到宿主機路徑
--privileged=true 給容器特權(quán),在掛載目錄后容器可以訪問目錄以下的文件或者目錄
--link可以用來鏈接2個容器,使得源容器(被鏈接的容器)和接收容器(主動去鏈接的容器)之間可以互相通信,解除了容器之間通信對容器IP的依賴`--link <name or id>:alias` : name和id是源容器的name和id,alias是源容器在link下的別名
(2)在宿主機想通過瀏覽器訪問Nginx容器下的端口,必須通過-p 8081:8081做端口映射(例如:端口8081),否則無法通過localhost:8081訪問端口
(3)進入容器(進入Nginx/MySQL/PHP各自的容器):
docker exec -it <容器名> bash進入容器終端并且的保留為容器終端的輸入形式(-it和bash的結(jié)合作用)
官方解釋:
exec: Run a command in a running container(在運行的容器中運行命令)
exec -i: --interactive(相互作用的) Keep STDIN open even if not attached(即使沒有連接,也要保持STDIN打開)
exec -t: --tty Allocate a pseudo-TTY(分配一個 冒充的終端設(shè)備)
參考資料:
https://gitee.com/phprao/dnmp2
https://www.cnblogs.com/xingxia/p/docker_php.html
https://gitee.com/hyperions/docker-php
https://hub.docker.com/r/2233466866/lnmp
//同事小吳的記錄
https://www.yuque.com/docs/share/1ec0b921-10dd-4b53-8bd9-26f3e872e3da?#(密碼:impc) 《Docker筆記》