使用docker-compose.yml进行部署

问题描述 投票:1回答:2

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

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

  1. index.html - 有基本的HTML
  2. Dockerfile - 有
FROM ubuntu:16.04
COPY . /var/www/html/
  1. docker-compose.yml - 有
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。

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

docker docker-compose dockerfile docker-machine
2个回答
1
投票

执行此操作的标准方法是将代码复制到映像中。不要绑定装载包含代码的主机文件夹;相反,使用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镜像构建序列,你可能会有一个更简单的安装和部署系统直接在主机上运行服务器。


0
投票

docker-compose up不应该在容器内运行,而应该在docker主机上运行。因此,这可以通过主机上的sh运行,但无论您在何处运行命令,都需要访问composefile。

© www.soinside.com 2019 - 2024. All rights reserved.