前言
公司在实际的生产环境中,需要使用Docker技术在一台主机上创建LNMP服务并运行Wordpress网站平台。然后对此服务进行相关的性能调优和管理工作。
一、项目
1、服务器环境
本机IP地址为192.168.237.123
容器 | 操作系统 | IP地址 | 软件 |
---|---|---|---|
nginx | CentOS 7 | 172.100.0.10 | Docker-Nginx |
mysql | Centos 7 | 172.100.0.20 | Docker-Mysql |
php | Centos 7 | 172.100.0.30 | Docker-php |
2、需求
① 使用Docker构建LNMP环境并运行Wordpress网站平台。
② 限制Nginx容器最多使用500Mb的内存和1G的Swap。
③ 限制Mysql容器写 /dev/sda 的速率为 10 MB/s。
④ 将所有容器进行快照,然后将Docker镜像打包成tar包备份到本地。
二、基础镜像
#关闭防火墙
[root@localhost ~]# systemctl disable --now firewalld
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
#安装docker
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost yum.repos.d]# yum install -y docker-ce
[root@docker ~]# systemctl start docker.service
[root@docker ~]# systemctl enable docker.service
#镜像加速
[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://获取的加速地址.mirror.aliyuncs.com"]
}
EOF
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
#网络优化
[root@docker ~]# vim /etc/sysctl.conf
······省略······
net.ipv4.ip_forward=1
[root@docker ~]# sysctl -p
[root@docker ~]# systemctl restart network
[root@docker ~]# systemctl restart docker
[root@docker ~]# docker pull centos:7
#从公有仓库中下载centos 7作为系统基础镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 4 weeks ago 204MB
三、Nginx
1、建立工作目录
[root@docker ~]# mkdir /opt/nginx
[root@docker ~]# cd /opt/nginx
[root@docker nginx]# rz -E
rz waiting to receive.
#上传nginx安装包nginx-1.12.0.tar.gz
[root@docker nginx]# rz -E
rz waiting to receive.
#上传wordpress服务包wordpress-4.9.4-zh_CN.tar.gz
2、编写Dockerfile脚本
[root@docker nginx]# vim Dockerfile
FROM centos:7
MAINTAINER this is nginx image <lnmp>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module;make -j4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/
ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html
RUN chmod 777 -R /usr/local/nginx/html/
EXPOSE 80
VOLUME [ "/usr/local/nginx/html/" ]
CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]
3、准备nginx.conf配置文件
[root@docker nginx]# ls
Dockerfile nginx-1.12.0.tar.gz nginx.conf wordpress-4.9.4-zh_CN.tar.gz
[root@docker nginx]# egrep -v "^(.)*#(.)*$" nginx.conf | grep -v "^$"
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root html;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root html;
fastcgi_pass 172.111.0.30:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
}
}
4、生成镜像
[root@docker nginx]# docker build -t nginx:lnmp .
[root@docker nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx lnmp 35a6404fcfa1 5 seconds ago 522MB
centos 7 eeb6ee3f44bd 4 weeks ago 204MB
5、创建自定义网络
[root@docker nginx]# docker network create --subnet=172.100.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
0cbe1bd0bd782bf1c8e69916d99427970196de22deb312f970e01030406d9b45
[root@docker nginx]# docker network ls
NETWORK ID NAME DRIVER SCOPE
dd7a55d01f8