dockerfile构建LNRP环境练手

本文详细介绍了如何使用Docker构建Nginx、PHP和Redis的运行环境,包括创建Dockerfile、配置环境、安装依赖、设置端口映射等关键步骤。

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

格式

FROM

RUN 写的是系统镜像中的命令

COPY 复制本地资源到指定目录

EXPOSE 端口开放

创建ngxin dockerfile 练手

FROM centos:centos7
# 创建nginx的用户组,并创建好相应的data和conf
RUN mkdir /data && mkdir /conf && groupadd -r nginx && useradd -r -g nginx nginx

# copy centos源 到docker  
COPY ./epel-7.repo /etc/yum.repos.d/epel.repo

# 安装Nginx所需要的依赖包
RUN yum update -y \
    && yum clean all  \
    && yum makecache  \
    && yum -y install  gcc gcc-c++ autoconf automake make zlib zlib-devel net-tools openssl* pcre* wget \
    && yum clean all  && rm -rf /var/cache/yum/*
    
# 复制 Nginx tar 包 ( http://nginx.org/download 去预先下载到本地 当前目录)
COPY ./nginx-1.17.10.tar.gz  /data/nginx-1.17.10.tar.gz

RUN cd /data \
   && tar -zxvf nginx-1.17.10.tar.gz \
   && cd nginx-1.17.10 \
   && ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
   && make && make install && rm -rf /data/nginx-1.17.10.tar.gz  && rm -rf /data/nginx-1.17.10
   
  
COPY ./nginx.conf /conf

# 全局使用nginx,软链接

RUN ln -s /usr/local/nginx/sbin/* /usr/local/sbin

#声明端口
EXPOSE 80

#执行一条命令 nginx -c /conf/nginx.conf

ENTRYPOINT ["/usr/local/nginx/sbin/nginx","-c","/conf/nginx.conf","-g","daemon off;"]

nginx.conf

user  root;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    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"';
    sendfile        on;
    keepalive_timeout  65;
    server {
            listen       80;
            access_log  /usr/local/nginx/logs/$host  main;
            location / {
                root  /www; #php容器的目录
                default_type text/html;
            }
            location  ~ \.php/?.*  {
                    default_type text/html;
                    #做php-fpm 配置,注意地址
                    root           /www;  #php-fpm容器当中的路径,不是nginx容器路径
                    fastcgi_index  index.php;

                    #fastcgi_pass   192.168.1.10:9002; #本地IP+本地php容器暴露出来的端口

                    fastcgi_pass   168.100.100.101:9000; #PHP容器IP+php端口

                    #为php-fpm指定的根目录
                    fastcgi_param  SCRIPT_FILENAME  $DOCUMENT_ROOT$fastcgi_script_name;
                    #注意是容器当中的位置

                    #定义变量 $path_info ,用于存放pathinfo信息
                    set $path_info "";
                    if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                            #将文件地址赋值给变量 $real_script_name
                            set $real_script_name $1;
                                #将文件地址后的参数赋值给变量 $path_info
                            set $path_info $2;
                        }
                         #配置fastcgi的一些参数
                        fastcgi_param SCRIPT_NAME $real_script_name;
                        fastcgi_param PATH_INFO $path_info;
                        include        /usr/local/nginx/conf/fastcgi_params;
                 }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                  root   html;
            }
        }
}


上面命令复制到 DockerFile 文件中 然后执行

目录

image

docker built -f nginx

最后出现

Successfully built 4ae7e42f38a9
Successfully tagged my-nginx:latest

就行了

测试

docker run -itd --name my-nginx my-nginx

docker exec -it my-nginx bash 进入容器

docker stop my-nginx|xargs docker rm 停止并删除容器

跟本地82端口绑定

docker run -itd -p 82:80 --name my-nginx my-nginx

构建PHP镜像

FROM php:7.3-fpm-alpine

# Version
ENV PHPREDIS_VERSION 4.0.0

# Libs
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
    && apk  add  \
        curl \
        vim  \
        wget \
        git \
        openssl-dev\
        zip \
        unzip \
        g++  make autoconf


RUN mv "$PHP_INI_DIR/php.ini-production"  "$PHP_INI_DIR/php.ini" \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install pcntl \
    && docker-php-ext-install sysvmsg

# Redis extension
RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz \
    && pecl install /tmp/redis.tar.tgz \
    && rm -rf /tmp/redis.tar.tgz \
    && docker-php-ext-enable redis
# 修改php.ini的文件 extension=redis.so

EXPOSE 9000
#设置工作目录
WORKDIR  /www

docker build -t my-php .

启动PHP

docker run -itd -p 9002:9000 --name my-php my-php

构建Redis

FROM centos:centos7
RUN groupadd -r redis && useradd -r -g redis redis

RUN mkdir data ;\
    yum update -y ; \
    yum -y install gcc automake autoconf libtool make wget epel-release gcc-c++;

COPY ./redis-5.0.7.tar.gz redis-5.0.7.tar.gz
RUN mkdir -p /usr/src/redis; \
    tar -zxvf redis-5.0.7.tar.gz -C /usr/src/redis; \
    rm -rf redis-5.0.7.tar.gz; \
    cd /usr/src/redis/redis-5.0.7 && make ; \
    cd /usr/src/redis/redis-5.0.7 && make install

COPY ./conf/redis.conf /usr/src/redis/redis-5.0.7/redis.conf

EXPOSE 6379

ENTRYPOINT ["redis-server", "/usr/src/redis/redis-5.0.7/redis.conf"]

image

docker build -t my-redis .

启动Redis

docker run -itd -p 6380:6379 --name my-redis my-redis

删除所有容器命令

docker stop $(docker ps -a -q)|xargs docker rm

本地目录与容器目录共享 nginx容器为例

docker run -itd -v /Users/bob/workspace/服务/docker/nginx/conf:/conf -p 82:80 --name my-nginx my-nginx

之后在 对应的本地目录或者容器中对应的目录 新增删除文件 都会同步

进入 PHP容器

docker exec -it my-php sh

www 目录下创建个index.php

vi index.php

<?php
echo 'hello world';

本地访问 http://127.0.0.1:82/index.php

就能输出 hello world

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值