Docker составьте файл для linux Debian и Arch - PullRequest
0 голосов
/ 12 февраля 2020

Надеюсь, я делаю это правильно ...

Сначала мы используем docker -compose с файлом yml. Выглядит примерно так:

sudo docker-compose -f docker-compose.yml up -d

В файле yml есть что-то похожее на:

version: '3.4'
services:
  MyContainer:
    image: "MyContainer:latest"
    container_name: MyContainer
    restart: always
    environment:
        - DISPLAY=unix$DISPLAY
        - QT_X11_NO_MITSHM=1
    devices:
        - /dev/dri:/dev/dri
    volumes:
        - /tmp/.X11-unix:/tmp/.X11-unix:rw
        - /dev/dri:/dev/dri
        - /usr/lib/x86_64-linux-gnu/libXv.so.1:/usr/lib/x86_64-linux-gnu/libXv.so.1:rw
        - ~/MyFiles/:/root/Myfiles
        - ~:/root/home

Теперь проблема начинается. У нас есть две операционные системы, используемые командой. Один раз Ubuntu, а затем Арч и Манджаро. Как опытный Linux Пользователь может знать, что это не будет работать на Arch. Потому что x86_64- linux -gnu - это папка в Ubuntu. Это очень конкретная папка c в системах Debian / Ubuntu. Эквивалентом для Arch / Manjaro и почти для всех остальных Linux Distro является / usr / lib или / usr / lib64.

Конечно, взломать эту папку для связывания с lib, но я не хочу делать это для каждого нового члена команды / машины без Ubuntu.

Так что это всю предварительную информацию, чтобы дать. Мой вопрос:

Какой, по вашему мнению, наилучший подход к решению этой проблемы?

У меня был поиск в Google, но я использовал не те ключевые слова или у людей нет такой проблемы, потому что они проектируют свои контейнеры умнее.

Я знаю, что есть docker тома, которые можно создать и затем использовать в файле docker comppose, но для этого мы потребуется перезапустить настройку на всех наших P C, ноутбуках и серверах, и, если возможно, избежать этого ...

Мне нужно многому научиться, так что если у вас будет больше опыта и Знания, будь так добр и объясни мне мои ошибки.

С уважением, Стефан

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Если вы пытаетесь использовать дисплей хоста, библиотеки хостов, файловую систему хоста и аппаратные устройства хоста, то единственное, что вы получаете из Docker, - это неудобный механизм упаковки, который требует root привилегий для запустить. Было бы значительно проще собрать двоичный файл и запустить приложение непосредственно на хосте.

Если вы должны запустить это в Docker, образ должен быть автономным: весь код и необходимые библиотеки Для запуска приложение должно быть в образе и скопировано в Dockerfile. Большинство образов начинают FROM некоторое Linux распространение (возможно, косвенно через языковую среду выполнения), поэтому вам необходимо установить необходимые библиотеки с помощью диспетчера пакетов.

FROM ubuntu:18.04
RUN apt-get update \
 && apt-get install --no-install-recommends --assume-yes \
      libxv1
...

Привязка бинарных файлов или библиотек в контейнеры приводит не только к несоответствиям файловой системы, как вы описываете, но в некоторых случаях также к проблемам двоичной совместимости. Например, bind mount не будет работать должным образом на хосте MacOS. (Более ранние рецепты для использования сокета Docker внутри контейнера Docker рекомендовали монтировать /usr/bin/docker в контейнере для привязки, но это может привести к проблемам, если хост CentOS Docker был создан с использованием других общих библиотек, чем контейнер Ubuntu Docker.)

0 голосов
/ 12 февраля 2020

разделов томов в docker compose поддерживает переменные среды. Вы можете использовать это, и это будет машинное указание c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...