docker LNMP部署实战

2022-09-30 13:55:44

制作php镜像

FROM harbor.test.com/os/centos:7.4
MAINTAINER song@163.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel 
RUN yum install -y libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-7.3.9.tar.gz /tmp/
RUN rm -rf /etc/yum.repos.d/*
COPY yum.repos.d /etc/yum.repos.d/

RUN cd /tmp/php-7.3.9 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --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 && \
    sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-7.3.9* && yum clean all

WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]

构建新的镜像

语法:docker built -f Dockerfile文件的路径 -t 镜像名:tag 命令执行的上下文

docker build -f dockerfile -t harbor.test.com/test/php:v1 .

制作Nginx镜像

cat nginx_install.sh 
yum install -y curl tar gcc gcc-c++ make pcre pcre-devel zlib zlib-devel iproute net-tools
yum clean all && rm -rf /var/cache/yum/*
cd /usr/local/src
tar -zxvf nginx-1.17.3.tar.gz && cd nginx-1.17.3
./configure --prefix=/usr/local/nginx
make -j 4
make install
rm -rf /usr/local/src/*

cat nginx_dockerfile 
FROM harbor.test.com/os/centos:7.4
MAINTAINER song@163.com
COPY nginx-1.17.3.tar.gz /usr/local/src
COPY nginx_install.sh /tmp/nginx_install.sh
RUN sh /tmp/nginx_install.sh
RUN rm -rf /etc/yum.repos.d/*
COPY yum.repos.d /etc/yum.repos.d/
WORKDIR /usr/local/nginx
EXPOSE 80
ENTRYPOINT ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

docker-compose

cat docker-compose.yml
mount-t nfs 192.168.0.213:/opt/container_name /nfs/lnmp_wwwroot/#每个节点都需要执行version:"3"services:nginx:image: harbor.test.com/test/nginx:v1ports:-80:80networks:- lnmp_netdeploy:mode: replicatedreplicas:3endpoint_mode: vipresources:limits:cpus:'0.50'memory: 500Mreservations:cpus:'0.25'memory: 300Mvolumes:-type: bindsource: /nfs/lnmp_wwwroottarget: /usr/local/nginx/htmlconfigs:-source: nginx_configtarget: /usr/local/nginx/conf/vhost/site.confdepends_on:- phpphp:image: harbor.test.com/test/php:v1networks:- lnmp_netdeploy:mode: replicatedreplicas:3endpoint_mode: vipvolumes:-type: bindsource: /nfs/lnmp_wwwroottarget: /usr/local/nginx/htmlmysql:image: mysql:5.6networks:- lnmp_netdeploy:placement:constraints:- node.role == managerendpoint_mode: dnsrrvolumes:-type: volumesource: db-datatarget: /var/lib/mysql# - "db-data:/var/lib/mysql"command:--character-set-server=utf8environment:MYSQL_ROOT_PASSWORD:123456MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wp123456networks:lnmp_net:driver: overlayvolumes:db-data:configs:nginx_config:file: ./site.conf

站点配置

server {
    listen 80;
    server_name localhost;
    root html;
    index index.html index.php;

    location ~ \.php$ {
        root html;
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include fastcgi_params;
    }
}

docker-compose 单机部署项目

docker-compose up -d wordpress.yaml

docker stack 集群部署

docker stack deploy wordpress.yaml

docker service部署的是单个服务,我们可以使用docker stack进行多服务编排部署

docker stack deploy命令用于部署新的堆栈或更新现有堆栈。从群集中的compose文件或dab文件创建和更新堆栈,必须以管理员节点为目标运行此命令。

用法:

docker stack deploy [OPTIONS] STACK

选项:

名称默认说明
–bundle-file分布式应用程序包文件的路径
–compose-file, -cCompose文件的文件名
–with-registry-authfalse将注册表身份验证详细信息发送给Swarm代理

相关命令

命令描述
docker stack deploy部署新的堆栈或更新现有堆栈
docker stack ls列出现有堆栈
docker stack ps列出堆栈中的任务
docker stack rm删除堆栈
docker stack services列出堆栈中的服务
docker stack down移除某个堆栈(不会删除数据)

部署服务

# deploy命令支持3.0及更高版本的Compose文件。
docker stack deploy -c docker-compose.yml lnmp
# 列出现有堆栈
docker stack ls
移除服务
docker stack down lnmp
该命令不会移除服务所使用的 数据卷,如果你想移除数据卷请使用 docker volume rm
docker stack service lnmp
docker service ls
docker service ps lnmp_nginx

现在我们打开浏览器输入 任一节点IP:8080 即可看到各节点运行状态

  • 作者:临江仙我亦是行人
  • 原文链接:https://blog.csdn.net/weixin_56752399/article/details/115831648
    更新时间:2022-09-30 13:55:44