Развертывание с помощью docker-compose.yml - PullRequest
1 голос
/ 30 апреля 2019

Не уверен, что это будет повторяющийся вопрос, но я пытался выяснить, но не уверен, что у меня похожая ситуация, как у других.Итак, я новичок в докере и пытаюсь настроить развертывание для небольшого веб-сайта.

Пока у меня есть папка с 3 файлами.

  1. index.html - имеет базовый html

  2. Dockerfile - который имеет

FROM ubuntu:16.04
COPY . /var/www/html/
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 внутри контейнера.

Это правильный подход или я что-то здесь упускаю?

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Стандартный способ сделать это - скопировать ваш код в изображение .Не связывайте хост-папки, содержащие ваш код;вместо этого используйте директиву Dockerfile COPY для копирования в код приложения (а на скомпилированном языке используйте команду RUN для его сборки).Например, ваш контейнер PHP может иметь соответствующий Dockerfile, который выглядит следующим образом (ссылаясь на этот базовый 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 для обновления кода, вам по крайней мере необходимо перезапустить (некоторые из) ваши контейнеры после того, как вы сделали push-код.

docker-compose stop app phpfpm56
docker-compose up -d

Вы можете воспользоваться инструментом автоматизации системы, таким как Ansible или Chef, для автоматизации механизма push-кода.Эти же инструменты могут также просто установить nginx и PHP, и если вы пытаетесь избежать последовательности сборки образа Docker, у вас может быть более простая система установки и развертывания, выполняющая серверы непосредственно на хосте.

0 голосов
/ 30 апреля 2019

docker-compose up должен запускаться не внутри контейнера, а на хосте docker.Так что это может быть выполнено через sh на хосте, но вам нужно иметь доступ к composefile, где бы вы ни запускали команду.

...