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