制作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, -c | Compose文件的文件名 | |
–with-registry-auth | false | 将注册表身份验证详细信息发送给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 即可看到各节点运行状态