使用docker-compose部署LNMP環境
阿新 • • 發佈:2018-12-30
1、建立相關compose存放目錄
< 5 docker-test - [root]: > mkdir -p /apps/compose_lnmp/nginx
< 5 docker-test - [root]: > cd !$
< 5 docker-test - [root]: /apps/compose_lnmp/nginx >
2、下載nginx軟體包,建立dockerfile
< 6 docker-test - [root]: /apps/compose_lnmp/nginx > # wget http://nginx.org/download/nginx-1.14.2.tar.gz < 7 docker-test - [root]: /apps/compose_lnmp/nginx > # vim Dockerfile FROM centos:7 MAINTAINER gujiwork RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel ADD nginx-1.14.2.tar.gz /tmp RUN cd /tmp/nginx-1.14.2 && ./configure --prefix=/usr/local/nginx && make -j 4 && make install COPY nginx.conf /usr/local/nginx/conf EXPOSE 80 WORKDIR /usr/local/nginx CMD ["./sbin/nginx", "-g", "daemon off;"]
3、這裡面用到了nginx.conf,放到compose_lnmp/nginx目錄下,將 fastcgi_pass 127.0.0.1:9000改成php容器名, fastcgi_pass php-cgi:9000;
#user nginx; worker_processes 2; worker_cpu_affinity 0101 1010; #error_log logs/error.log; error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 10240; } http { include mime.types; default_type application/octet-stream; server_tokens off; #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; tcp_nopush on; tcp_nodelay on; server_names_hash_bucket_size 128; server_names_hash_max_size 512; client_header_timeout 15s; client_body_timeout 15s; send_timeout 60s; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root html; fastcgi_pass php-cgi:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} include vhost/*.conf; }
4、建立mysql目錄,資料和配置檔案做持久化,這裡我們使用mysql官方映象,因此不需要寫dockerfile
< 39 docker-test - [root]: /apps/compose_lnmp > # tree mysql/
mysql/
|-- conf
| `-- my.cnf
`-- data
< 40 docker-test - [root]: /apps/compose_lnmp > # cat mysql/conf/my.cnf [mysqld] user=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.socket pid-file=/var/run/mysql/mysql.pid log_error=/var/log/mysql/error.log character_set_server = utf8 max_connections=3600
5、建立php目錄及dockerfile,php.ini主要修改了時區為shanghai
< 49 docker-test - [root]: /apps/compose_lnmp > # tree php/
php/
|-- Dockfile
|-- php-5.6.31.tar.gz
`-- php.ini
< 50 docker-test - [root]: /apps/compose_lnmp > # cat php/Dockfile
FROM centos:7
MAINTAINER gujiwork
RUN yum install -y gcc gcc-c++ gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel make
ADD php-5.6.31.tar.gz /tmp/
RUN cd /tmp/php-5.6.31 && \
./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 && \
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/" /usr/local/php/etc/php-fpm.conf && \
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && \
chmod +x /etc/init.d/php-fpm
COPY php.ini /usr/local/php/etc
EXPOSE 9000
CMD /etc/init.d/php-fpm start && tail -F /var/log/messages
6、建立docker-compose維護檔案
< 53 docker-test - [root]: /apps/compose_lnmp > # cat docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 80:80
links:
- php:php-cgi
volumes:
- ./wwwroot:/usr/local/nginx/html
php:
hostname: php
build: ./php
links:
- mysql:mysql-db
volumes:
- ./wwwroot:/usr/local/nginx/html
mysql:
hostname: mysql
image: mysql:5.6
ports:
- 3306:3306
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
#command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user123
7、建立web掛載目錄,整體目錄結構如下
< 56 docker-test - [root]: /apps/compose_lnmp > # tree .
.
|-- docker-compose.yml
|-- mysql
| |-- conf
| | `-- my.cnf
| `-- data
|-- nginx
| |-- Dockerfile
| |-- nginx-1.14.2.tar.gz
| `-- nginx.conf
|-- php
| |-- Dockfile
| |-- php-5.6.31.tar.gz
| `-- php.ini
`-- wwwroot
6 directories, 8 files
8、執行build構建映象
< 81 docker-test - [root]: /apps/compose_lnmp > # docker-compose build
9、出現success表示構建成功
make[1]: Leaving directory `/tmp/nginx-1.14.2'
Removing intermediate container b7fb79c4671e
---> b756345aac5b
Step 6/9 : COPY nginx.conf /usr/local/nginx/conf
---> cb180351db65
Step 7/9 : EXPOSE 80
---> Running in 20805a3b58a5
Removing intermediate container 20805a3b58a5
---> 9f75c3834969
Step 8/9 : WORKDIR /usr/local/nginx
---> Running in 6abf5341ee7b
Removing intermediate container 6abf5341ee7b
---> 0cb88354c8b8
Step 9/9 : CMD ["./sbin/nginx", "-g", "daemon off;"]
---> Running in a2db489f2b5b
Removing intermediate container a2db489f2b5b
---> 76ae0759f3b1
Successfully built 76ae0759f3b1
Successfully tagged compose_lnmp_nginx:latest
10、啟動服務測試
< 82 docker-test - [root]: /apps/compose_lnmp > # docker-compose up -d
Creating network "compose_lnmp_default" with the default driver
Pulling mysql (mysql:5.6)...
5.6: Pulling from library/mysql
177e7ef0df69: Pull complete
cac25352c4c8: Pull complete
8585afabb40a: Pull complete
1e4af4996053: Pull complete
c326522894da: Pull complete
50ec9776c6b3: Pull complete
b81a89945365: Pull complete
80f5ab6567ca: Pull complete
5caf5e4c5eb0: Pull complete
9295ceea71e2: Pull complete
fb029976ca26: Pull complete
Creating compose_lnmp_mysql_1_32333e982f89 ... done
Creating compose_lnmp_php_1_856b9f701287 ... done
Creating compose_lnmp_nginx_1_c5360c9dc627 ... done
< 144 docker-test - [root]: /apps/compose_lnmp/wwwroot > # echo "111" >index.html
#測試
< 144 docker-test - [root]: /apps/compose_lnmp/wwwroot > # curl localhost/
111