开发者社区 > 云原生 > Serverless > 正文

Docker 部署 WordPress 这个目录怎么搞?软连接好像也不行

Docker 部署 WordPress 这个目录怎么搞?软连接好像也不行

提问35.png

展开
收起
Java工程师 2023-04-16 10:22:47 448 0
3 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云函数计算中使用Docker部署WordPress时,WordPress的目录需要挂载到容器中才能保证WordPress的正常运行。在容器中挂载目录时,可以将WordPress的目录打包成一个.tar文件,并在部署时将该文件挂载到容器的指定路径中。您可以按照以下步骤来进行部署:

    1. 在本地机器上打包WordPress源码,使用tar命令将WordPress的目录打包成一个.tar文件,命令示例为:
    tar czvf wordpress.tar.gz /path/to/wordpress
    

    其中,/path/to/wordpress为WordPress的目录。

    1. 将打包好的wordpress.tar.gz文件上传到OSS(对象存储服务)中,以便在容器中挂载该文件。您可以使用OSS CLI等工具上传文件,参考文档:使用 OSS CLI 上传文件

    2. 创建一个Dockerfile文件来构建WordPress的Docker镜像,示例Dockerfile如下:

    FROM wordpress:5.3.2-php7.2-apache
    COPY wordpress.tar.gz /var/www/html/
    RUN tar xf /var/www/html/wordpress.tar.gz -C /var/www/html/ --strip-components=1
    RUN rm /var/www/html/wordpress.tar.gz
    

    其中,wordpress.tar.gz是您在OSS上上传的WordPress源码包,/var/www/html是WordPress默认安装目录。

    1. 构建Docker镜像,示例命令如下:
    $ docker build -t my-wordpress-image .
    

    其中,my-wordpress-image是您自定义的镜像名称。

    1. 将Docker镜像上传到阿里云容器镜像服务(Container Registry)中,以便在函数计算中使用。您可以使用阿里云CLI或手动上传镜像。上传镜像时,需要将镜像标记为阿里云容器镜像服务的仓库地址,例如:
    $ docker tag my-wordpress-image registry.cn-hangzhou.aliyuncs.com/my-namespace/my-image:v1.0
    

    其中,registry.cn-hangzhou.aliyuncs.com是阿里云容器镜像服务的仓库地址,my-namespace是您创建的命名空间,my-image是您自定义的镜像名称,v1.0是镜像的版本号。

    1. 在阿里云函数计算中创建一个函数,并将WordPress的容器镜像作为函数的运行时,将OSS上的WordPress.tar.gz文件挂载到容器中的/var/www/html/目录下,示例代码如下:
    import requests
    import json
    import base64
    
    def handler(event, context):
        # 构造PodSpec
        pod_spec = {
            "containers": [
                {
                    # 镜像地址改成您自己的镜像地址
                    "image": "registry.cn-hangzhou.aliyuncs.com/my-namespace/my-image:v1.0",
                    "stdin": True,
                    "tty": True,
                    "name": "wordpress",
                    "volumeMounts": [
                        {
                            "mountPath": "/var/www/html",
                            "name": "wordpress"
                        }
                    ]
                }
            ],
            "volumes": [
                {
                    "name": "wordpress",
                    "nfs": {
                        "server": "oss-cn-hangzhou.aliyuncs.com",
                        "path": "/path/to/wordpress.tar.gz",
                        "readOnly": True
                    }
                }
            ]
        }
    
        # 创建Kubernetes Deployment
        deployment = {
            "apiVersion": "apps/v1",
            "kind": "Deployment",
            "metadata": {
                "name": "wordpress"
            },
            "spec": {
                "replicas": 1,
                "selector": {
                    "matchLabels": {
                        "app": "wordpress"
                    }
                },
                "template": {
                    "metadata": {
                        "labels": {
                            "app": "wordpress"
                        }
                    },
                    "spec": {
                        "containers": pod_spec["containers"],
                        "volumes": pod_spec["volumes"]
                    }
                }
            }
        }
    
        # 发送API请求创建Deployment
        url = "https://{0}/apis/apps/v1/namespaces/{1}/deployments".format(
            context.fc_cluster_id, context.fc_namespace)
        resp = requests.post(url, headers={
            "Content-Type": "application/json",
            "Authorization": "Bearer {0}".format(context.fc_token)
        }, json=deployment, verify=False)
        resp.raise_for_status()
    
        # 返回Deployment名称
        return deployment["metadata"]["name"]
    

    其中,/path/to/wordpress.tar.gz是您在OSS上上传的WordPress源码包对象的路径,需要将该路径替换为您上传的实际路径。

    1. 运行函数并测试WordPress是否正常运行。

    值得注意的是,上述步骤中对WordPress的源码进行了打包处理,并将打包后的源码作为一个文件挂载到了容器的指定目录中。这样做可以将WordPress的源码与运行环境隔离开来,避免在部署时每次都要重新下载WordPress源码,同时也保护了您的WordPress源码不被恶意下载或篡改。

    2023-04-30 08:10:10
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    如果您想在 Docker 中部署 WordPress,可以按照以下步骤进行操作:

    安装 Docker 和 Docker Compose,并启动 Docker 服务。

    在您的服务器上创建一个新目录,例如 /var/www/html。

    在该目录下创建一个新目录 wordpress,并进入该目录。

    创建一个 docker-compose.yml 文件,内容如下:

    version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: your_mysql_root_password MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: your_mysql_password wordpress: depends_on: - db image: wordpress:latest ports: - "80:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: your_mysql_password WORDPRESS_DB_NAME: wordpress volumes: - ./wp-content:/var/www/html/wp-content volumes: db_data: 将上述 docker-compose.yml 文件保存到 wordpress 目录下。

    在 wordpress 目录下运行以下命令来启动 WordPress:

    sudo docker-compose up -d 等待 Docker 容器启动完成后,您可以通过浏览器访问 http://your_server_ip 来访问 WordPress。 注意事项:

    在 docker-compose.yml 文件中,您需要将 your_mysql_root_password 和 your_mysql_password 替换为您自己的 MySQL 密码。

    在 docker-compose.yml 文件中,WordPress 的数据将存储在 ./wp-content 目录中,您可以根据需要修改该目录。

    如果您的服务器上已经存在 /var/www/html 目录,您可以将 wordpress 目录重命名为其他名称,例如 mywordpress,并将 docker-compose.yml 文件中的 volumes 部分修改为 - ./mywordpress/wp-content:/var/www/html/wp-content。

    2023-04-16 17:51:48
    赞同 展开评论 打赏
  • home mnt还有data三个根目录.

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-04-16 10:30:03
    赞同 展开评论 打赏

快速交付实现商业价值。

相关电子书

更多
应用 Docker 进行持续交付:用技术改变交付路程 立即下载
从Docker到容器服务 立即下载
Docker@Alibaba——超大规模Docker化的实战经验 立即下载