From fa964c7fddd7d0d54154ec33fe19101d6df5e252 Mon Sep 17 00:00:00 2001 From: CrimsonTome Date: Thu, 25 Aug 2022 15:16:49 +0000 Subject: [PATCH] complete ouroboros post --- img/docker-secrets.png | Bin 0 -> 8540 bytes img/workflow.png | Bin 0 -> 27257 bytes ...mating-container-updates-with-ouroboros.md | 111 +++++++++++++++++- 3 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 img/docker-secrets.png create mode 100644 img/workflow.png diff --git a/img/docker-secrets.png b/img/docker-secrets.png new file mode 100644 index 0000000000000000000000000000000000000000..322734924b2d7a6be78b30937c54b6b8fe1f7053 GIT binary patch literal 8540 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 q0#RQYkh(5ccwpdvswt literal 0 HcmV?d00001 diff --git a/img/workflow.png b/img/workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..91b73e55bce93aafc2fcff4b394f7df7efeba474 GIT binary patch literal 27257 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 Ut?Z9@_!b4oNhwR#ikk-iADV-lssI20 literal 0 HcmV?d00001 diff --git a/posts/automating-container-updates-with-ouroboros.md b/posts/automating-container-updates-with-ouroboros.md index dee319d..34bb046 100644 --- a/posts/automating-container-updates-with-ouroboros.md +++ b/posts/automating-container-updates-with-ouroboros.md @@ -1,7 +1,7 @@ --- title: Automating container updates with Ouroboros description: How to automate container updates with Ouroboros -date: 2021-08-25 +date: 2022-08-25 tags: - docker - linux @@ -9,4 +9,111 @@ tags: - github - how-to layout: layouts/post.njk ---- \ No newline at end of file +--- + +A few months ago, I started learning about containers using Docker. This has certainly been a fun experience overall (though sometimes frustrating 😛). One *issue* with this is rebuilding the container upon every update when you want to deploy the new image. + +There is however a solution to this problem thankfully. A good friend [Kieran](https://github.com/kieranrobson "Kieran's GitHub account"), who also started learning Docker at around the same time as myself introduced me to [Ouroboros](https://github.com/pyouroboros/ouroboros "Ouroboris Git repo"). Kieran uses this to keep his many Discord bots up to date without having to manually rebuild and bring up each container over and over again, and this seems to work pretty well. It is unfortunate that the project has now been abandonned (last commit in 2020). However the software still functions as it should. The following guide assumes you have some basic experience with Docker. If you have no experience then there are a couple of good posts by Kieran Robson [here](https://docs.kieranrobson.com/tags/docker/) on how to setup docker and portainer. + + +To set this up you will need: + - Docker + - a [DockerHub](https://hub.docker.com/) account + - A GitHub repo with a functioning `Dockerfile` in + + + +## Docker CI + - go to `https://github.com/your-username/your-repo/actions/new` and click on `set up a workflow yourself`. + - remove the existing yaml in the auto generated file and copy the contents from below into it + ```yaml + # This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Publish Docker image + +on: + push: + branches: + - 'main' + +jobs: + push_to_registries: + name: Push Docker image to multiple registries + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + steps: + - name: Check out the repo + uses: actions/checkout@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: | + $/YOUR-IMAGE-NAME-HERE + ghcr.io/${{ github.repository }} + + - name: Build and push Docker images + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + ``` + - the above will build the docker image and push it to the Docker Hub as well as GitHub's registry. + - there are two fields that need editing before this will work. `username: ${{ secrets.DOCKERHUB_USERNAME }}` and `password: ${{ secrets.DOCKERHUB_PASSWORD }}`. These can be configured at `https://github.com/your-username/your-repo/settings/secrets/actions/new` - open this in a new tab. Add your `DOCKERHUB_USERNAME` to one and DOCKERHUB_PASSWORD to another. also change `$/YOUR-IMAGE-NAME-HERE` with an appropriate name and then save. You should end up with something like this + + + + + + - now go back to the action code and save it + - with any luck after some time you should have something like this in your actions tab + + + + + +## Ouroboros setup + + - To run Ouroboros: +```docker +docker run -d --name ouroboros \ +-v /var/run/docker.sock:/var/run/docker.sock \ +pyouroboros/ouroboros +``` + + - Then with the containers involved: + + - stop the containers + - run the snippet below, filling in the details you need to + +```docker +docker run -d \ +--name=INSERT NAME \ +-p AN-UNUSED-PORT:THE-PORT-THE-SERVICE-RUNS-ON \ +--restart unless-stopped \ +DOCKERHUB-USERNAME/IMAGE:TAG +``` +Note that the tag used in this workflow is `main`. + +With any luck you should now have containers automatically update once you push changes to GitHub. \ No newline at end of file