用Dockers搭建本地开发环境

本地开发环境是影响工做效率最重要的因素(还有一个是IDE,之后有时间会专门写这个)php

通常来讲有如下几种方案能够选择node

  • 原生安装 这个是最原始也是最麻烦的,好比搞PHP,要本身装nginx+php+mysql+redis 搞很差还得装个node、composer、memcached。这个搞法基本上熟练也得一天出去了。Mac还好,Windows就要无尽的google了。
  • 虚拟机 这个有两种方案,我都尝试过,一种是用VM,安个centos,这种方法和原生安装差很少,也比较折腾,另外VM虚拟机占用系统资源太大,每次开机都比较慢。另外一种就是用vargrant,这个方法的好处是比较轻,开机快。可是终究是虚拟机,最大的问题就是目录共享问题,形成没法正常安装node,总之各类坑
  • Docker 最终选择了Docker的方案。Docker基本上是集合了上面的全部优势了,他自身最大的好处就是想用的时候拉起来,不想用的时候干掉,数据和容器是分开的。另外镜像都是官方的,稳定,靠谱。缺点也是有的,就是底层其实仍是用的linux,因此在windows上跑不大稳定。

我目前用的方案是mysql

centos7 官方镜像 里面安装了 nginx php nodelinux

mysql 官方镜像nginx

redis 官方镜像redis

这样一共须要运行三个容器,数据都-v 到本地磁盘,容器干掉了数据也不丢失。sql

经常使用命令

镜像

搜索镜像docker

$ docker search xxxwindows

若是出现 connection refused 能够试试重启dockercentos

下载镜像

$ 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 防火墙问题

在防火墙里放开下面这俩exe
C:\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是根据启动顺序来的,不是一直固定的,因此启动的时候最好有必定顺序,避免老去改配置的麻烦

相关文章
相关标签/搜索