[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