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

下载链接:https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe?utm_source=docker&utm_medium=webreferral&utm_campaign=dd-smartbutton&utm_location=module

安装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. 在第一步中设置的密码记得填写进来

制作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

关闭热更新:

错误图:

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
本页目录