docker容器如何进行LNMP部署

img

img

img

img

编写nginx服务的dockerfile文档,满足如下要求:
1)基础镜像:centos:7
2)作者信息:(你自己名字的首字母缩写)
3)下载:gcc-c++ zlib-devel pcre-devel make
4)将nginx-1.16.1.tar.gz解压并赋值到容器中的/tmp中
5)进入到容器中的/tmp/nginx-1.16.1文件夹中,并进行配置、编译;
提示:./configure --prefix=/usr/local/nginx
 make -j 2 && make install
6)将本地nginx.conf替换容器中的/usr/local/nginx/conf/nginx.conf文件
7)端口80
8)容器启动后执行命令/usr/local/nginx/sbin/nginx -g daemon off;

编写php服务的dockerfile文档,满足如下要求:
1)基础镜像:centos:7
2)作者信息:姓名首字母
3)下载gcc gcc-c++ gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel make perl
4)将本地文件libzip-1.2.0.tar.gz解压并复制到容器中的/tmp中
5)通过以下命令对libzip进行配置编译:
cd /tmp/libzip-1.2.0 && ./configure && make &&  make install
6)在容器中复制并解压文件php-7.3.9.tar.gz到/tmp文件夹中,然后进入到/tmp/php-7.3.9文件夹下,并通过以下命令进行编译:

```bash
 ./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
```bash
6)在容器中将/usr/local/lib/libzip/include/zipconf.h文件复制到 /usr/local/include/文件加下
7)继续进行编译make -j 4 && make install
8)在容器中将/usr/local/php/etc/php-fpm.conf.default文件复制为 /usr/local/php/etc/php-fpm.conf文件
9)在容器中将文件/usr/local/php/etc/php-fpm.d/www.conf.default 复制成/usr/local/php/etc/php-fpm.d/www.conf 文件
10)在容器中修改/usr/local/php/etc/php-fpm.d/www.conf文件中的127.0.0.10.0.0.0
11)在容器中复制./sapi/fpm/init.d.php-fpm文件成 /etc/init.d/php-fpm文件
12)在容器中修改/etc/init.d/php-fpm权限为可执行
13)端口9000
14)在容器启动时执行命令:/etc/init.d/php-fpm start  && tail -F /var/log/messages

根据下面需求,完成lnmp的docker-compose.yml文档的编写
1)服务名:nginx
  该服务的主机名: nginx
  镜像:由本地文件Dockerfile构建
  端口:8080
  链接网络:lnmp
  卷:./wwwroot:/usr/local/nginx/html
2)服务php
  主机名:php
  镜像:由本地文件Dockerfile构建
  链接网络:lnmp
  卷:./wwwroot:/usr/local/nginx/html
3)服务mysql
  主机名:mysql
  镜像:mysql:5.7
  端口:33073306
  链接网络:lnmp
  卷:./mysql/conf:/etc/mysql/conf.d
    ./mysql/data:/var/lib/mysql
  环境变量:
    MYSQL_ROOT_PASSWORD: 123456
    MYSQL_DATABASE: wordpress
    MYSQL_USER: user
    MYSQL_PASSWORD: user123
4)网络:
    lnmp
访问lnmp端口,表示成功

搭建Harbar
1)准备:两台机子,一个作为客户端,一个为服务端。均已安装好:docker,docker-compose,Python
2)下载Harbar
https://github.com/vmware/harbor/releases/download/v1.2.2/harbor-online-installer-v1.2.2.tgz
3)修改配置文件
ip地址为服务器地址
4)启动
6)验证是否成功:容器是否已经启动,是否可以登录网页界面
1.服务器端镜像上传
1)登录账户
(user:admin
passwd:Harbor12345)
2)创建一个项目myproject-kgc
3)服务器端登录Harbor
docker login -u admin -p Harbor12345 http://127.0.0.1
4)将镜像Nginx上传至Harbor仓库
docker tag nginx 127.0.0.1/myproject-kgc/nginx:v1
docker pushu 127.0.0.1/myproject-kgc/nginx:v1
5)查看Harbor界面
1)修改docker.service配置文件
2)将tomcat上传至Harbar仓库

  • 看下这篇博客,也许你就懂了,链接:Docker容器编译LNMP
  • 除此之外, 这篇博客: docker安装与部署中的 在docker上搭建LNMP 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 命令大全
    https://www.runoob.com/docker/docker-command-manual.html

    1、查看nginx状态
    netstat -lnp
    看到它占用了80端口

    2、使用kill结束nginx(方便测试docker上的nginx)

    3、使用命令docker pull nginx下载nginx

    4、使用命令docker pull php下载php

    5、开启docker中的nginx
    docker run --rm -d -p 80:80 --name nginx nginx

    涉及的参数有

    --rm:表示这个容器执行完后会被直接销毁。
    --name:指定这个容器的名称。
    -d:表示这个容器会在后台运行。
    -p:表示开放容器的80端口到主机的80端口。
    -v:表示将nginx的配置文件挂载到容器的对应目录下。
    

    终端示例

    [root@VM_0_6_centos ~]#  docker run --rm -d -p 80:80 --name nginx nginx
    ba3a9c38a22d35aecc3a10ac6b6d04e9675d067dc606ef43aa2ecb31ed8a5623
    [root@VM_0_6_centos ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                NAMES
    ba3a9c38a22d        nginx               "nginx -g 'daemon of…"   14 seconds ago      Up 13 seconds                 0.0.0.0:80->80/tcp   nginx
    06af4d57d5ab        9f38484d220f        "/bin/bash"              20 minutes ago      Exited (127) 19 minutes ago                        dreamy_germain
    [root@VM_0_6_centos ~]# 
    

    6、使用docker rm <names>关闭docker容器
    docker stop <names>

    7、查看容器
    docker container ls
    docker ps -a 所有容器(包括未运行)
    参考 https://www.runoob.com/docker/docker-ps-command.html

    8、使用-v设置nginx的挂载目录
    docker run --rm -d -p 80:80 -v ~/nginx/www/:/usr/share/nginx/html --name nginx nginx
    也可以挂载各种配置文件。有点乱,找不到docker默认的配置文件和挂载目录在哪里。

  • 以下回答由chatgpt基于相关博客总结生成:

    LNMP部署步骤如下:

    1.安装Docker和Docker-Compose

    Docker和Docker-Compose是部署容器化应用的必备工具。这里不再过多赘述,具体安装可以参考官方文档。

    2.创建Dockerfile

    在应用根目录下创建一个名为Dockerfile的文件,用于定义部署镜像。具体内容如下:

    # 指定基础镜像
    FROM centos:7
    
    MAINTAINER Your Name
    
    # 安装常见工具
    RUN yum update -y && yum clean all
    RUN yum install -y wget curl vim epel-release
    
    # 安装Nginx
    RUN yum install -y nginx
    
    # 安装PHP及相关扩展
    RUN yum install -y php php-fpm php-common php-mysql php-cli php-mbstring php-gd
    
    # 安装MySQL客户端及其它依赖
    RUN yum install -y mariadb
    
    # 启动Nginx、PHP、MySQL服务
    CMD ["/usr/sbin/init"]
    

    3.创建Docker-Compose文件

    在应用根目录下创建一个名为docker-compose.yml的文件,用于定义一组相关联的容器。具体内容如下:

    version: '3.8'
    services:
      nginx:
        build: .
        ports:
          - "80:80"
        volumes:
          - ./web:/var/www/html
          - ./nginx:/etc/nginx/conf.d
        depends_on:
          - php
        restart: always
      php:
        build: .
        volumes:
          - ./web:/var/www/html
        depends_on:
          - db
        restart: always
      db:
        image: mariadb
        environment:
          - MYSQL_ROOT_PASSWORD=my-secret-pw
          - MYSQL_DATABASE=my_database
          - MYSQL_USER=my_user
          - MYSQL_PASSWORD=my_password
        volumes:
          - ./mysql:/var/lib/mysql
        restart: always
    

    其中,nginx、php和db分别对应了三个容器。nginx的端口映射为本机80端口,映射了本机的web和nginx目录到nginx容器中对应目录。php容器映射了本机的web目录到容器中的/var/www/html目录。db容器使用了mariadb镜像,并开放了3306端口,设定了MySQL的root密码、数据库名、用户名和密码,并将MySQL数据挂载到了本机的mysql目录。

    4.运行容器

    在应用根目录执行以下命令即可启动容器:

    docker-compose up -d
    

    其中,-d参数表示后台启动。

    5.访问应用

    通过浏览器访问http://localhost 即可查看应用是否部署成功。

    注意事项:

    1.在搭建过程中要注意网络安全,及时更新各组件的版本。

    2.容器中的应用进行调试需要用到Xdebug等调试工具,建议在容器中进行安装。

    3.启动容器时会遇到许多问题,如果您的资深IT专家水平不够,建议在网上寻找相关的资料了解,并逐一解决问题。