虚心使人进步

虚心学习,天天向上......
随笔 - 274, 文章 - 2, 评论 - 161, 阅读 - 76万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Linux 下使用Docker-comoser 安装 LNMP环境 (转)

Posted on   Showker  阅读(105)  评论(0编辑  收藏  举报

一、安装docker

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

 $ uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

$ sudo yum update

3、卸载旧版本(如果安装过旧版本的话)

$ sudo yum remove docker  docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

 

 

 

6、可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

 

 

 

7、安装docker

$ sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce

安装过程报错了:

 

8、启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

$ docker version

 

 

 10、查看docker列表

$ sudo systemctl docker images

 

 

二、以上安装docker 内容完毕, 再安装docker-composer

安装docker-compose
参考: docker官方文档 https://docs.docker.com/compose/install/

下载docker-compose,若不能连外网,则可下载后通过ftp传到服务器 ,修改文件名称与存放路径
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

====


1
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
1
配置全局使用docker-compose命令
方法一 将/usr/local/bin添加至PATH
export PATH=$PATH:/usr/local/bin

方法二 创建软链接至PATH中包含的路径,如/usr/bin
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
ps: 查看PATH

echo $PAHT

测试docker-compose
docker-compose --version

==========================================

各种问题汇总:

 

 

1、html文件能读取,php文件不能解析,提示如下

FastCGI sent in stderr: "Unable to open primary script: /usr/local/nginx/html/ecstore_lap/index.php (No such file or directory)" while reading response header from upstream
 
问题,nginx和php的映射目录一定要一致!!!

nginx

  volumes:
      - ./wwwroot:/usr/local/nginx/html
 
  php:
    hostname: php
    build: ./php
    links:
      - mysql:mysql-db
    volumes:
      - ./wwwroot:/usr/local/nginx/html

 

 

之前有随笔介绍使用Docker-compose搭建LNMP环境(centos6 php5.6)

      https://www.cnblogs.com/minseo/p/10146982.html

  本文介绍Docker-compose搭建LNMP环境(centos7 php7)

  文件目录结构如下

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
├── docker-compose.yml
├── mysql
│   ├── conf
│   └── data
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.16.0.tar.gz
│   └── nginx.conf
├── php
│   ├── Dockerfile
│   ├── libzip-1.2.0.tar.gz
│   ├── php-7.3.9.tar.gz
│   └── php.ini
└── wwwroot
    ├── index.html
    └── test.php

   需下载安装包 nginx-1.16.0.tar.gz libzip-1.2.0.tar.gz php-7.3.9.tar.gz

1
2
3
wget http://nginx.org/download/nginx-1.16.1.tar.gz
wget https://libzip.org/download/libzip-1.2.0.tar.gz
wget https://www.php.net/distributions/php-7.3.9.tar.gz

   docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      "80:80"
     "443:443"
    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.7
    ports:
      "3306:3306"
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: user123

   PS:links php:php-cgi意思是链接到服务名为php的服务,可以使用host名 php-cgi访问该容器,在启动容器后进入容器ping

  进入nginx容器ping测试

 

   同理下面的配置mysql:mysql-db也是一样的道理,在php容器中使用host名mysql-db访问mysql容器

  mysql/conf/my.cnf

1
2
3
4
5
6
7
8
9
[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysql.pid
log_error=/var/log/mysql/error.log
character_set_server = utf8
max_connections=3600

   nginx/Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysql.pid
log_error=/var/log/mysql/error.log
character_set_server = utf8
max_connections=3600
root@test-docker1:/data/compose_lnmp# cat nginx/Dockerfile
FROM centos:7
MAINTAINER liuym
RUN yum install -y gcc-c++ zlib-devel pcre-devel make
ADD nginx-1.16.0.tar.gz /tmp
RUN cd /tmp/nginx-1.16.0 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install
RUN rm -f /usr/local/nginx/conf/nginx.conf
COPY nginx.conf /usr/local/nginx/conf
 
EXPOSE 80 443
CMD ["/usr/local/nginx/sbin/nginx""-g""daemon off;"]

   nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
user  root;
worker_processes  auto;
  
error_log  logs/error.log  info;
  
pid        logs/nginx.pid;
  
  
events {
    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;
    keepalive_timeout  65;
  
    server {
        listen 80;
        server_name localhost;
        root html;
        index index.html index.php;
  
        location ~ \.php$ {
            root html;
            fastcgi_pass php-cgi:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
}

   php/Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
FROM centos:7
MAINTAINER liuym
RUN yum install -y gcc gcc-c++ gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel make perl
ADD libzip-1.2.0.tar.gz /tmp
RUN cd /tmp/libzip-1.2.0 && \
    ./configure && \
    make && \
    make install
ADD php-7.3.9.tar.gz /tmp
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-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/ && \
    make -j 4 && make install && \
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf  && \
    sed -i "s/127.0.0.1/0.0.0.0/g" /usr/local/php/etc/php-fpm.d/www.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

   PS:1,CentOS7自带libzip版本较低需要下载编译安装

      2,需要把默认配置文件www.conf.default重命名为www.conf并且修改配置把127.0.0.1改成0.0.0.0否则会导致无法访问php页面,因为启动了不同的容器无法通过127.0.0.1访问

                3,配置文件php.ini可以不拷贝

         

  wwwroot/test.php

1
<?php phpinfo()?>

   启动

1
docker-compose up -d

   查看

 

   web页面访问

 

 

 
 

常用命令

1
查看dokcer进程<br>docker ps -a<br><br>进入某个容器<br>docker exec -it docker_nginx_1 /bin/bashdocker exec -it docker_mysql_1 /bin/bashdocker exec -it docker_php_1 /bin/bash<br><br>重启某个容器<br>docker restart  docker_nginx_1<br>docker restart  docker_php_1<br>docker restart  docker_mysql_1

  

 

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示