本地开发环境是影响工作效率最重要的因素(还有一个是IDE,以后有时间会专门写这个)
一般来说有以下几种方案可以选择
- 原生安装 这个是最原始也是最麻烦的,比如搞PHP,要自己装nginx+php+mysql+redis 搞不好还得装个node、composer、memcached。这个搞法基本上熟练也得一天出去了。Mac还好,Windows就要无尽的google了。
- 虚拟机 这个有两种方案,我都尝试过,一种是用VM,安个centos,这种方法和原生安装差不多,也比较折腾,另外VM虚拟机占用系统资源太大,每次开机都比较慢。另一种就是用vargrant,这个方法的好处是比较轻,开机快。但是终究是虚拟机,最大的问题就是目录共享问题,造成无法正常安装node,总之各种坑
- Docker 最终选择了Docker的方案。Docker基本上是集合了上面的所有优点了,他自身最大的好处就是想用的时候拉起来,不想用的时候干掉,数据和容器是分开的。另外镜像都是官方的,稳定,靠谱。缺点也是有的,就是底层其实还是用的linux,所以在windows上跑不大稳定。
我目前用的方案是
centos7 官方镜像 里面安装了 nginx php node
mysql 官方镜像
redis 官方镜像
这样一共需要运行三个容器,数据都-v 到本地磁盘,容器干掉了数据也不丢失。
常用命令
镜像
搜索镜像
$ docker search xxx
如果出现 connection refused 可以试试重启docker
下载镜像
$ docker pull xxx
删除镜像
$ docker rmi xxx
本地容器保存快照 生成镜像压缩文件
$ docker export -o dev-latest.tar 7e4b0
导入镜像
$
保存镜像
$ docker save -o redis-latest.tar 9813
容器导入 是将当前容器 变成一个新的镜像
镜像导入 是复制的过程
save 保存镜像所有的信息-包含历史
export 只导出当前的信息
容器
查看当前运行的容器
$ docker ps
$ docker ps -a
$ docker stats
$ docker top
查看当前docker版本
$ docker info
运行容器
$ docker run -d [-p 主机端口:容器端口] --name [容器名自定义] [-v 主机/目录:容器/目录] [镜像名]
例如
centos
$ docker run -d -p 80:80 --name dev -v D:/docker/dev/www:/home/www centos
redis$ docker run -d -p 6379:6379 --name dev-redis -v D:/docker/redis/data:/data redis
mysql
$ docker run --name dev-mysql -v D:/docker/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -d mysql
停止 开启 重启
$ docker stop
$ docker start
$ docker restart
删除容器
$ docker rm
如果有自己的仓库可以
$ docker login -u 用户名 -p 密码 仓库地址
进入容器
$ docker exec -it [容器名] /bin/bash
如果碰到开机报错:
Docker command did not complete within the allowed timeout. Output:
可能是windows 防火墙问题
在防火墙里放开下面这俩exeC:\Program Files\Docker\Docker\Docker for Windows.exe
C:\Program Files\Docker\Docker\DockerCli.exe
PS 如果发现容器里面挂载的目录不见了
但是执行 docker inspect 发现这个配置其实是有的
那么 可能是挂载的主机磁盘没有写权限 改完后重启试试
容器间通信
默认可以用内网IP通信 网段是 172.17.0.1...
可以通过下面的命令查看容器IP
$ docker inspect --format='{{.NetworkSettings.IPAddress}}' CONTAINER_ID
这里注意 容器的IP是根据启动顺序来的,不是一直固定的,所以启动的时候最好有一定顺序,避免老去改配置的麻烦