做为DS,固然不能高大上的谈什么linux啦Mac啦,因此只能是windows了。docker-compose方式建立环境和Dockerfile方式建立环境的区别请本身查找。php
有windows安装版了,去下载并安装就好。官网是:https://www.docker.com/
安装成功后运行快捷方式 Docker Quickstart Terminal,而后它须要去下载一个叫作boot2docker.iso文件,慢的很,你能够根据当前的提示去对应的地址用迅雷之类的下载,而后copy到提示信息中描述的位置,这就好多了。而后这个默认的虚拟机(default)就成功运行了。html
运行Oracle VM VirtualBox这个虚拟机管理工具,你能看到那个default虚拟机已经处于运行状态,点一下设置,找到共享文件这里,你会发现有一个默认的共享目录已经存在,叫作Users,别管他,也不要删除,不然你就没法再使用Docker Quickstart Terminal和Kitematic了。
新建一个共享文件夹,非只读、非自动挂载、非固定分配。
而后链接你的虚拟机,方法1-用Xshell之类的工具链接,方法2-在虚拟机管理器界面点“显示”
例如你刚才把d:/workspace做为共享目录了,共享目录名定义为vm_share,那么在虚拟机中执行如下命令:mysql
sudo mkdir /usr/share/vm_share #你能够随意在你喜欢的位置建立 sudo mount -t vboxsf vm_share /usr/share/vm_share #vm_share是共享目录名,后面是刚建立的目录,很容易懂吧
好了,同步成功。至于那个叫作Users的共享文件夹,当不存在好了。linux
注意,若是从新启动了虚拟主机,须要再次执行以上命令。nginx
Docker基础,什么是Docker之类的请自行查找。sql
随便建个目录,好比php_stack,而后在里面新建一个文件docker-compose.yml就行了。docker
在docker-compose.yml里面写入shell
mysql5: #起个名字 image: mysql:5.7 #image是指从docker hub的镜像建立,这里用的mysql:5.7 ports: #端口设置 - 3306:3306 #前面的3306是虚拟机的端口,后面的3306是mysql5这个容器的端口,为何mysql5这个容器的端口是3306呢?[查看该镜像的Dockerfile][2]就知道了,其中写了`EXPOSE 3306` environment: #环境变量 - MYSQL_ROOT_PASSWORD=pass #root用户密码,密码是什么均可以 volumes: #卷设置 - /usr/share/vm_share/data/mysql:/var/lib/mysql #/usr/share/vm_share指向咱们的共享文件夹,因此咱们要在共享文件夹里面建立data/mysql目录,如今你在这个mysql容器里面修改的数据不会丢掉了。
运行Docker Quickstart Terminal,进入docker-compose.yml文件所在的目录(什么?不知道怎么切换盘符?cd /d等同于d:)
执行docker-compose up, 选项 -d 启动持久的服务(一般须要这个参数),选项 --build 若是你忘了的话终端会输出建议你使用--build选项的内容,(一般不须要这个参数)数据库
这个就不能直接用镜像了,由于要安装一些PHP扩展啥的,因此本身写一个Dockerfile吧,在docker-compose.yml所在目录建立子目录php,在子目录中建立Dockerfilewindows
FROM php:7-fpm #基于这个 RUN apt-get update && apt-get install -y libmcrypt-dev #简单安装几个扩展 RUN docker-php-ext-install mbstring pdo_mysql tokenizer #简单安装几个扩展 COPY ./php.ini /usr/local/etc/php/ #自定义的php.ini,和这个Dockerfile相同目录 CMD ["php-fpm"] #没啥解释的
而后在docker-compose.yml中加入如下内容
php7: build: ./php #根据该目录下的Dockerfile构造 ports: - 9000:9000 links: - mysql5 #关联mysql volumes: - /usr/share/vm_share/htdocs:/var/www/html #php文件存在这里
一样的,在docker-compose.yml目录下建立一个nginx目录,里面有Dockerfile和nginx.conf两个文件。
Dockerfile内容很简单
FROM nginx:1.10 #基于这个镜像 RUN rm -f /etc/nginx/conf.d/* #这些删掉 COPY ./nginx.conf /etc/nginx/ #复制配置文件
nginx.conf
user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; worker_rlimit_nofile 100000; events { worker_connections 2048; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; include /etc/nginx/conf.d/*; #加载额外的配置文件 }
而后在docker-compose.yml中加入
nginx: build: ./nginx ports: - 80:80 - 443:443 links: - php7:php #关联容器,刚才加入的php服务容器名字是php7,因此前面是php7,后面就理解成别名吧。这个时候体现出compose的优点了,你能够在建立一个php56,而后这里改为php56:php,版本切换完成。 volumes: - /usr/share/vm_share/sites:/etc/nginx/conf.d #额外的配置文件放这里了 - /usr/share/vm_share/htdocs:/var/www/html #源码目录 - /usr/share/vm_share/logs/nginx:/var/log/nginx #日志
在共享目录下建立sites目录,而且放一个默认的虚拟主机配置文件进去就行了,例如default.vhost
server { listen 80; root /var/www/html; index index.php index.html index.htm; client_max_body_size 100m; location / { try_files $uri $uri/ /index.php?$query_string; location ~* \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass php:9000; #注意,这里是用的php,是那个php7:php中的php } } }
/ - data - mysql - htdocs - phpinfo.php - logs - nginx - sites - default.vhost
最终结构比这个复杂,可是那都是自动生成的,好比mysql的数据文件和nginx日志。
再一次docker-compose up -d,访问http://192.168.99.100/phpinfo.php,真的成功了哦。(若是你的虚拟机的ip不是这个。。。重启虚拟主机的时候会看到ip信息)
但愿这篇文章能帮你躲开几个坑,请点赞。
后补一个坑默认虚拟机的ip是自动分配的,有时候在启动后会出现相似 IP地址与证书地址不匹配 的提示,能够执行如下命令从新生成证书就行了docker-machine regenerate-certs default