Docker构建LNMP

本文详细介绍了如何在CentOS7上安装Docker,并通过Dockfile构建LNMP(Linux, Nginx, MySQL, PHP)环境。首先,介绍了Docker的安装步骤,接着分别构建了基础镜像、mysql、php和nginx的镜像。然后,详细阐述了如何通过挂载配置文件和数据目录启动并关联这些容器,以创建完整的LNMP环境。最后,提到了Docker图形化工具Portainer用于更方便地管理Docker容器。" 115249416,9098630,EndNote x9卸载与安装问题解决指南,"['科研工具', '文献管理', '软件安装']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.安装Docker(CentOS7)

1.配置yum仓库

[root@localhost ~]# wget -P /etc/yum.repos.d/ https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache

2.安装docker

[root@localhost ~]# yum -y install docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
[root@localhost ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-204.git0be3e21.el7.x86_64
 Go version:      go1.10.3
 Git commit:      0be3e21/1.13.1
 Built:           Fri Mar 19 13:57:09 2021
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-204.git0be3e21.el7.x86_64
 Go version:      go1.10.3
 Git commit:      0be3e21/1.13.1
 Built:           Fri Mar 19 13:57:09 2021
 OS/Arch:         linux/amd64
 Experimental:    false
二、Dockfile构建LNMP环境
1.构建基础镜像
[root@localhost ~]# mkdir centos
[root@localhost ~]# cd centos
[root@localhost centos]# vi Dockerfile 
[root@localhost centos]# cat Dockerfile 
FROM centos:centos7.9.2009

RUN yum -y install wget epel-release \
&& mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak \
&& wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo \
&& wget -P /etc/yum.repos.d/ http://mirrors.163.com/.help/CentOS7-Base-163.repo \
&& yum clean all && yum makecache

RUN yum -y install gcc gcc-c++ glibc make autoconf openssl openssl-devel
[root@localhost centos]# docker build -t centos:v1 .
[root@localhost centos]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              v1                  b5883eacef75        4 minutes ago       895 MB
docker.io/centos    centos7.9.2009      8652b9f0cb4c        4 months ago        204 MB
2.构建mysql镜像

[root@localhost mysql]# tree .
.
├── business.sql
├── Dockerfile
├── galera-4-26.4.7-1.el7.centos.x86_64.rpm
├── MariaDB-client-10.5.9-1.el7.centos.x86_64.rpm
├── MariaDB-common-10.5.9-1.el7.centos.x86_64.rpm
├── MariaDB-compat-10.5.9-1.el7.centos.x86_64.rpm
├── MariaDB-server-10.5.9-1.el7.centos.x86_64.rpm
├── server.cnf
└── setup.sh

[root@localhost mysql]# cat Dockerfile 
FROM centos:centos7.9.2009

COPY galera-4-26.4.7-1.el7.centos.x86_64.rpm /root/galera-4-26.4.7-1.el7.centos.x86_64.rpm
COPY MariaDB-client-10.5.9-1.el7.centos.x86_64.rpm /root/MariaDB-client-10.5.9-1.el7.centos.x86_64.rpm
COPY MariaDB-common-10.5.9-1.el7.centos.x86_64.rpm /root/MariaDB-common-10.5.9-1.el7.centos.x86_64.rpm
COPY MariaDB-compat-10.5.9-1.el7.centos.x86_64.rpm /root/MariaDB-compat-10.5.9-1.el7.centos.x86_64.rpm
COPY MariaDB-server-10.5.9-1.el7.centos.x86_64.rpm /root/MariaDB-server-10.5.9-1.el7.centos.x86_64.rpm

WORKDIR /root
RUN yum -y remove mysql-libs
RUN yum -y install *.rpm
ADD business.sql /root/business.sql
ADD server.cnf /etc/my.cnf.d/server.conf
ADD setup.sh /root/setup.sh

RUN yum clean all
RUN chmod +x /root/setup.sh

EXPOSE 3306

CMD ["/root/setup.sh"]
[root@localhost mysql]# cat business.sql 
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;

USE mysql;
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
[root@localhost mysql]# cat server.cnf 
[mysqld]
bind-address=0.0.0.0
console=1
general_log=1
general_log_file=/dev/stdout
collation-server=utf8_unicode_ci
character-set-server=utf8
[root@localhost mysql]# cat setup.sh 
#!/bin/sh
chown -R mysql:mysql /var/lib/mysql

mysql_install_db --user=mysql > /dev/null

mysqld_safe --user=mysql &

sleep 5

mysql < /root/business.sql

sleep 5

ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9

mysqld_safe --user=mysql
3.构建php镜像

[root@localhost php]# tree .
.
├── Dockerfile
├── libmcrypt-2.5.8-13.el7.x86_64.rpm
├── php-8.0.3.tar.gz
└── php-fpm.conf.default

[root@localhost php]# cat Dockerfile 
FROM centos:v1

COPY libmcrypt-2.5.8-13.el7.x86_64.rpm /root/libmcrypt-2.5.8-13.el7.x86_64.rpm
WORKDIR /root
RUN yum -y install *.rpm

ADD php-8.0.3.tar.gz /usr/local/src

RUN yum -y install libxml2 libxml2-devel bzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel sqlite sqlite-devel oniguruma oniguruma-devel

WORKDIR /usr/local/src/php-8.0.3
RUN ./configure --prefix=/usr/local/php --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-mcrypt --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-config-file-path=/usr/local/php/etc --with-bz2 --with-gd && make && make install

#COPY php.ini-production /usr/local/php/etc/php.ini
COPY php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
RUN mv /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

RUN useradd -M -s /sbin/nologin php
RUN sed -i -e 's@;pid = run/php-fpm.pid@pid = run/php-fpm.pid@g' -e 's@;daemonize = yes@daemonize = no@g' /usr/local/php/etc/php-fpm.conf
RUN sed -i -e 's@nobody@php@g' -e 's@listen = 127.0.0.1:9000@listen = 0.0.0.0:9000@g' /usr/local/php/etc/php-fpm.d/www.conf

EXPOSE 9000

CMD ["/usr/local/php/sbin/php-fpm"]
4.构建nginx镜像

[root@localhost nginx]# tree .
.
├── Dockerfile
├── nginx-1.18.0.tar.gz
├── nginx.conf
└── www.conf

[root@localhost nginx]# cat Dockerfile
FROM centos:v1

RUN useradd -M -s /sbin/nologin www
ADD nginx-1.18.0.tar.gz /usr/local/src

RUN yum -y install libxslt-devel gd gd-devel GeoIP GeoIP-devel pcre pcre-devel libxml2 libxml2-devel libxslt-devel

WORKDIR /usr/local/src/nginx-1.18.0

RUN ./configure --user=www --group=www --prefix=/usr/local/nginx --with-file-aio --with-ipv6 --with-http_ssl_module  --with-http_v2_module --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_module    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degradation_module   --with-http_stub_status_module && make && make install

COPY nginx.conf /usr/local/nginx/conf/nginx.conf

RUN mkdir /usr/local/nginx/conf/conf.d
COPY www.conf /usr/local/nginx/conf/conf.d/www.conf

EXPOSE 80

CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
[root@localhost nginx]# cat nginx.conf 
user  www;
worker_processes  auto;
error_log  logs/error.log  error;
pid        logs/nginx.pid;
worker_rlimit_nofile 30000;


events {
    worker_connections  1024;
    use epoll;
}


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;
    tcp_nopush      on;
    underscores_in_headers on;
    keepalive_timeout  65;
    send_timeout 60;
	types_hash_max_size 2048;
    gzip  on;
	
include /usr/local/nginx/conf/conf.d/*.conf;
    server {
        listen       80;
        server_name  localhost;
    }
}
[root@localhost nginx]# cat www.conf 
server {
    listen   80;
    root /usr/local/nginx/html;
    index index.htm index.html index.php;
    location ~ \.php$ {
        root /usr/local/nginx/html;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
5.构建LNMP环境

(1)先启动mysql容器, 将server.cnf配置文件和数据目录挂载到容器内部

(2)再启动php容器,使用了-v进行映射(如果这里不进行映射,那么php的程序会启动,但是遇到php结尾的文件将不会解析,出现file not found的错误),并且使用了–link与mysql关联,这样php容器就连接mysql数据库了

(3)最后启动nginx容器,同样使用-v 进行映射,将网站目录映射到宿主机,通过–link与php关联

[root@localhost ~]# docker run -d --name mysql -v /root/mysql/server.cnf:/etc/my.cnf.d/server.cnf -v /data/mysql:/var/lib/mysql -p 3306:3306 mysql:v1
[root@localhost ~]# docker run -d --name php -v /www:/usr/local/nginx/html --link=mysql:mysql php:v1
[root@localhost ~]# docker run -d --name nginx -p 80:80 -v /www:/usr/local/nginx/html --link=php:php nginx:v1
三、Docker图形化工具

Portainer ,Shipyard

1.Portainer
[root@localhost ~]# docker pull 6053537/portainer-ce	#汉化版
[root@localhost ~]# docker run -itd --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值