docker - 使用 docker-compose.yml 部署

标签 docker docker-compose dockerfile docker-machine

不确定这是否会是一个重复的问题,但我试图找出一些东西,但不确定我是否有与其他人类似的情况。
所以我是 docker 新手,并试图为一个小型网站设置部署。

到目前为止,我有一个包含 3 个文件的文件夹。

  1. index.html - has basic html

  2. Dockerfile - which has


FROM ubuntu:16.04
COPY . /var/www/html/

  1. docker-compose.yml - which has

version: '2.1'
services:
    app:
        build: .
        image: myname/myapp:1.0.0
    nginx:
        image: nginx
        container_name: nginx
        volumes:
            - ./host-volumes:/cont-volumes
        network_mode: "host"
    phpfpm56:
        image: php-fpm:5.6
        container_name: phpfpm56
        volumes:
            - ./host-volumes:/cont-volumes
        network_mode: "host"
    mysql:
        image: mysql:5.7
        container_name: mysql
        ports:
            - "3306:3306"
        volumes:
            - mysql:/var/lib/mysql
volumes:
    mysql:

现在我正在使用 jenkins 来创建构建,将我的所有代码都放到主机卷中以使其可用于容器,然后我会运行
docker-compose build

现在它创建了一个图像,我将它推送到 docker hub .

然后我登录到远程服务器并拉取图像并运行。但这不起作用,因为我仍然需要在容器内运行 docker-compose up。

这是正确的方法还是我在这里遗漏了什么?

最佳答案

执行此操作的标准方法是 将您的代码复制到图像中 .不要绑定(bind)挂载包含您的代码的主机文件夹;相反,使用 Dockerfile COPY指令复制到应用程序代码中(在编译语言中,使用 RUN 命令来构建它)。例如,您的 PHP 容器可能有一个对应的 Dockerfile,看起来像(引用 this base Dockerfile)

FROM php-fpm:5.6
# Base Dockerfile defines a sensible WORKDIR
COPY . .
# Base Dockerfile sets EXPOSE 9000
# Base Dockerfile defines ENTRYPOINT, CMD

然后你的docker-compose.yml会说,部分
version: '3'
service:
  phpfpm56:
    build: .
    image: me/phpfpm56:2019-04-30
    # No other settings

然后你的 nginx 配置会说,部分(使用 Docker Compose 服务名称作为主机名)
fastcgi_pass phpfpm56:9000

如果你在生产中使用它,你需要注释掉 build:我认为的线条。

如果您对没有主机名而不是 localhost 的工作流程非常敏感并且您不需要重建 Docker 镜像来更新代码,您至少需要在完成代码推送后重新启动(某些)容器。
docker-compose stop app phpfpm56
docker-compose up -d

您可能会研究像 Ansible 或 Chef 这样的系统自动化工具来自动化代码推送机制。那些相同的工具也可以只安装 nginx 和 PHP,如果你想避免 Docker 镜像构建顺序,你可能有一个更简单的安装和部署系统,直接在主机上运行服务器。

关于docker - 使用 docker-compose.yml 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55915431/

相关文章:

.net - 通过 Docker 运行 .Net Core 应用程序时无法找到 .XML 文件

nginx - Docker的容器挂载文件夹

DockerFile 单行 vs 多行指令

mysql - 使用 docker compose 的 Spring Boot mysql 应用程序问题

php - 为什么 Docker Compose 重启可能会越来越多地渲染容器输出?

docker - OSX Docker 在没有事件容器的情况下几乎总是消耗大约 4GB 的 RAM

docker - 在 docker 镜像上使用 KeyCloak 运行 Wildfly Swarm

python - Docker找不到配置文件

PHP Docker 容器不处理文件而是提供源代码

docker - 将参数传递给 docker compose