简单理解docker:docker 是一个开源的应用容器引擎,就像虚拟机,可以在它上面跑应用服务(container),而生成应用服务的就叫镜像(image)。
1、首先得安装docker,安装最新的看官方文档:https://docs.docker.com/engine/install/centos/
2、然后得熟练使用docker基本的命令,推荐:https://blog.csphere.cn/archives/22或者https://blog.csdn.net/HH2030/article/details/80994237
#主要熟练使用这几个命令 docker images # 显示本地所有的镜像列表 docker pull # 从仓库下载镜像到本地 docker rmi # 删除一个镜像 docker run # 创建并启动一个容器,本地有就启动,没有就获取docker hub的 docker start # 启动一个停止状态的容器 docker stop # 停止容器运行 docker rm # 删除一个容器 docker attach # 连接(进入)到一个正在运行的容器(推出后容器停止) docker exec# 连接(进入)到一个正在运行的容器(推出后容器不停止) #docker run重点参数 -i: 交互式操作 -t: 终端 -p:端口 -v:挂载 -d:后台执行
-w:设置工作目录
-e:设置环境变量
3、docker安装lamp环境,我最初的想象是docker分别拉取apache、php、mysql,然后通过docker-compose将它们关联依赖起来,或者是基于别人的lamp镜像进行改造,后面发现实现过程太过复杂不适合快速构建这个词和安装自己想要的php版本,然后就在官方提供的php镜像里发现有php+apache的变体,这样就解决php和apache的关联了,所以还是要多看官方文档,你想到的东西官方一般都能想到。
4、访问docker hub官网:https://hub.docker.com/,搜索php,选择官方的镜像,可以发现,php提供php脚本镜像外,还提供了4个变体,分别是cli、apache、fpm、alpine,拉取方法就是php:版本号-变体名称,比如这次想要php7.1.33版本
docker pull php:7.1.33-apache
图示:
5:拉取到镜像后,就是运行了,运行对象可以是镜像名+TAG或者IMAGE ID,一般选择后者,因为唯一,本次先运行个临时容器
docker run -d -p 80:80 --rm --name php_apache b9858ffdd4d2
#参数解释:-d后台运行。-p 80:80:映射端口。--rm:容器停止后自动删除容器,因为是临时容器,所以得加省了手动删除容器。--name:php_apache:自定义命名容器为php_apache。b9858ffdd4d2:镜像ID
此时已经是可以访问自己的ip,apache生效了,不过报403错误
6、连接容器,我们可以先连接容器进去看看,退出容器的时候输入exit或者Ctrl+d
docker exec -it 7853e6833a30 bash #exec:退出连接后不会停止容器。-it:以终端形式进行交互式操作,就是可以在最后面加命令。7853e6833a30:容器ID。bash:我们希望有个交互式 Shell,因此用的是bash,或者/bin/bash
7、复制容器里的一些目录文件出来本地,方便挂载和修改,比如存放网页项目的目录,apache的配置、日志那些都可以复制出来本地,这样才可以使容器轻量,这里仅复制/etc/apache2/conf-available目录做参考
docker cp 7853e6833a30:/etc/apache2/conf-available "$PWD"/conf
可以看到当前目录下新增conf文件,修改里面的docker-php.conf文件,新加test.php保存退出
8、当前目录新建一个html目录,在里面新建一test.php文件并加上一些php代码比如phpinfo()
9、停止临时容器
docker stop 7853e6833a30
停止后发现docker ps和docker ps -a都没有容器了
10、运行新容器,并挂载html目录和conf目录
docker run -d -p 80:80 --name my_php_apache -v "$PWD"/conf:/etc/apache2/conf-available -v "$PWD"/html:/var/www/html b9858ffdd4d2 #-v 本地路径:服务路径
11、浏览器查看就可以发现test.php生效了,证明配置的apache也生效了
12、mysql容器的安装可以看官方介绍:https://hub.docker.com/_/mysql,除了在生成容器的时候要配置密码,其他需要注意的就是配置问题了
13、修改test.php连接数据库,发现php没有mysqli扩展,接下来安装php的mysqli扩展。官方文档都详细介绍了各种安装扩展的辅助脚本,不过都是基于Dockerfile文件开始构建的,本次要在建好的容器上加,可以用docker-php-ext-install脚本:https://github.com/mlocati/docker-php-extension-installer,它基本满足日常所需的php扩展,而且安装过程简单。
首先下载该脚本,保证最新
wget https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions
然后把它复制到容器里面去
docker cp "$PWD"/install-php-extensions 76d948c73e70:/usr/bin/
最后连上容器给它个权限,就可以install-php-extensions 扩展名 来安装php扩展了
14、php查看扩展可用php -m,查看配置文件php --ini,发现Loaded Configuration File为none时要配置一个php.ini
cp "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"