概述
此教程在VMware虚拟机中的Ubuntu系统下实验通过,因为在Windows系统下无法完美将VMware和Docker同时运行,所以有了这种“曲线救国”的办法,适合需要快速切换或同时运行不同版本PHP环境的开发需求。
安装Docker
此处Docker安装过程参考 菜鸟教程
卸载旧版本
Docker 的旧版本被称为 docker
,docker.io
或 docker-engine
。如果已安装,请卸载它们:
$ sudo apt-get remove docker docker-engine docker.io containerd runc |
使用 Docker 仓库进行安装:在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker 。
设置仓库
更新 apt 包索引:
$ sudo apt-get update |
安装 apt 依赖包,用于通过HTTPS来获取仓库:
$ sudo apt-get install \ |
添加 Docker 的官方 GPG 密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - |
验证您现在是否拥有带有指纹的密钥:
指纹为:9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
, 通过搜索指纹的后8个字符:
$ sudo apt-key fingerprint 0EBFCD88 |
设置稳定版仓库:
$ sudo add-apt-repository \ |
安装 Docker Engine-Community
更新 apt 包索引:
$ sudo apt-get update |
安装最新版本的 Docker Engine-Community
和 containerd
:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io |
换源
可以换成国内源DaoCloud,地址:https://www.daocloud.io/mirror
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io |
安装 eriksencosta/php-dev
docker 运行的时候需要root权限,所以非root用户需要添加 sudo
运行
下载镜像
$ sudo docker pull eriksencosta/php-dev |
运行容器
运行容器时有两种方式
方式一
官方方式,最后没有 /bin/bash
:
$ sudo docker run -i -t -p 88:80 -v ~/test:/var/www -d "eriksencosta/php-dev:latest" |
对参数解释如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-i
打开STDIN,用于控制台交互
-t
分配tty设备,该可以支持终端登录
-p
设定映射的端口(即指定容器暴露的端口):宿主机端口:容器内端口
-v
给容器挂载存储卷,挂载到容器的某个目录:宿主机位置:容器内位置
。像上面的命令,容器内打开/var/www
文件夹,里面的内容就是宿主机~/test
目录里的内容。而且如果更改宿主机~/test
目录里的内容,容器内对应的文件会马上同步更改!
-d
指定容器在后台运行
"eriksencosta/php-dev:latest"
为需要启动的IMAGE
方法二
命令最后添加 /bin/bash
:
$ sudo docker run -i -t -p 88:80 -v ~/test:/var/www -d "eriksencosta/php-dev:latest" /bin/bash |
两种方式的区别
①方法一
命令最后不添加 /bin/bash
时,如果要进入容器内部需要使用命令:
# <CONTAINER ID>是一个整体,实际情况中是一串整数,替换后不带< > |
②方法二
命令最后添加 /bin/bash
时,如果要进入容器内部使用命令:
# <CONTAINER ID>是一个整体,实际情况中是一串整数,替换后不带< > |
无论哪一种方法,创建后就可以在虚拟机的Ubuntu内使用 localhost:88
进行访问;在虚拟机外使用 虚拟机IP:88
进行访问(需提前将虚拟机网络设置成桥接模式)。
更换PHP版本
首先进入到容器内
查看可用的PHP版本:
$ phpenv versions # version + s |
更换使用的PHP版本:
$ phpenv global <版本> |
Tips:每次重启容器后都需要手动启动webserver,进入容器执行命令:
$ webserver start |
Docker其它常用命令
查看正在运行的容器:
$ sudo docker ps -a |
停止一个正在运行的容器:
$ sudo docker stop <CONTAINER ID> |
删除一个容器(删除前需要先停止运行):
$ sudo docker rm <CONTAINER ID> |
查看已经下载的IMAGE:
$ sudo docker image ls |
删除一个已经下载的IMAGE:
$ sudo docker image rm <REPOSITORY> |
进入一个容器:
# 命令最后无 '/bin/bash',使用ps命令查看COMMAND为"/usr/local/bin/webs…" |
退出容器:
# 退出一个容器,并结束运行该容器,使其变成Exited状态 |