{{wikiTitle}}
Docker运行
目录:
Docker运行
本教程中没有拉取Nginx的镜像,可以用来调试或者使用宿主机上的nginx进行反向代理映射出来的端口
流程
一、拉取mysql镜像,配置运行容器
二、拉取redis镜像、配置运行容器
三、制作swoole运行镜像执行docker build
四、运行swoole环境镜像,配置映射文件启动容器
五、进入swoole环境容器,启动项目,在宿主机尝试访问
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"]
#本地调试进入容器后手动执行命令,如果是部署项目的话可以打开注释
#CMD ["php", "think", "swoole"]
windows下运行
安装Docker
安装Mysql镜像
docker pull mysql:5.7
1. 创建一个my.cnf文件,方便修改配置
创建目录:d:docker-image/mysql/mysql.cnf,写入以下内容
[mysqld]
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2. 创建MYSQL容器
docker run -p 3316:3306 --name mysql01 -v D:\docker-image\mysql\my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
参数解释:
—name mysql01 容器名称
-p 3316:3306 映射到宿主机的端口
-v D:\docker-image\mysql\my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf 映射宿主机的mysql配置到容器中
-e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root 指定环境变量
-d mysql:5.7 镜像名称
3. 进入容器
docker exec -it mysql01 /bin/bash
4. 查看hosts文件内的ip
cat /etc/hosts
如图,图中172.17.0.4就是容器内的ip地址
5. 更改程序中的mysql配置
密码和数据库名记得修改
6. 在容器中尝试进入mysql命令行
输入mysql的密码
mysql -uroot -p
如遇到如下问题(这里指的是警告错误,不是密码没有的错误):
执行命令:
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. 创建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文件;执行:cat /etc/hosts,找到当前容器对外的ip地址填写在redis的REDIS_HOSTNAME上
查看hosts命令
cat /etc/hosts
6. 在第一步中设置的密码记得填写进来
如果根目录下没有.env配置文件复制如下配置自行创建一个.env文件
APP_DEBUG = false
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 172.17.0.3
DATABASE = pro
USERNAME = root
PASSWORD = root
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
[LANG]
default_lang = zh-cn
[REDIS]
REDIS_HOSTNAME = 172.17.0.2
PORT = 6379
REDIS_PASSWORD = 123123
SELECT = 0
注意文件名称叫:.env
文件是点开头的一定需要注意不能和env混为一谈
制作SWOOLE运行镜像
1. 进入到项目根目录看到Dockerfile文件后在当前目录打开命令行
执行命令,后面的点,一定不能缺少;创建一个叫: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 映射端口
最后的参数:pro是镜像的名称
3. 进入容器启动项目
pro_test1是上一步给容器设置的名称,其他都是固定格式
docker exec -it pro_test1 /bin/bash
启动项目:
php think swoole
在容器中使用热更新,可能会报如下错误,可以关闭热更新,改文件后手动重启下swoole
关闭热更新:
错误图:
运行成功后需要手动导入SQL,手动创建public/install/install.lock
linux下运行
几乎和在window上运行起来差不多的流程。
拉取mysql镜像
docker pull mysql:5.7
启动mysql容器(启动的配置映射文件需要自己创建)
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
创建pro镜像(如果没有Dockerfile请先自己创建一个,内容在顶部)
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后在执行:curl命令证明运行成功
查看镜像:
docker images
查看正在运行的容器(无法查看到启动失败的容器):
docker ps
查看所有容器(可以查看到启动失败的容器):
docker ps -a
查看容器日志(用来检查容器无法启动的问题):
docker logs 容器id或者容器名称
删除容器:
docker rm 容器id或者容器名称
启动容器:
docker start 容器id或者容器名称
删除镜像:
docker rmi 镜像名称或者id
删除正在运行的镜像
docker rmi -f 镜像名称或者id