资讯专栏INFORMATION COLUMN

DS的Docker-compose笔记

frolc / 3194人阅读

摘要:作为,当然不能高大上的谈什么啦啦,所以只能是了。注意,如果重新启动了虚拟主机,需要再次执行以上命令。后补一个坑默认虚拟机的是自动分配的,有时候在启动后会出现类似地址与证书地址不匹配的提示,可以执行以下命令重新生成证书就好了

作为DS,当然不能高大上的谈什么linux啦Mac啦,所以只能是windows了。docker-compose方式创建环境和Dockerfile方式创建环境的区别请自己查找。

安装

有windows安装版了,去下载并安装就好。官网是:https://www.docker.com/
安装成功后运行快捷方式 Docker Quickstart Terminal,然后它需要去下载一个叫做boot2docker.iso文件,慢的很,你可以根据当前的提示去对应的地址用迅雷之类的下载,然后copy到提示信息中描述的位置,这就好多了。然后这个默认的虚拟机(default)就成功运行了。

数据同步

运行Oracle VM VirtualBox这个虚拟机管理工具,你能看到那个default虚拟机已经处于运行状态,点一下设置,找到共享文件这里,你会发现有一个默认的共享目录已经存在,叫做Users,别管他,也不要删除,否则你就无法再使用Docker Quickstart Terminal和Kitematic了。
新建一个共享文件夹,非只读、非自动挂载、非固定分配。
然后连接你的虚拟机,方法1-用Xshell之类的工具连接,方法2-在虚拟机管理器界面点“显示”
例如你刚才把d:/workspace作为共享目录了,共享目录名定义为vm_share,那么在虚拟机中执行以下命令:

sudo mkdir /usr/share/vm_share #你可以随意在你喜欢的位置创建
sudo mount -t vboxsf vm_share /usr/share/vm_share #vm_share是共享目录名,后面是刚创建的目录,很容易懂吧

好了,同步成功。至于那个叫做Users的共享文件夹,当不存在好了。

注意,如果重新启动了虚拟主机,需要再次执行以上命令。

创建一个docker-compose.yml

Docker基础,什么是Docker之类的请自行查找。

怎么创建一个docker-compose.yml

随便建个目录,比如php_stack,然后在里面新建一个文件docker-compose.yml就好了。

数据库,这个最简单

在docker-compose.yml里面写入

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加入

这个就不能直接用镜像了,因为要安装一些PHP扩展啥的,所以自己写一个Dockerfile吧,在docker-compose.yml所在目录创建子目录php,在子目录中创建Dockerfile

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文件存在这里
nginx加入

同样的,在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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26583.html

相关文章

  • Docker-Compose官方学习笔记(2)起步构建一个多容器app应用

    摘要:使用构建一个创建一个文件夹创建脚本这个脚本使用了和的包,并且启动了一个服务端口创建构建的由于在的时候,默认会去官方去获取,国内是无法访问的,所以这里使用了的镜像去下载包。 使用docker-compose构建一个python-web app 创建一个文件夹 python-web-app $mkdir python-web-app $cd python-web-app 2.创建pytho...

    BWrong 评论0 收藏0
  • Docker-Compose学习笔记(1)安装简介

    摘要:概述是一个用来定义和运行复杂应用的工具。使用,用户通过来进行构建。使用,不再需要使用脚本来启动容器。在配置文件中,所有的容器通过来定义,然后通过脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。 概述 Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成...

    shiyang6017 评论0 收藏0
  • Docker-Compose学习笔记(1)安装简介

    摘要:概述是一个用来定义和运行复杂应用的工具。使用,用户通过来进行构建。使用,不再需要使用脚本来启动容器。在配置文件中,所有的容器通过来定义,然后通过脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。 概述 Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成...

    zxhaaa 评论0 收藏0
  • 慕课网_《Docker入门》学习总结

    摘要:时间年月日星期六说明本文部分内容均来自慕课网。必填用于执行命令,当执行完毕后,将产生一个新的文件层。可选指定此镜像启动时默认执行命令。可选用于指定需要暴露的网络端口号。可选向镜像中挂载一个卷组。 时间:2017年09月16日星期六说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com 教学源码:无 学习源码:无 第一章:课程简介 1-1 课程介绍 Docke...

    CoorChice 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<