@docker_ru

Страница 848 из 1375
Vaderoff
01.11.2018
19:35:31
Чуваки, знакомлюсь с докером, можете скинуть пример докерфайла для комбинации python3 flask gunicorn

Vasiliy
01.11.2018
19:36:13
Чуваки, знакомлюсь с докером, можете скинуть пример докерфайла для комбинации python3 flask gunicorn
вот https://yandex.ru/search/?text=docker%20python3%20flask%20gunicorn&from=os&clid=1836588&lr=2 правда сами файлы на разумность не смотрел - но для старта и так сойдёт, если оно работает, конечно.

Vaderoff
01.11.2018
19:43:53
Да там все чет не то, там готовые образы, мне нужно понять как свой собирать.

Google
Vaderoff
01.11.2018
19:44:01
такой вопросик

Vasiliy
01.11.2018
19:44:56
Да там все чет не то, там готовые образы, мне нужно понять как свой собирать.
ну а как бы ты его собирал без докера ? pip install -r requrements ? дальше ?

рекомендую сделать docker run —rm -it ubuntu bash и потом настраивать командами сами команды копировать в dockerfile

Vasiliy
01.11.2018
19:47:32
но отвечая на твой вопрос - copy нужно делать, т.к. в образе докера нет файла requirements.txt

А можно пример?
да, конечно: Идём по ссылке 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

К слову, Dockerfile не самый оптимальный, но ты сначала разберись - что там написано.

Vaderoff
01.11.2018
19:49:56
но отвечая на твой вопрос - copy нужно делать, т.к. в образе докера нет файла requirements.txt
То есть сначала надо сделать копи, а потом вызывать pip3 install -r requirements ?

И в какую папку лучше всего делать копи?

Vasiliy
01.11.2018
19:50:52
прочитал бы ты доки про докер и какие-нть гайды на хабре ... чтобы не морочать людей этой фигней - звони в телегу - расскажу.

Alex
01.11.2018
19:51:27
А можно пример?
https://stepik.org/course/1612 вот отсюда можно базис немного почерпнуть

Vasiliy
01.11.2018
19:52:52
То есть сначала надо сделать копи, а потом вызывать pip3 install -r requirements ?
да, ты добавляешь те файлы, которые тебе нужны для работы твоего приложения. некоторые для простоты делают WORKDIR /code ADD . . или даже монтируют .:/code и оттуда уже работают дальше.

no humans
01.11.2018
19:53:26
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

Google
no humans
01.11.2018
19:55:16
в доке есть примеры простые.

Vasiliy
01.11.2018
19:57:04
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
01.11.2018
20:01:12
Ребят, а в CMD можно передавать переменные из окружения? т.е я пишу: CMD ["some_command ${VAR}"] и при запуске делаю -e "VAR=some_val"

Andrey
01.11.2018
20:09:27
да
Что я делаю не так? Вот упрощенный Dockerfile: FROM node:8.11-alpine ARG env # отрабатывает, показывает что я передал во время билда RUN echo ${env} CMD ["echo", "${env}"] При запуске docker run -e "env=test" f8b94c84c042 выдает просто ${env}

Andrey
01.11.2018
20:20:30
я кажись разобрался; CMD ["echo", "${env}"]. - так не работает CMD echo ${env} - так работает

Vasiliy
01.11.2018
20:20:48
Что я делаю не так? Вот упрощенный 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 будет пуста.

увидел коммент, ща

Vasiliy
01.11.2018
20:23:16
я кажись разобрался; 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
01.11.2018
20:27:19
в доке докера лучше всего, честно.
ааа, я кажись понял. если делаю через [] то, судя по доке это "exec form, this is the preferred form". А раскрытием переменных типо ${env} занимается bash/sh и тп. Верно?

Andrey
01.11.2018
20:28:57
ага
Ох, не дадут мне эти фронты жизни спокойной =\ спасибо!

Google
Vasiliy
01.11.2018
20:29:54
Ох, не дадут мне эти фронты жизни спокойной =\ спасибо!
с этими фронтами главный вопрос у меня - как node_modules при билде кешировать

Vasiliy
01.11.2018
20:30:15
Andrey
01.11.2018
20:30:38
а как ?
ща сек

а как ?
# ---- Базовый 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;"]

таким образом, если у тебя package*.json файлы не менялись, возьмет слой из кеша

Vasiliy
01.11.2018
20:33:24
таким образом, если у тебя package*.json файлы не менялись, возьмет слой из кеша
я это еще проще делаю. вопрос в том - что делать, ечли в package-lock один файл поменялся

Alexey
01.11.2018
20:33:28
Короче на части виртуальных машин, почему то внутренний ip докер контейнеров не 172.17.0.0/24 , а 192.168.0.0/24. Кто-нибудь знает как это изменить ? или где ?

Andrey
01.11.2018
20:34:20
Alexey
01.11.2018
20:36:35
конкретнее, 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",

конкретнее, 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",

конкретнее, docker inspect с выводом имени контейнера и ip
"IPPrefixLen": 20, "IPv6Gateway": "", "MacAddress": "02:42:c0:a8:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "303ecf04a20a8a310b92ab13bdc2726ef7b5a16b5c0e4bff9343de862a372d16", "EndpointID": "c66d7ace46801b620411ba8398881f44c37d881a7a4108e65b74b9e4f6229a24", "Gateway": "192.168.0.1", "IPAddress": "192.168.0.2", "IPPrefixLen": 20, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:c0:a8:00:02", "DriverOpts": null } } } } ]

нужно поменять подсеть для контейнеров

Vasiliy
01.11.2018
20:42:15
[ { "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",
убить бы за отсутствие пасты .. ок, 192.168 увидели. теперь тоже самое, но в пасту для 172.* и как создавали оба контейнера ну и в пасту можете ifconfig добавить

Vaderoff
01.11.2018
20:43:20
Vasiliy
01.11.2018
20:43:55
Короче на части виртуальных машин, почему то внутренний ip докер контейнеров не 172.17.0.0/24 , а 192.168.0.0/24. Кто-нибудь знает как это изменить ? или где ?
оу, не до конца прочитал. там по сути 2 варианта - либо etc docker daemon.json либо настройки в systemctl посмотрите ?

Alexey
01.11.2018
20:44:51
Смысл в том, что на одной виртуальной машине контейнеры сами берут себе адреса из одной подсети 172.17 , а на другой виртуальной машине все контейнеры берут адрес 192.168

Google
Vasiliy
01.11.2018
20:47:10
ну и сразу по поводу экзотики - это обычной докер на линуксе ? никакой экзотики - винда/мак/кубер ?

Alexey
01.11.2018
20:47:40
образ на базе centos, работающий на виртуалке centos, которая крутится на debian

просто странно, я всегда думал что контейнеры создаются с сетью 172.17.0.0/24

а тут на на***

у меня из-за того что контейнеры на 192.168.0.0/24 работают, не могут в реальную 192 сеть попасть

поэтому их нужно как то перевести в другую сеть, желательно в 172.17.0.0 (как должно быть по умолчанию)

Vasiliy
01.11.2018
20:51:00
давай с рождения мира - daemon.json, конфиги системд или.что там вместо него

Alexey
01.11.2018
20:51:40


даемон джейсона нет

Vasiliy
01.11.2018
20:52:13
ок, конфиг для запуска докера давай

Alexey
01.11.2018
20:52:15
системд служба докера тоже не имеет в себе записи на 192.168

ща



Vasiliy
01.11.2018
20:53:07
ну раз не имеет - то еще ifconfig

Vasiliy
01.11.2018
20:56:08
о, а откуда на docker0 взялся ip ? может etc network interfaces или что там у тебя вместо него ?

я просто centos смотрел очень давно ..

Alexey
01.11.2018
20:57:17
Google
Alexey
01.11.2018
20:57:30
на всех машинах так

где докер

Vasiliy
01.11.2018
20:57:33
Он там по умолчанию на сентос вешается
конфиг интерфейсов покажи

Alexey
01.11.2018
20:58:42
Vasiliy
01.11.2018
20:59:09
eth0* + docker0 - где там это в centos задаётся.

ну еще я удивлён, что бриджа нигде нет.

Alexey
01.11.2018
20:59:56
ща мне нужно 5 минут, вроде нашел мануал как сеть поменять, протещу отпишусь

спасибо!

Sergey
01.11.2018
21:06:30
ребят а если у меня nginx на сервере уже есть как проксировать запрос на докер контейнер?

Alexey
01.11.2018
21:07:16
eth0* + docker0 - где там это в centos задаётся.
Короче попробовал по этой инструкции. https://support.zenoss.com/hc/en-us/articles/203582809-How-to-Change-the-Default-Docker-Subnet

но проблема в том, что после перезагрузки снова ip стал 192.168

Alexey
01.11.2018
21:08:10
Не пойму откуда он берет 192.168 сеть

в каком конфиге

Sergey
01.11.2018
21:08:17
Vasiliy
01.11.2018
21:08:46
не
тогда просто nginx-gen

Sergey
01.11.2018
21:09:54
тогда просто nginx-gen
спасибо почитаю

Alexey
01.11.2018
21:10:28
grep -R 192.168 /etc ?
Ничего нужного нет, похоже через daemon.json нужно пробовать, ща попробую

Vasiliy
01.11.2018
21:11:16
Ничего нужного нет, похоже через daemon.json нужно пробовать, ща попробую
ну не может адрес из ниоткуда браться попробуй в / поискать

Страница 848 из 1375