vagrant 下使用docker 搭建开发环境容器

2017-03-06 16:42:29   Docker

  vagrant   docker   docker-compose   docker容器  

阿里云的安装脚本

  1. curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

如果你想让 Docker 在非root用户下,执行如下命令

  1. sudo usermod -aG docker vagrant

使用Docker加速器

打开网址 https://dev.aliyun.com/search.html
点击管理中心
docker
针对Docker客户端版本大于1.10的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://batv91n6.mirror.aliyuncs.com"]//这里选择你的
  5. }
  6. EOF
  7. sudo systemctl daemon-reload
  8. sudo systemctl restart docker

安装docker-compose

docker-compose在群共享中下载

  1. sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose

下载LaraDock

下载地址

解压到Vagrant根目录下,方便Vagrant中可以直接进入

因workspace下的Dockerfile使用到auth.json,但目前版本中缺失,手工创建 auth.json输入如下内容

  1. {
  2. "bitbucket-oauth": {},
  3. "github-oauth": {
  4. "github.com": "4044ca68a839e1d5e7631dcd297533f8765aa37d"
  5. },
  6. "gitlab-oauth": {},
  7. "http-basic": {}
  8. }

启动需要的容器

  1. docker-compose up -d nginx mysql redis

说明: workspacephp-fpm 将运行在大部分实例中, 所以不需要在 up 命令中加上它们.
进入Laravel应用目录

  1. composer install
  2. php artisan key:generate
  3. chmod -R 777 storage bootstrap/cache

进入 Workspace 容器,需要在LaraDock目录下执行
laradock目录
docker-compose exec workspace bash

  • 由于docker-compose.yml中默认映射的应用目录为../:/var/www
    (自动映射到父级目录)

这里解释一下 假设 laraDock 在laravel项目根目录下,运行 容器后,

  1. docker-compose exec workspace bash

进入 /var/www/ 你会发现这里面有你的laravel 项目
这就是docker-compose.yml 映射到父级目录 的解释
/var/www中就会有laravel 中的文件。

举例中这种方式不太方便,因为不可能把每个laravel项目中都放一个laradock,所以我们可以在vagrant目录下放一个laradock,也就和你的多个laravel项目在同级目录下,然后改一下nginx映射目录配置 在\laradock\nginx\sites下的 default中配置

  1. listen 80 default_server;//把default_server去掉
  2. server_name www.wanghao90.xin;//配置域名
  3. root /var/www/goods/public;//配置目录,goods:laravel项目

然后重新启动容器就可以了 简单重启命令 方法 看文章最下方

这里 所有 docker-compose 命令必须在 laradock目录执行才有效

数据库配置在mysql下的Dockerfile中查看
ARG MYSQL_DATABASE=homestead
ARG MYSQL_USER=homestead
ARG MYSQL_PASSWORD=secret
ARG MYSQL_ROOT_PASSWORD=root

env中连接docker中的mysql
进行如下配置
DB_HOST=mysql

停止所有
sudo docker stop $(docker ps -a -q)
删除所有容器
sudo docker rm $(docker ps -a -q)
删除所有镜像
sudo docker rmi $(docker images -q)

默认运行PHP-FPM 7.0版本.
切换版本 PHP 7.0 到 PHP 5.6

1 - 打开 docker-compose.yml

2 - 在PHP容器的 Dockerfile-70文件。

3 - 修改版本号, 用Dockerfile-56替换 Dockerfile-70

这里如果你的 vagrant 环境里已经装有了 Nginx mysql redis等服务 会出现端口 冲突问题
方法一 卸掉(不过听说liunx 卸载很麻烦,有时候还卸载不干净)
方法二所以直接停掉或者 你在装一个 纯净版的 ubuntu
ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint laradock_nginx_1 (ee9c5205c6850384b4578c2ad0f310e4e9f2d543ec82f13fcb44b10bf5308e17): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use

  1. ERROR: for redis Cannot start service redis: driver failed programming external connectivity on endpoint laradock_redis_1 (805c3fc771a19133387578d843d87dda2802ccf22c973adb6e80cb981986af7d): Error starting userland proxy: listen tcp 0.0.0.0:6379: bind: address already in use
  2. ERROR: for mysql Cannot start service mysql: driver failed programming external connectivity on endpoint laradock_mysql_1 (5192d2a5af81fcead44e9e065d2ad67cc5f3d00f24bcc339bfcad8e82868799d): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
  3. ERROR: Encountered errors while bringing up the project.
  4. vagrant@ubuntu-xenial:/vagrant/mydocker/laradock$ netstat -tnl
  5. Active Internet connections (only servers)
  6. Proto Recv-Q Send-Q Local Address Foreign Address State
  7. tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
  8. tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
  9. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
  10. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
  11. tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
  12. tcp6 0 0 :::2222 :::* LISTEN
  13. tcp6 0 0 :::22 :::* LISTEN
  14. //看.. 这里 3306 9379 80 都被占了
  15. sudo service nginx stop
  16. sudo service redis stop
  17. sudo service mysql stop
  18. sudo service php7.0-fpm stop
  19. vagrant@ubuntu-xenial:/vagrant/mydocker/laradock$ netstat -tnl
  20. Active Internet connections (only servers)
  21. Proto Recv-Q Send-Q Local Address Foreign Address State
  22. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
  23. tcp6 0 0 :::2222 :::* LISTEN
  24. tcp6 0 0 :::22 :::* LISTEN

//端口都关掉了

  1. vagrant@ubuntu-xenial:/vagrant/mydocker/laradock$ docker-compose up -d nginx mysql redis
  2. Starting laradock_redis_1
  3. Starting laradock_applications_1
  4. Starting laradock_mysql_1
  5. laradock_workspace_1 is up-to-date
  6. laradock_php-fpm_1 is up-to-date
  7. Starting laradock_nginx_1

/执行成功了
docker-compose 只能在laradock目录下执行才有效,很不方便

  • 小技巧 快速简单便捷操作命令的 来看看

    1. cd ~
    2. vim .bashrc

//在末尾加上(目录看清楚,写自己的,我的laradock在vagrant下)

  1. alias up='cd /vagrant/laradock && docker-compose up -d mysql nginx redis'
  2. alias stop='cd /vagrant/laradock && docker-compose stop mysql nginx redis'
  3. alias restart='cd /vagrant/laradock && docker-compose restart'
  4. alias exec='cd /vagrant/laradock && docker-compose exec workspace bash'
  • && 连接先后命令
  • alias 后 写简写的命令

    然后 退出系统 重新连接一下
    你会惊奇发现
    可以在 任何目录下执行 up 就相当于执行 docker-compoer up -d mysql nginx redis
    exec(进入workspace) stop(停止) restart(重启)

MAC 上找不到.bash_profile该怎么办?

  1. 1.启动终端Terminal
  2. 2. 进入当前用户的home目录
  3. 输入cd ~
  4. 创建.bash_profile
  5. 输入touch .bash_profile
  6. 4. 编辑.bash_profile文件
  7. 输入open -e .bash_profile
  8. 然后在输入上面的 几个快捷键设置的命令就可以了
  9. 5. 保存文件,关闭.bash_profile
  10. 6. 更新刚配置的环境变量
  11. 输入source .bash_profile //编译一下

都可以 通过 这几个简写 执行,是不是很方便

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

感谢你的支持,我会继续努力!
扫码打赏,建议金额1-10元