Как насрать в контейнер (или образ) и не обосраться === --- ## Как жили до контейнеров? - Приложения требуют зависимости (конкретных версий) от хоста. - Версии зависимостей конфликтуют. - Приложения гадят в рандомные места хост-системы, о которых никто кроме него не знает. - Lifecycle на bash-скриптах и systemd. - Можно не взлететь другом дистрибутиве linux из за рандомных проблем. --- ## Нафига контейнеры? - Clean environment - Reproducible on any OS - Portable builds ==(билдить можно тоже где угодно, не надо готовить хост, чтобы билдить)== - Ready for production hosting - https://12factor.net --- ## Чо за контейнеры? [![](https://www.redhat.com/rhdc/managed-files/virtualization-vs-containers.png)](https://www.redhat.com/en/topics/containers/containers-vs-vms) --- ## Docker is Dead ![Untitled](https://hackmd.io/_uploads/HywTI-U8a.png) как какать: - Podman (level up. just better.) - Rancher (liberalized clone) --- ![image](https://hackmd.io/_uploads/r1a2wZ88T.png) --- ## Concepts - **Image** -- VHD (os + app) with RUN command - **Container** -- **Image** after RUN command started - **Registry** -- repository of **Images**   ```graphviz digraph { rankdir=LR registry -> image [label=pull] image -> container [label=run] } ``` --- ## Live Coding ```sh # Recorded with the doitlive recorder #doitlive shell: /bin/bash #doitlive prompt: default rm app.py Containerfile compose.yml ; podman system prune --all podman run hello-world podman run --interactive --tty debian echo "# let's get something from host!" echo 'print("fart")' > app.py podman run --rm -itv "$PWD":/v:z debian podman run --rm -itv "$PWD":/v:z --entrypoint sh python echo "# let's build our own image!" echo 'FROM python' > Containerfile echo 'WORKDIR /app' >> Containerfile echo 'COPY app.py .' >> Containerfile echo 'ENTRYPOINT ["python", "-u", "app.py"]' >> Containerfile cat Containerfile podman build . podman build --tag crap . podman run crap echo "# let's run a web service!" echo 'import http.server' >> app.py echo 'http.server.HTTPServer(("", 80), http.server.SimpleHTTPRequestHandler).serve_forever()' >> app.py podman build -t crap . podman run --name poo --publish 8000:80 crap echo 'services:' > compose.yml echo ' shit:' >> compose.yml echo ' build: .' >> compose.yml echo ' image: crap' >> compose.yml echo ' container_name: poo' >> compose.yml echo ' ports:' >> compose.yml echo ' - "8000:80"' >> compose.yml cat compose.yml podman compose up --detach podman ps podman compose down ``` --- ## Не обосраться удалось ### Но как же насрать? --- ## А как какать? ```graphviz digraph { rankdir=LR registry -> image [label=pull] image -> container [label=run] } ``` Модифицировать окружение контейнера мимо образа! (не надо так) --- Годный реестр: https://goharbor.io/ ---
{"title":"Как насрать в контейнер (или о","description":"Как насрать в контейнер (или образ) и не обосраться","contributors":"[{\"id\":\"5874e258-71fc-40da-8cad-f926475fd9c8\",\"add\":1350,\"del\":1425}]"}
    492 views