GVKun编程网logo

使用 docker 搭建 wordpress(使用 docker 搭建开发环境)

2

本文将介绍使用docker搭建wordpress的详细情况,特别是关于使用docker搭建开发环境的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于1

本文将介绍使用 docker 搭建 wordpress的详细情况,特别是关于使用 docker 搭建开发环境的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、docker compose in bitbucket - 无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程 docker 守护进程是否正在运行?、Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock、Docker Nginx 背后的 Docker Wordpress/Apache - 端口号问题的知识。

本文目录一览:

使用 docker 搭建 wordpress(使用 docker 搭建开发环境)

使用 docker 搭建 wordpress(使用 docker 搭建开发环境)

下面由wordpress/" target="_blank">wordpress教程栏目为大家介绍如何使用 docker 搭建 wordpress,希望对需要的朋友有所帮助!

使用 docker 搭建 wordpress

导语

这不是一篇正规搭建 wordpress 的文章,是基于上一篇的基础之上,进行的实现。最终的实现是使用 nginx 做代理,独立的 wordpress 容器,连接 laradock 的 MySQL 做存储。

修改 nginx 代理

相较于 laradock 的配置,只是修改监听的域名以及转发的端口。在 /etc/nginx/conf.d/ 目录下新建 wordpress.conf 文件,如下

server {
    listen  80;
    server_name  blog.you_site.com;
    location / {
        proxy_set_header  Host  $http_host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://[宿主机IP]:8001;
    }
}
登录后复制

修改之后记得重启

搭建 wordpress 容器

1.拉取镜像 docker pull wordpress

2.因为 wordpress 要连接 MySQL 容器,正好 laradock 就有,就用这个好了。连接的方式不用 --link,用 --network,可以参考这里

3.laradock 中 MySQL 的 network 在 docker-compose.yml 文件中有写,如下

d8548cbca5d52e63939aac7912ffc9b.png

同时使用 docker network ls 查看,可以看到 laradock_backend 这个网络。显而易见使用 laradock_backend 就可以

1.搭建容器 docker run -d --name wordpress -p 8001:80 --network laradock_backend wordpress

2.最后一步,开启服务器(宿主机)8001端口

结语

打开网址,出现了配置界面。将 Database Host 设置为 mysql 就可以。其他的数据表、用户等不在讨论范围之内。

以上就是使用 docker 搭建 wordpress的详细内容,更多请关注php中文网其它相关文章!

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

docker构建nginx容器系列问题


background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑

1.nginx服务器根目录问题

docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同

eg:

run一个niginx容器

<span>//80端口被占用,so...</span>
$ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx
$ sudo docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
<span>1801</span>a32aab54        nginx               <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago       Up <span>2</span> minutes        <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-&gt;</span><span>800</span>/tcp   berserk_kare
登录后复制

进入容器内部

<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash
root<span>@1801a32aab54</span><span>:/</span><span># </span>
登录后复制

查看nginx目录

<span># cd /etc/nginx/</span>
conf<span>.d</span>/         koi-utf         mime<span>.types</span>      nginx<span>.conf</span>      uwsgi_params    
fastcgi_params  koi-win         modules/        scgi_params     win-utf  
登录后复制

可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled

继续查看nginx配置

<span># cat /conf.d/default.conf</span><span>server</span> {
    listen       <span>80</span>;
    server_name  localhost;

    <span>#charset koi8-r;</span><span>#access_log  /var/log/nginx/log/host.access.log  main;</span>    location / {
        root   /usr/share/nginx/html;
        <span>index</span><span>index</span>.html <span>index</span>.htm;
    }

    <span>#error_page  404              /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span>
    error_page   <span>500</span><span>502</span><span>503</span><span>504</span>  /<span>50</span>x.html;
    location = /<span>50</span>x.html {
        root   /usr/share/nginx/html;
    }
    <span>#...省略php-fpm配置,好长..</span>
}
登录后复制

根目录配置: root /usr/share/nginx/html;

测试

<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" &gt;index.html</span>
登录后复制

php-fpm配置相关

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

docker compose in bitbucket - 无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程 docker 守护进程是否正在运行?

docker compose in bitbucket - 无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程 docker 守护进程是否正在运行?

如何解决docker compose in bitbucket - 无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程 docker 守护进程是否正在运行?

我想将容器组从 bitbucket 管道部署到 Azure 容器实例。我有以下 bitbucket-pipelines.yml 文件:

  1. image: ubuntu:20.04
  2. clone:
  3. depth: 5
  4. options:
  5. max-time: 15
  6. pipelines:
  7. branches:
  8. master:
  9. - step:
  10. name: Deploy to aci
  11. deployment: test
  12. script:
  13. - apt-get update
  14. - apt-get install curl -y
  15. - curl -L https://raw.githubusercontent.com/docker/compose-cli/main/scripts/install/install_linux.sh | sh
  16. - curl -sSL https://github.com/docker/compose-cli/releases/download/v2.0.0-beta.3/docker-compose-linux-amd64 -o docker-compose
  17. - chmod +x docker-compose
  18. - mkdir -p ~/.docker/cli-plugins
  19. - mv docker-compose ~/.docker/cli-plugins/docker-compose
  20. - docker login azure --client-id $CLIENTID --tenant-id $TENANTID --client-secret $SECRET
  21. - docker login myregistry.azurecr.io -u $USERNAME -p $PASS
  22. - docker context create aci myContext --subscription-id "00000000-0000-0000-0000-000000000000" --resource-group "myResouceGroup" --location "westeurope"
  23. - docker --context myContext compose up
  24. services:
  25. - docker

我在执行 docker --context myContext compose up 命令时遇到以下错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

所有其他 docker 命令似乎都在工作,所以 docker-compose cli 似乎有问题,它没有找到正在运行的守护进程。

我尝试在 export DOCKER_HOST="tcp://0.0.0.0:2375" 之前添加 docker compose up,但没有帮助。

有什么我遗漏的吗?

更新 1:

如果我从以下位置更新最后一条命令:

  1. - docker --context myContext compose up

致:

  1. - docker context use myContext
  2. - docker compose up

我收到不同的错误: Failed to dial gRPC: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing unable to upgrade to h2c,received 403"

更新 2

添加了 docker versiondocker ps 以获取更多信息。输出:

docker version

  1. Client: Docker Engine - Community
  2. Cloud integration: 1.0.17
  3. Version: 19.03.15
  4. API version: 1.40
  5. ...
  6. Server: Docker Engine - Community
  7. Engine:
  8. Version: 20.10.5
  9. API version: 1.41 (minimum version 1.12)
  10. ...

docker ps

  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

解决方法

docker daemon 是否正在运行? 是s.o 权限、docker-in-docker 等常见的错误,而且这个错误与docker-compose 无关。

就您而言,您是在 docker 容器内执行 docker 命令,因此请尝试在管道的开头添加:

  1. options:
  2. docker: true

检查这些解决方案是否存在docker 守护进程是否正在运行?错误:

  • Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running?
  • How to connect to docker daemon in Bitbucket pipeline
  • https://github.com/docker/for-linux/issues/535
  • https://forums.docker.com/t/cannot-connect-to-the-docker-daemon-is-the-docker-daemon-running-on-this-host/8925

我还建议在使用 docker-compose 配置的 docker 上下文之前尝试使用 基本 docker 命令(简单构建或运行)。例如,当执行这些命令之一时,许多用户会通知相同的错误(是否 docker 守护程序正在运行?):

  • 码头信息
  • docker 运行...
  • docker ps

Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock

Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock

在 Docker 容器里面使用 docker run/docker build

Docker 容器技术目前是微服务/持续集成/持续交付领域的第一选择。而在 DevOps 中,我们需要将各种后端/前端的测试/构建环境打包成 Docker 镜像,然后在需要的时候,Jenkins 会使用这些镜像启动容器以执行 Jenkins 任务。

为了方便维护,我们的 CI 系统如 Jenkins,也会使用 Docker 方式部署。 Jenkins 任务中有些任务需要将微服务构建成 Docker 镜像,然后推送到 Harbor 私有仓库中。 或者我们所有的 Jenkins Master 镜像和 Jenkins Slave 镜像本身都不包含任何额外的构建环境,执行任务时都需要启动包含对应环境的镜像来执行任务。

我们的 Jenkins Master、Jenkins Slaves 都是跑在容器里面的,该如何在这些容器里面调用 docker run 命令启动包含 CI 环境的镜像呢? 在这些 CI 镜像里面,我们从源码编译完成后,又如何通过 docker build 将编译结果打包成 Docker 镜像,然后推送到内网仓库呢?

答案下面揭晓。

一、原理说明:/var/run/docker.sock

Docker 采取的是 Client/Server 架构,我们常用的 docker xxx 命令工具,只是 docker 的 client,我们通过该命令行执行命令时,实际上是在通过 client 与 docker engine 通信。

我们通过 apt/yum 安装 docker-ce 时,会自动生成一个 systemd 的 service,所以安装完成后,需要通过 sudo systemctl enable docker.service 来启用该服务。 这个 Docker 服务启动的,就是 docker engine,查看 /usr/lib/systemd/system/docker.service,能看到有这样一条语句:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

默认情况下,Docker守护进程会生成一个 socket(/var/run/docker.sock)文件来进行本地进程通信,因此只能在本地使用 docker 客户端或者使用 Docker API 进行操作。 sock 文件是 UNIX 域套接字,它可以通过文件系统(而非网络地址)进行寻址和访问。

因此只要以数据卷的形式将 docker 客户端和上述 socket 套接字挂载到容器内部,就能实现 "Docker in Docker",在容器内使用 docker 命令了。具体的命令见后面的「示例」部分。

要记住的是,真正执行我们的 docker 命令的是 docker engine,而这个 engine 跑在宿主机上。所以这并不是真正的 "Docker in Docker".

二、示例

在容器内部使用宿主机的 docker,方法有二:

  1. 命令行方式:将 /usr/bin/docker 映射进容器内部,然后直接在容器内部使用这个命令行工具 docker
    • 需要的时候,也可以将 /etc/docker 文件夹映射到容器内,这样容器内的 docker 命令行工具也会使用与宿主机同样的配置。
  2. 编程方式:在容器内部以编程的方式使用 docker
    • 通过 python 使用 docker: 在 Dockerfile 中通过 pip install docker 将 docker client 安装到镜像中来使用

容器的启动方式也有两种,如下:

1. 直接通过 docker 命令启动

示例命令如下:

docker run --name <name> \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/bin/docker:/usr/bin/docker \
    --user root \
    <image-name>:<tag>

**必须以 root 用户启动!(或者其他有权限读写 /var/run/docker.sock 的用户)**然后,在容器内就能正常使用 docker 命令,或者访问宿主机的 docker api 了。

2. 使用 docker-compose 启动

docker-compose.yml 文件内容如下:

version: ''3.3''
services:
  jenkins-master:
    image: jenkinsci/blueocean:latest
    container_name: jenkins-master
    environment:
      - TZ=Asia/Shanghai  # 时区
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - ./jenkins_home:/var/jenkins_home  # 将容器中的数据映射到宿主机
      - /usr/bin/docker:/usr/bin/docker  # 为容器内部提供 docker 命令行工具(这个随意)
      - /var/run/docker.sock:/var/run/docker.sock  # 容器内部通过 unix socket 使用宿主机 docker engine
    user: root  # 必须确保容器以 root 用户启动!(这样它才有权限读写 docker.socket)
    restart: always

然后通过 docker-compose up -d 即可后台启动容器。

Docker 中的 uid 与 gid

通过上面的操作,我们在容器内执行 docker ps 时,还是很可能会遇到一个问题:权限问题

如果你容器的默认用户是 root,那么你不会遇到这个问题,因为 /var/run/docker.sock 的 onwer 就是 root.

但是一般来说,为了限制用户的权限,容器的默认用户一般都是 uid 和 gid 都是 1000 的普通用户。这样我们就没有权限访问 /var/run/docker.sock 了。

解决办法:

方法一(不一定有效):在构建镜像时,最后一层添加如下内容:

# docker 用户组的 id,通常都是 999
RUN groupadd -g 999 docker \
    && usermod -aG docker <your_user_name>

这样我们的默认用户,就能使用 docker 命令了。

P.S. 999 不一定是 docker 用户组,所以上述方法某些情况下可能失效。这时还是老老实实通过 docker run -u root 启动容器吧。(或者在 docker-compose.yml 中添加 user: root 属性)

参考

  • Docker in Docker - 王柏元

Docker Nginx 背后的 Docker Wordpress/Apache - 端口号问题

Docker Nginx 背后的 Docker Wordpress/Apache - 端口号问题

如何解决Docker Nginx 背后的 Docker Wordpress/Apache - 端口号问题

我在使用 Nginx docker 镜像获取 wordpress docker 镜像时遇到问题。

python/django 容器在 Nginx 上工作得很好,但 wordpress/apache 有问题。我可以使用 https 访问 django 站点。我无法使用 https 进入 wordpress。事实上,当我访问我的网站 site.com/wp 时,我会返回 site.com:8080/wp,因此出于某种原因它是通过端口返回的8080,而不是 44380。我已经尝试将 wordpress 站点设置为根位置 /(在 default.conf 文件中),但它仍然存在相同的问题(然后我得到 site.com:8080)。 wordpress 功能正常,我可以照常编辑网站。

Nginx 的 default.conf 文件

  1. disable_symlinks off;
  2. ssl_certificate xxx
  3. ssl_certificate_key xxx
  4. server {
  5. listen 80;
  6. return 301 https://$host$request_uri;
  7. }
  8. server {
  9. listen 443 ssl;
  10. server_name site.com;
  11. location / {
  12. proxy_pass http://django:8000; #django container
  13. }
  14. location /static {
  15. alias /path/to/static;
  16. }
  17. location /wp {
  18. proxy_set_header X-Real-IP $remote_addr;
  19. proxy_set_header X-Forwarded-For $remote_addr;
  20. proxy_set_header Host $host;
  21. proxy_pass http://wordpress:80; #the wordpress container
  22. }
  23. }

docker yml

  1. version: ''3.7''
  2. services:
  3. django:
  4. restart: always
  5. build:
  6. context: .
  7. dockerfile: docker-django #django gunicorn server,python image
  8. ports:
  9. - "8000:8000"
  10. wordpress:
  11. restart: always
  12. build:
  13. context: .
  14. dockerfile: docker-wordpress #docker wordpress-apache image
  15. # image: wordpress:latest
  16. volumes:
  17. - ./www/html:/var/www/html
  18. - ./etc/apache2:/etc/apache2
  19. ports:
  20. - "8080:80"
  21. Nginx:
  22. restart: always
  23. build:
  24. context: .
  25. dockerfile: docker-Nginx #docker Nginx image
  26. # image: Nginx
  27. volumes:
  28. - ./xx/static:/usr/xx/static
  29. - ./Nginx/conf.d:/etc/Nginx/conf.d
  30. ports:
  31. - "443:443"
  32. - "80:80"
  33. depends_on:
  34. - django
  35. - wordpress

解决方法

似乎 wordpress 容器正在从 mysql 中提取 8080 端口号,我最初将其设置为用于本地测试。

通过将这些行添加到 wp-config.php 来覆盖对我有用的 mysql 存储站点名称

  1. define( ''WP_HOME'',''https://'' . $_SERVER[''HTTP_HOST''] . ''/'' );
  2. define( ''WP_SITEURL'',''https://'' . $_SERVER[''SERVER_NAME''] . ''/'' );

我们今天的关于使用 docker 搭建 wordpress使用 docker 搭建开发环境的分享就到这里,谢谢您的阅读,如果想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、docker compose in bitbucket - 无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程 docker 守护进程是否正在运行?、Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock、Docker Nginx 背后的 Docker Wordpress/Apache - 端口号问题的相关信息,可以在本站进行搜索。

本文标签: