1. 安裝Docker
下載地址:https://www.docker.com/get-started
下載適合M1芯片的Docker桌面程序,安裝
Docker官方維護(hù)了一個(gè)公共倉(cāng)庫(kù)Docker Hub,其中已經(jīng)包括了數(shù)量上百萬(wàn)的鏡像配椭,大部分需求都可以通過(guò)在Docker Hub 中直接下載鏡像來(lái)實(shí)現(xiàn)敦姻。
接下來(lái)我們?nèi)ocker Hub上找到我們需要用到的程序(交互和Github非常相似)
了解Docker:菜鳥教程https://www.runoob.com/docker/docker-tutorial.htmlc
2. 安裝MySQL
(1)下載鏡像镰惦,注意因?yàn)槭荕1芯片茵瘾,需要增加--platform linux/x86_64
祈惶,不然會(huì)報(bào)錯(cuò)如下:
docker pull mysql:5.7.36
報(bào)錯(cuò)信息如下:
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)建一個(gè)自定義配置路徑
mkdir -p ~/dockerconf/mysql
(3)運(yùn)行一個(gè)MySQL實(shí)例: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)簽误墓,按照說(shuō)明我們啟動(dòng)一個(gè)mysql實(shí)例:
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
是使用你的宿主機(jī)自定義配置文件的路徑和名稱,/etc/mysql/conf.d
是原默認(rèn)配置路徑恼琼。
3. 安裝Nginx
(1):下載鏡像docker pull nginx
蛙卤,默認(rèn)最新的版本
docker pull nginx
(2)創(chuàng)建Nginx的配置目錄乐严、日志目錄、訪問(wèn)根目錄
mkdir -p ~/dockerconf/nginx/conf ~/dockerconf/nginx/logs ~/dockerconf/nginx/www
(3)先啟動(dòng)一個(gè)實(shí)例(方便docker cp 文件到宿主機(jī)):
docker run --name nginx -p 80:80 -d nginx
(3)從容器內(nèi)復(fù)制配置文件到宿主機(jī)占婉,經(jīng)配置文件映射到容器內(nèi)對(duì)應(yīng)的目錄中
docker cp nginx:/etc/nginx/conf.d/default.conf ~/dockerconf/nginx/conf/default.conf
(4)#移除之前創(chuàng)建的容器简僧,重新啟動(dòng)Nginx實(shí)例岛马,-p 為容器和宿主機(jī)創(chuàng)建端口映射
夏志,這樣本地瀏覽器可以localhost訪問(wèn)80端口了
#移除之前創(chuàng)建的容器:
docker stop nginx && docker rm nginx
#重新運(yùn)行實(shí)例
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)找到對(duì)應(yīng)版本鏡像下載docker pull php:7.2.34
,我們用7.2的版本
docker pull php:7.2.34-fpm
(2)運(yùn)行PHP實(shí)例
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)移除實(shí)例甥捺,重新運(yùn)行實(shí)例皿曲,1.聯(lián)通PHP和Nginx兩個(gè)容器劫樟;2.映射目錄吃粒;
#移除之前創(chuàng)建的容器:
docker stop php7.2 && docker rm php7.2
#重新運(yùn)行實(shí)例
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)建一個(gè)新的容器
-i 表示允許我們對(duì)容器進(jìn)行操作
-t 表示在新容器內(nèi)指定一個(gè)為終端
-d 表示容器在后臺(tái)執(zhí)行
/bin/bash 這將在容器內(nèi)啟動(dòng)bash shell
-p 為容器和宿主機(jī)創(chuàng)建端口映射
--name 為容器指定一個(gè)名字
-v 將容器內(nèi)路徑掛載到宿主機(jī)路徑
--privileged=true 給容器特權(quán),在掛載目錄后容器可以訪問(wèn)目錄以下的文件或者目錄
--link可以用來(lái)鏈接2個(gè)容器扎酷,使得源容器(被鏈接的容器)和接收容器(主動(dòng)去鏈接的容器)之間可以互相通信,解除了容器之間通信對(duì)容器IP的依賴`--link <name or id>:alias` : name和id是源容器的name和id,alias是源容器在link下的別名
(2)在宿主機(jī)想通過(guò)瀏覽器訪問(wèn)Nginx容器下的端口,必須通過(guò)-p 8081:8081
做端口映射(例如:端口8081)帝蒿,否則無(wú)法通過(guò)localhost:8081
訪問(wèn)端口
(3)進(jìn)入容器(進(jìn)入Nginx/MySQL/PHP各自的容器):
docker exec -it <容器名> bash
進(jìn)入容器終端并且的保留為容器終端的輸入形式(-it和bash的結(jié)合作用)
官方解釋:
exec: Run a command in a running container(在運(yùn)行的容器中運(yùn)行命令)
exec -i: --interactive(相互作用的) Keep STDIN open even if not attached(即使沒(méi)有連接荐糜,也要保持STDIN打開)
exec -t: --tty Allocate a pseudo-TTY(分配一個(gè) 冒充的終端設(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筆記》