Andrew
первая строка - тоже вопрос =)
NM
первая строка - тоже вопрос =)
Профиль докера ? В файле вызов есть внещний сервиса fw
Anonymous
Господа, а чем вы docker-registry чистите ? если не чистите - то почему у вас нет проблем с тысячью образов с тегами по коммитам ?
Dmytro 🇺🇦
чем чистите ?
Командой встроенной в regitry.
Anonymous
она у меня ничего толком не нашла - т.к. под всё есть теги.
Anonymous
из 3х тысяч образов - 18 на удаление. В общем, мало.
Dmytro 🇺🇦
Обычный registry или с Гитлабом?
Anonymous
обычный
DemDev
Добрый вечер Подскажите какие сервисы\скрипты вы используете для сбора данных о Docker swarm и импорту их в Prometheus метрики? А то сейчас имеется самописный Python скрипт, который собирает данные о node'ах, сервисах и прочем в docker-swarme, и затем конвертит их в Prometheus compatible metrics, но написан давно и думаем, что сейчас уже должны быть какие-то готовые решения получше нашего.
Anonymous
а у гитлаба есть плюшки с ним связанные ?
Dmytro 🇺🇦
Там скрипт нужно написать.
Anonymous
Там скрипт нужно написать.
я и интересуюсь - есть что-то рекомендованное или костылить ..
Dmytro 🇺🇦
а у гитлаба есть плюшки с ним связанные ?
Нет, там больше гемора, я так и не нашел как удалять образы
Dmytro 🇺🇦
я и интересуюсь - есть что-то рекомендованное или костылить ..
Сам писал. На просторах интернета есть примеры
Anonymous
вот это смотрю, лишь бы не ошибиться)) https://github.com/andrey-pohilko/registry-cli/blob/master/registry.py
Dmytro 🇺🇦
Создай тестовый image с тегами и гоняй по нему этот скриптец
Dmytro 🇺🇦
Если кто-то удалял образы с GitLab Registry, подскажите ссылочку)
Anonymous
Skopeo
оно точно для очистки реджистри от тысяч образов ? Может я неправильно доку прочитал ?
Anonymous
https://github.com/containers/skopeo/blob/master/README.md
лучше бы на конкретный раздел. Я понял, что удалять образы по одному оно умеет. Мне же политикой нужно.
Andrew
Апишечка
Andrew
Политика - это к Медведеву и виндузятникам
Anonymous
апишечка и у самого registry есть. но спасибо, пойду медведеву позвоню.
Andrew
😁
Anonymous
anoxis/registry-cli к сожалению не может считать образа.
Владимир
обычный
Если обычный, то башем
Anonymous
Если обычный, то башем
s3, но вот читаю как удалять руками а пример баша есть ? тут жеж главное не накосячить .. тут вроде рабочее советуют: https://stackoverflow.com/a/37716286/5215544
Egor
Чуваки, знакомлюсь с докером, можете скинуть пример докерфайла для комбинации python3 flask gunicorn
Anonymous
Чуваки, знакомлюсь с докером, можете скинуть пример докерфайла для комбинации python3 flask gunicorn
вот https://yandex.ru/search/?text=docker%20python3%20flask%20gunicorn&from=os&clid=1836588&lr=2 правда сами файлы на разумность не смотрел - но для старта и так сойдёт, если оно работает, конечно.
Egor
Да там все чет не то, там готовые образы, мне нужно понять как свой собирать.
Egor
такой вопросик
Anonymous
Да там все чет не то, там готовые образы, мне нужно понять как свой собирать.
ну а как бы ты его собирал без докера ? pip install -r requrements ? дальше ?
Anonymous
рекомендую сделать docker run —rm -it ubuntu bash и потом настраивать командами сами команды копировать в dockerfile
Anonymous
но отвечая на твой вопрос - copy нужно делать, т.к. в образе докера нет файла requirements.txt
Anonymous
А можно пример?
да, конечно: Идём по ссылке https://yandex.ru/search/?text=docker%20python3%20flask%20gunicorn&from=os&clid=1836588&lr=2 переходим по первой ссылке - https://github.com/egeland/docker-gunicorn-python3-flask переходим в dockerfile - https://github.com/egeland/docker-gunicorn-python3-flask/blob/master/Dockerfile
Anonymous
К слову, Dockerfile не самый оптимальный, но ты сначала разберись - что там написано.
Egor
но отвечая на твой вопрос - copy нужно делать, т.к. в образе докера нет файла requirements.txt
То есть сначала надо сделать копи, а потом вызывать pip3 install -r requirements ?
Egor
И в какую папку лучше всего делать копи?
Anonymous
прочитал бы ты доки про докер и какие-нть гайды на хабре ... чтобы не морочать людей этой фигней - звони в телегу - расскажу.
Alex
А можно пример?
https://stepik.org/course/1612 вот отсюда можно базис немного почерпнуть
Anonymous
То есть сначала надо сделать копи, а потом вызывать pip3 install -r requirements ?
да, ты добавляешь те файлы, которые тебе нужны для работы твоего приложения. некоторые для простоты делают WORKDIR /code ADD . . или даже монтируют .:/code и оттуда уже работают дальше.
Anton
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
Anton
в доке есть примеры простые.
Anonymous
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
на самом деле лучше что-то такое: FROM python WORKDIR /code ADD requirements.txt . RUN export REQ_PACKAGES='' BUILD_PACKAGES=" ; apt update && \ apt install $REQ_PACKAGES $BUILD_PACKAGES && \ pip3 install -r requirements.txt && \ apt purge $BUILD_PACKAGES && \ apt autodelete USER nobody:nogroup ADD . . ENTRYPOINT [] CMD ['python', 'gunicorn_startup_script.py'] но начать лучше с чего попроще.
Andrey
Ребят, а в CMD можно передавать переменные из окружения? т.е я пишу: CMD ["some_command ${VAR}"] и при запуске делаю -e "VAR=some_val"
Andrey
да
Что я делаю не так? Вот упрощенный Dockerfile: FROM node:8.11-alpine ARG env # отрабатывает, показывает что я передал во время билда RUN echo ${env} CMD ["echo", "${env}"] При запуске docker run -e "env=test" f8b94c84c042 выдает просто ${env}
Andrey
я кажись разобрался; CMD ["echo", "${env}"]. - так не работает CMD echo ${env} - так работает
Anonymous
Что я делаю не так? Вот упрощенный Dockerfile: FROM node:8.11-alpine ARG env # отрабатывает, показывает что я передал во время билда RUN echo ${env} CMD ["echo", "${env}"] При запуске docker run -e "env=test" f8b94c84c042 выдает просто ${env}
1. ARG выполняет только на этапе build на этапе RUN она будет пуская, если ты не передал ENV при запуске контейнера 2. Ты передаёшь переменную ENV VAR, но ожидаешь, что придёт env - конечно env будет пуста.
Anonymous
увидел коммент, ща
Andrey
увидел коммент, ща
Я уж разобрался. Ну точнее просто сменил формат CMD
Anonymous
я кажись разобрался; CMD ["echo", "${env}"]. - так не работает CMD echo ${env} - так работает
$ cat Dockerfile ; docker build -t chat .; docker run -e "env=test" --rm -it chat:latest FROM ubuntu ARG env # отрабатывает, показывает что я передал во время билда RUN echo ${env} CMD ["bash", "-c", "echo ${env}"] Sending build context to Docker daemon 2.048kB Step 1/4 : FROM ubuntu ---> ea4c82dcd15a Step 2/4 : ARG env ---> Using cache ---> acdb8ed37a03 Step 3/4 : RUN echo ${env} ---> Using cache ---> d50b18aaf813 Step 4/4 : CMD ["bash", "-c", "echo ${env}"] ---> Using cache ---> 06d15f8aa125 Successfully built 06d15f8aa125 Successfully tagged chat:latest test
Andrey
У меня просто ощущение что при таком формате он не раскрывает переменные
Andrey
в доке докера лучше всего, честно.
ааа, я кажись понял. если делаю через [] то, судя по доке это "exec form, this is the preferred form". А раскрытием переменных типо ${env} занимается bash/sh и тп. Верно?
Andrey
ага
Ох, не дадут мне эти фронты жизни спокойной =\ спасибо!
Anonymous
Ох, не дадут мне эти фронты жизни спокойной =\ спасибо!
с этими фронтами главный вопрос у меня - как node_modules при билде кешировать
Andrey
а как ?
ща сек
Andrey
а как ?
# ---- Базовый Node ---- FROM node:8.11-alpine AS builder # Создать директорию app WORKDIR /app # ---- Зависимости ---- FROM builder AS dependencies # Используется символ подстановки для копирования как package.json, так и package-lock.json COPY package*.json ./ # Установить зависимости приложения, включая предназначенные для разработки ('devDependencies') RUN npm install && yarn install # ---- Скопировать файлы/билд ---- FROM dependencies AS build ARG BUILD_NUMBER WORKDIR /app COPY . /app # Собрать статические файлы react/vue/angular RUN yarn build && yarn add serve # The production environment FROM nginx:1.14-alpine COPY --from=build /app/build /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Andrey
таким образом, если у тебя package*.json файлы не менялись, возьмет слой из кеша
Anonymous
таким образом, если у тебя package*.json файлы не менялись, возьмет слой из кеша
я это еще проще делаю. вопрос в том - что делать, ечли в package-lock один файл поменялся
Alexey
Короче на части виртуальных машин, почему то внутренний ip докер контейнеров не 172.17.0.0/24 , а 192.168.0.0/24. Кто-нибудь знает как это изменить ? или где ?
Anonymous
а никак. Нельзя подключить volume на этапе билда =(
есть идейка у меня, но не добрался еще
Alexey
конкретнее, docker inspect с выводом имени контейнера и ip
[ { "Id": "acb592fe0313bdc43a39088a9377b959eacceea27187a436548eb8d854349873", "Created": "2018-10-30T13:12:37.246938833Z", "Path": "/bin/sh", "Args": [ "-c", "/bin/bash -c '$APP/run'" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 9425, "ExitCode": 0, "Error": "", "StartedAt": "2018-10-30T13:12:37.914852911Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:c3c35511568f7bb2b3bb91bbea1000f5f1f02d418799c076c068a9178acfb013", "ResolvConfPath": "/var/lib/docker/containers/acb592fe0313bdc43a39088a9377b959eacceea27187a436548eb8d854349873/resolv.conf", "HostnamePath": "/var/lib/docker/containers/acb592fe0313bdc43a39088a9377b959eacceea27187a436548eb8d854349873/hostname", "HostsPath": "/var/lib/docker/containers/acb592fe0313bdc43a39088a9377b959eacceea27187a436548eb8d854349873/hosts", "LogPath": "/var/lib/docker/containers/acb592fe0313bdc43a39088a9377b959eacceea27187a436548eb8d854349873/acb592fe0313bdc43a39088a9377b959eacceea27187a436548eb8d854349873-json.log", "Name": "/eu_cdr_api", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": [ "/etc/localtime:/etc/localtime:ro" ], "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": { "9900/tcp": [ { "HostIp": "", "HostPort": "9900" } ] }, "RestartPolicy": { "Name": "always", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "shareable", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DiskQuota": 0, "KernelMemory": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": 0, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/acpi", "/proc/kcore", "/proc/keys",
Alexey
конкретнее, docker inspect с выводом имени контейнера и ip
"/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware" ], "ReadonlyPaths": [ "/proc/asound", "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/b30b19f37169739d0163a8d2ec9248bbcba4256161c143270ba9c919b7423725-init/diff:/var/lib/docker/overlay2/d8ab4cc7e2d2cb133939ec7cf1a4c380e8a5cda507aa9ae78e2d1d30374480b6/diff:/var/lib/docker/overlay2/1e10e72713fc7d176a46b747a6bb02f312124443bb605ba43784e73234425ccb/diff:/var/lib/docker/overlay2/e0031f1f919bd01c1ccea616b5a0f0478d0e34bdd82dad83ef6b76466addfd48/diff:/var/lib/docker/overlay2/29e51ab97640cfe50802df0737bfe9c041ecaef6e9c1664d6df8f45dc09bb930/diff:/var/lib/docker/overlay2/61f9348164e6d20efe64608d39c63504eeafab691ffe8514da55eac63650fe5a/diff:/var/lib/docker/overlay2/9038b82d28f4f51b4f4d27ffde4562bda058d0dff2f6da32297b91e25e6e38be/diff", "MergedDir": "/var/lib/docker/overlay2/b30b19f37169739d0163a8d2ec9248bbcba4256161c143270ba9c919b7423725/merged", "UpperDir": "/var/lib/docker/overlay2/b30b19f37169739d0163a8d2ec9248bbcba4256161c143270ba9c919b7423725/diff", "WorkDir": "/var/lib/docker/overlay2/b30b19f37169739d0163a8d2ec9248bbcba4256161c143270ba9c919b7423725/work" }, "Name": "overlay2" }, "Mounts": [ { "Type": "bind", "Source": "/etc/localtime", "Destination": "/etc/localtime", "Mode": "ro", "RW": false, "Propagation": "rprivate" } ], "Config": { "Hostname": "eu_cdr_api_1", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "9900/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "param=test_node_1.toml", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "GOPATH=/cdrapi/go", "LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/", "APP=/cdrapi" ], "Cmd": null, "ArgsEscaped": true, "Image": "eu_cdr_api:aat", "Volumes": null, "WorkingDir": "/cdrapi", "Entrypoint": [ "/bin/sh", "-c", "/bin/bash -c '$APP/run'" ], "OnBuild": null, "Labels": { "org.label-schema.schema-version": "= 1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20180402" } }, "NetworkSettings": { "Bridge": "", "SandboxID": "e3e583a78a073ac2f60e30efaa3dfc64c6dc226e5f0b80b7c5f16219217dca3a", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "9900/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "9900" } ] }, "SandboxKey": "/var/run/docker/netns/e3e583a78a07", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "c66d7ace46801b620411ba8398881f44c37d881a7a4108e65b74b9e4f6229a24", "Gateway": "192.168.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "192.168.0.2",