[toc]php
Docker Compose是一个定义及运行多个Docker容器的工具,它自身咱们能够简单的理解为就是一个二进制文件(命令),是咱们能够更方便易于管理的构建基于docker的复杂应用html
指挥的角色地位,根据被部署的对象之间的耦合关系,以及被部署对象的环境依赖,制定部署流程中各个动做的执行顺序和获取防止;这些信息都会在编排工具中以指定的格式在配置文件中定义,保证这个流程能够随时在全新环境可靠有序重现mysql
具体实施的角色地位,按照编排指定的内容和流程,在目标容器执行,一切都是按照编排中制定好的来进行具体实施。linux
简单概述下:如用户执行docker-compose up指令表示运行在docker-compose.yml中定义好的各项任务,进行构建镜像或者运行容器,等一些列操做。
那么若是在当前宿主机中已经存在了与该应用对应的容器(即重复了),docker-compose会进行逻辑判断,若是用户指定了能够从新启动已有服务,其就会执行service模块的容器重启方法
不然将直接启动已有的容器。二者区别在于前者是重启,会建立新容器,就容器会移除掉。
该过程当中建立容器的各项定义参数都是compose指令和.yml文件中指定好的。nginx
[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2 #安装依赖 [root@localhost ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo #下载docker的repo [root@localhost ~]# yum -y install docker-ce [root@localhost ~]# mkdir /etc/docker [root@localhost ~]# vim /etc/docker/daemon.json { "registry-mirrors":["https://*******.mirror.aliyuncs.com"] } #阿里云镜像加速
地址须要我的前往阿里云得到,参考这篇文档c++
[root@localhost ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose [root@localhost ~]# chmod +x /usr/local/bin/docker-compose [root@localhost ~]# mkdir compose_lnmp [root@localhost ~]# cd compose_lnmp/
[root@localhost compose_lnmp]# tree . ├── docker-compose.yml ├── mysql │ ├── conf │ │ └── my.cnf │ └── data ├── nginx │ ├── Dockerfile │ ├── nginx-1.12.1.tar.gz │ ├── nginx.conf │ └── run.sh ├── php │ ├── Dockerfile │ ├── php-5.6.39.tar.gz │ └── php.ini └── wwwroot ├── index.html └── index.php [root@localhost compose_lnmp]# cat docker-compose.yml version: 3 services: nginx: #在 services 标签下的第二级标签是 web,这个名字是用户本身自定义,它就是服务名称。 hostname: nginx #至关于提早预约义容器的主机名,会写入到容器的/etc/hostname中 build: #该标签标示基于dockerfile来构建一个镜像 context: ./nginx #指定构建镜像所需的dockerfile目录,我这里指定的是相对目录,该文件(docker-compose.yml)所处位置,也能够绝对目录, dockerfile: Dockerfile ports: - 80:80 #和宿主机映射的端口 networks: - lnmp #指定的网络环境???? volumes: - ./wwwroot:/usr/local/nginx/html:ro #将宿主机目录挂载到该容器当中(只读) php: hostname: php build: context: ./php dockerfile: Dockerfile ports: - 9000:9000 networks: - lnmp volumes: - ./wwwroot:/usr/local/nginx/html mysql: hostname: mysql image: mysql:5.6 #image标签表示是基于mysql:5.6镜像构建一个新的 ports: - 3306:3306 networks: - lnmp volumes: - ./mysql/conf:/etc/mysql/conf.d - ./mysql/data:/var/lib/mysql command: --character-set-server=utf8 environment: MYSQL_ROOT_PASSWORD: 123456 #???mysql中root用户密码 MYSQL_DATABASE: wordpress #新建一个数据库名为WordPress MYSQL_USER: user #新建一个用户名为user MYSQL_PASSWORD: user123 #新建user用户密码为user123 networks: lnmp: #建立一个网络,lnmp为该网络的别名
[root@localhost compose_lnmp]# cat nginx/Dockerfile FROM centos:7 #若是有该docker镜像则基于该镜像进行构建,没有则自行从镜像仓库pull MAINTAINER joinbestbest ENV TIME_ZOME Asia/Shanghai RUN useradd -s /sbin/nologin -M nginx && yum -y install gcc gcc-c++ make openssl-devel pcre-devel #运行的命令,安装依赖 ADD nginx-1.12.1.tar.gz /tmp #将宿主机源码包传送到容器内tmp目录 RUN cd /tmp/nginx-1.12.1 && \ ./configure --prefix=/usr/local/nginx && \ make -j 2 && \ make install #编译;make -j 2使用两个进程来make,加速 RUN rm -rf /tmp/nginx* && yum clean all && \ echo "${TIME_ZOME}" > /etc/timezone && \ ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime EXPOSE 80 COPY nginx.conf /usr/local/nginx/conf/ WORKDIR /root/nginx ADD run.sh /run.sh RUN chmod 775 /run.sh CMD ["/run.sh"] #一系列命令操做
user nginx nginx; worker_processes 1; worker_rlimit_nofile 102400; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; worker_connections 4096; } http { include 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 logs/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; charset utf-8; location / { root html; index index.php index.html index.htm; } location ~ \.php$ { root html; fastcgi_index index.php; fastcgi_pass 192.168.111.3:9000; #ip修改成宿主机的,端口是php程序映射到宿主机的端口 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } } daemon off; [root@localhost compose_lnmp]# vim nginx/run.sh #在dockerfile中指定运行的脚本传送到容器中 #!/bin/bash /usr/local/nginx/sbin/nginx
[root@localhost compose_lnmp]# cat mysql/conf/my.cnf [mysqld] datadir=/var/lib/mysql socket=/tmp/mysql.sock symbolic-links=0 [mysqld_safe] log-error=/var/log/mysql/mysql.log pid-file=/tmp/mysql.pid
[root@localhost compose_lnmp]# cat php/Dockerfile FROM centos:7 MAINTAINER crushlinux ENV TIME_ZOME Asia/Shanghai RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel ADD php-5.6.39.tar.gz /tmp/ RUN cd /tmp/php-5.6.39 && \ ./configure --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-mysql --with-mysqli \ --with-openssl --with-zlib --with-curl --with-gd \ --with-jpeg-dir --with-png-dir --with-iconv \ --enable-fpm --enable-zip --enable-mbstring && \ make -j 4 && \ make install RUN cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \ sed -i 's/127.0.0.1/0.0.0.0/g' /usr/local/php/etc/php-fpm.conf && \ sed -i "21a daemonize=no" /usr/local/php/etc/php-fpm.conf && \ echo "${TIME_ZOME}" > /etc/timezone && \ ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime COPY php.ini /usr/local/php/etc/ RUN rm -rf /tmp/php* && yum clean all WORKDIR /usr/local/php/ EXPOSE 9000 #将容器内该端口进行映射 CMD ["./sbin/php-fpm","-c","/usr/local/php/etc/php-fpm.conf"]
[root@localhost compose_lnmp]# cat wwwroot/index.html www.join.com [root@localhost compose_lnmp]# cat wwwroot/index.php <?php phpinfo(); ?>
直接将相应的代码文件放到宿主机的wwwroot目录下便可,由于这里已经作好了映射 [root@localhost compose_lnmp]# tar xf wordpress-5.0.2-zh_CN.tar.gz [root@localhost compose_lnmp]# mv wordpress wwwroot/
而后在测试浏览器上访问
192.168.111.3/wordpress
进行操做git