Docker運行
本教程中沒有拉取Nginx的鏡像,可以用來調試或者使用宿主機上的nginx進行反向代理映射出來的端口
流程
一、拉取mysql鏡像,配置運行容器
二、拉取redis鏡像、配置運行容器
三、制作swoole運行鏡像執(zhí)行docker build
四、運行swoole環(huán)境鏡像,配置映射文件啟動容器
五、進入swoole環(huán)境容器,啟動項目,在宿主機嘗試訪問
Docker鏡像加速器
點擊鏈接使用支付寶登錄后就能看到加速器地址和操作方法
https://cr.console.aliyun.com/cn-beijing/instances/mirrors
Dockerfile
根目錄下沒有Dockerfile的可以復制下面的命令
FROM leekay0218/crmeb-pro
## 復制代碼 在本地調試注釋掉,使用映射把文件映射進去
#ADD ./ /var/www
# 設置容器啟動后的默認運行目錄
WORKDIR /var/www
# 默認入口命令
ENTRYPOINT ["/entrypoint.sh"]
#本地調試進入容器后手動執(zhí)行命令,如果是部署項目的話可以打開注釋
#CMD ["php", "think", "swoole"]
windows下運行
安裝Docker
安裝Mysql鏡像
docker pull mysql:5.7
1. 創(chuàng)建一個my.cnf文件,方便修改配置
1、創(chuàng)建一個my.cnf文件,方便修改配置
創(chuàng)建目錄:d:docker-image/mysql/my.cnf,寫入以下內容
[mysqld]
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2、創(chuàng)建MYSQL容器
docker run -p 3316:3306 --name mysql01 -v D:\docker-image\mysql\my.cnf:/etc/mysql/my.conf.d/mysqld.cnf -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
參數(shù)解釋:
—name mysql01 容器名稱
-p 3316:3306 映射到宿主機的端口
-v D:\docker-image\mysql\my.cnf:/etc/mysql/mysql.conf.d/my.cnf 映射宿主機的mysql配置到容器中
-e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root 指定環(huán)境變量
-d mysql:5.7 鏡像名稱
3. 進入容器
docker exec -it mysql01 /bin/bash
4、查看hosts文件內的ip
cat /etc/hosts
如圖,圖中172.17.0.4就是容器內的ip地址
5. 更改程序中的mysql配置
密碼和數(shù)據庫名記得修改
6. 在容器中嘗試進入mysql命令行
輸入mysql的密碼
mysql -uroot -p
如遇到如下問題(這里指的是警告錯誤,不是密碼沒有的錯誤):
執(zhí)行命令:
chmod 644 /etc/mysql/mysql.conf.d/mysqld.cnf
再次嘗試連接mysql
安裝Redis鏡像
docker pull redis:latest
1. 配置redis.conf,l可以去官網下載一個redis的安裝包把里面的redis.conf配置文件復制出來放在自己常用的地址中,這里存放在D:docker-image/redis/redis.conf中。修改
bind 0.0.0.0 #改成0.0.0.0,使redis可以外部訪問
daemonize no #用守護線程的方式啟動
requirepass 你的密碼 #給redis設置密碼
appendonly yes #redis持久化 默認是no
2. 創(chuàng)建redis存儲文件夾
D:docker-image/redis/data
3. 運行redis鏡像
docker run -itd -p 6380:6379 --name redis1 -v D:\docker-image\redis\redis.conf:/etc/redis/redis.conf -v D:\docker-image\redis\data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
解釋:
-p 把容器內部的6379映射到宿主機內的6380,方便測試redis是否啟動成功
-name 設置當前容器的名稱
-v 映射配置
-d 鏡像名稱
4.進入容器
進入容器
docker exec -it redis1 /bin/bash
5.查看hosts文件;執(zhí)行:cat /etc/hosts,找到當前容器對外的ip地址填寫在redis的REDIS_HOSTNAME上
查看hosts命令
cat /etc/hosts
6. 在第一步中設置的密碼記得填寫進來
制作SWOOLE運行鏡像
1. 進入到項目根目錄看到Dockerfile文件后在當前目錄打開命令行
執(zhí)行命令,后面的點,一定不能缺少;創(chuàng)建一個叫:pro的鏡像
鏡像內php版本為7.4版本
docker build -t pro .
2. 運行鏡像
docker run -itd -p 20199:20199 --name pro_test1 -v D:\WWW\CRMEB_PRO\crmeb_pro:/var/www pro
解釋:
-v D:\WWW\CRMEB_PRO\crmeb_pro:/var/www 把本地D:\WWW\CRMEB_PRO\crmeb_pro下的文件映射到容器中的/var/www目錄中這樣就改了本地的文件容器內的就自動變
—name 容器名稱
-p 20199:20199 映射端口
最后的參數(shù):pro是鏡像的名稱
3. 進入容器啟動項目
pro_test1是上一步給容器設置的名稱,其他都是固定格式
docker exec -it pro_test1 /bin/bash
啟動項目:
php think swoole
在容器中使用熱更新,可能會報如下錯誤,可以關閉熱更新,改文件后手動重啟下swoole
關閉熱更新:
錯誤圖:
linux下運行
幾乎和在window上運行起來差不多的流程。
拉取mysql鏡像
docker pull mysql:5.7
啟動mysql容器(啟動的配置映射文件需要自己創(chuàng)建)
docker run -p 3316:3306 --name mysql_pro -v "$PWD/mysql.cnf":/etc/mysql/mysql.cnf -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
進入容器嘗試連接mysql
docker exec -it mysql_pro /bin/bash
查看容器分配ip
cat /etc/hosts
拉取redis鏡像
docker pull redis:latest
啟動容器
docker run -itd -p 6380:6379 --name redis_pro -v "$PWD/redis.conf":/etc/redis/redis.conf -v "$PWD/data":/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
進入容器嘗試連接redis
docker exec -it redis_pro /bin/bash
創(chuàng)建pro鏡像(如果沒有Dockerfile請先自己創(chuàng)建一個,內容在頂部)
docker build -t pro_s .
運行容器
$PWD屬于當前目錄的絕對路徑,如果打開了Dockerfile中的ADD可以不用使用-v把文件映射進入容器
docker run -itd -p:20199:20199 --name pro_s -v "$PWD/":/var/www pro
配置mysql和redis賬號密碼(記得查看redis分配的ip地址,和查看mysql的命令一樣)
vim .env
進入容器
docker exec -it pro_s /bin/bash
啟動服務
php think swoole
新打開一個命令行驗證是否成功
curl -v 127.0.0.1:20199
停掉swoole后在執(zhí)行:curl命令證明運行成功
查看鏡像:
docker images
查看正在運行的容器(無法查看到啟動失敗的容器):
docker ps
查看所有容器(可以查看到啟動失敗的容器):
docker ps -a
查看容器日志(用來檢查容器無法啟動的問題):
docker logs 容器id或者容器名稱
刪除容器:
docker rm 容器id或者容器名稱
啟動容器:
docker start 容器id或者容器名稱
刪除鏡像:
docker rmi 鏡像名稱或者id
刪除正在運行的鏡像
docker rmi -f 鏡像名稱或者id