{"id":17030372,"url":"https://github.com/vsoch/repo2docker-julia","last_synced_at":"2026-05-06T21:32:28.441Z","repository":{"id":141667959,"uuid":"143618901","full_name":"vsoch/repo2docker-julia","owner":"vsoch","description":"build a repo2docker container with jupyter and julia, containershare ready! https://vsoch.github.io/containershare","archived":false,"fork":false,"pushed_at":"2018-08-06T16:06:33.000Z","size":3701,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-22T20:29:44.707Z","etag":null,"topics":["containers","containershare","julia","jupyter","notebook","repo2docker","reproducible","template"],"latest_commit_sha":null,"homepage":"https://vsoch.github.io/repo2docker-julia/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vsoch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-05T14:16:56.000Z","updated_at":"2018-12-20T16:33:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"69e388cf-0af8-45e4-a25e-4e21cc1aa154","html_url":"https://github.com/vsoch/repo2docker-julia","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vsoch/repo2docker-julia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsoch%2Frepo2docker-julia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsoch%2Frepo2docker-julia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsoch%2Frepo2docker-julia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsoch%2Frepo2docker-julia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vsoch","download_url":"https://codeload.github.com/vsoch/repo2docker-julia/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsoch%2Frepo2docker-julia/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32712714,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T19:35:05.142Z","status":"ssl_error","status_checked_at":"2026-05-06T19:35:03.996Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containers","containershare","julia","jupyter","notebook","repo2docker","reproducible","template"],"created_at":"2024-10-14T08:06:34.495Z","updated_at":"2026-05-06T21:32:28.424Z","avatar_url":"https://github.com/vsoch.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# repo2docker Julia\n\nThis is a continuous build template based on the [julia-python](https://github.com/binder-examples/julia-python) binder example, meaning that it shows how you can install Julia alongside Python (meaning Jupyter\nnotebooks!) and then deploy a container automatically using Docker Hub.\n\n - the environment.yml file is for an Anaconda Python environment\n - the [REQUIRE](REQUIRE) file is for Julia\n\nThe build-\u003etest-\u003edeploy setup will have integration for a [containershare](https://vsoch.github.io/containershare) registry. In a nutshell, when you add the [configuration files](.circleci) here to your repository and connect to continuous integration, you will get a container, Github pages to serve metadata with complete manifest and inspection of your containers. It's a completely free, transparent, and open source way to practice reproducible science. \n\n\u003ca href=\"https://www.github.com/vsoch/containershare\" target=\"_blank\"\u003e\n\u003cimg src=\"https://vsoch.github.io/lessons/assets/img/logo-book.png\" width=\"100px\"\u003e\n\u003c/a\u003e\n\n## Contributors\n\n\u003e \u003c@vsoch:Stanford Research Computing Center\u003e\n\u003e \u003c@binder-examples:Binder Examples from the Jupyter team\u003e\n\n# Overview\nThis template will let you do the following:\n\n 1. Add your notebook (julia.ipynb files) and dependencies for julia (REQUIRE) and Python (environment.yml) to a Github repository\n 2. Connect the respository to CircleCI and Docker Hub to deploy a container along with metadata on Github Pages\n 3. Submit the container to a containershare registry, or just share the repository with your collaborators.\n\nThis usage is adopted from the [continuous-build](https://www.github.com/binder-examples/continuous-build/)\nrepository. The software has been extended to deploy metadata and a web interface to explore it back\nto the Github repository. As described above, you will be able to push a [Docker](https://docs.docker.com/)\ncontainer to [Docker Hub](https://hub.docker.com/) directly from a\nGithub repository that has a Jupyter notebook. \n\n## Reproducible Content Generated\n\n - **container** you generate a Docker Hub container with your notebook and dependencies, ready for use wherever you can run the container. The container always provides a latest, but also a tagged version coinciding with the first 10 characters of each merged commit.\n - **maniests** along with Docker Hub manifests, the Continuous Integration step deploys a table of updated container manifests to the Github repository Github pages, which are available programatically and from an interactive web interface. \n - **inspection** using the [container-diff](https://github.com/GoogleContainerTools/container-diff) tool, every tag of a container has apt, pip, and files recorded. Yes, this means that you can programatically find containers based on software. @vsoch will be developing a command line tool to help with this.\n\nImportantly, both manifests and the inspections are generated by the continuous integration, and served with the same repository that bullds the container.\n\n## Getting Started\n\nToday you will be doing the following:\n\n  1.  Fork and clone the continuous-build Github repository to obtain\n      the hidden `.circleci` folder.\n  2.  creating an image repository on Docker Hub\n  3.  connecting your repository to CircleCI\n  4.  creating a Github Machine User account to deploy back to Github Pages\n  5.  push, commit, or create a pull request to trigger a build.\n\nYou don't need to install any dependencies on your host to build the\ncontainer, it will be done on a continuous integration server, and the\ncontainer built and available to you to pull from Docker Hub. If you add a Machine\nuser (step 4) your container \n\n### Step 1. Clone the Repository\n\nFirst, fork the [repo2docker-julia](https://www.github.com/vsoch/repo2docker-julia/)\nGithub repository to your account, and clone the branch.\n\n```bash\ngit clone https://www.github.com/\u003cusername\u003e/repo2docker-julia\ngit clone git@github.com:\u003cusername\u003e/repo2docker-julia.git\n```\n\n### Step 2. Configuration\n\nThe hidden folder [.circleci/config.yml](.circleci/config.yml) has instructions for\n[CircleCI](https://circleci.com/dashboard/) to automatically discover\nand build your repo2docker julia + jupyter notebook container. There is also a [template.html](template.html)\nfile that is used as a template for your Github pages. The first does most of the steps required for\nbuild and deploy, including:\n\n 1.  clone of the repository with the notebook that you specify\n 2.  build\n 3.  push to Docker Hub\n 4.  generate manifests and inspections\n 5.  generate Github Pages content, and push back to Github pages\n\nThus, if you have forked the repository and cloned your fork, you should be able to use\nthe files that are pulled. And if you are an advanced user, you could even customize if you\nplease.\n\n### Step 3. Docker Hub\n\nGo to [Docker Hub](https://hub.docker.com/), log in, and click the big\nblue button that says \"create repository\" (not an automated build).\nChoose an organization and name that you like (in the traditional format\n`\u003cORG\u003e/\u003cNAME\u003e`), and remember it! We will be adding it, along with your\nDocker credentials, to be encrypted.\n\n\n### Step 4. Github Machine User\n\nIf you want to deploy the manifests back to Github pages, the easiest option (and\none that doesn't put your entire Github account under risk) is to create a machine\nuser. This comes down to creating a second Github user account (with a different email)\nand then giving the account permission to the repository, and generate an ssh key for it.\nYou won't need to worry about how the deploy is done - this is handled in the circleCI\nrecipe included with the template. Here are instructions for setting up credentials, derived\nfrom [this great resource](https://github.com/DevProgress/onboarding/wiki/Using-Circle-CI-with-Github-Pages-for-Continuous-Delivery).\n\n**Why do I need to do this?**\n\nPushing content back to Github pages requires a deploy key. Although Circle will generate a deploy key for you, it only has read access. We need to generate a machine user with write access. Read more about machine user keys [keys](https://circleci.com/docs/github-security-ssh-keys/#machine-user-keys)\n\n**Instructions**\n\n 1. Open a second browser so you can stay logged into your main Github account in one browser, and [create a new Github account](https://github.com/join) there. You will basically need another email address, and a creative username.\n 2. In your main Github account (the primary browser) add this user as a collaborator to your repository. They will need push access.\n 3. Accept the invitation in the second browser, or the emali sent to you.\n 4. In the second browser, again log in to [Circle CI](https://circleci.com/) with your new Github account. Make sure you log in via your Github machine user account, and that you have accepted the invitation.\n 5.  Click on \"Add Projects\", and select your regular Github username under \"Choose Organization\". This is the owner of the project.  Then click \"Follow Project\" next to the repository name on the left of the menu. \n 6. This is important! Once followed, go to the Project Settings -\u003e \"Checkout SSH keys\", and click on the button to \"Authorize with GitHub.\" You will be taken back to Github, signed in as the machine user, and you should click \"Authorize Application.\" Finally, click the Create and add machine user github name key button on the same page.\n\n**Generate Key**\nFollow the instructions [here](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/#generating-a-new-ssh-key) to generate a new ssh key. The steps to add it to your project are a little weird, but I'll try to be specific:\n\n - your machine user must first be added as a collaborator to the project\n - you must then log in to CircleCI with your **machine user** and click on Jobs to see the project\n - when you see it, click on any of the steps and click on \"Follow Project\" in the upper right\n - Under the project settings (gear icon in the upper right) under \"Permissions\" click on \"Checkout SSH keys\" and then click the button to \"Add user key.\" If you don't do this, it will give you an error that the key is read only.\n\nThe final step is to edit the [.circleci/config.yml](.circleci/config.yml) file to add your ssh key for circle to find. See the section that looks like this?\n\n```yaml\n- add_ssh_keys: \n    fingerprints: \n      - \"d4:37:a4:3b:1e:ea:eb:6a:b7:e3:0a:52:e2:8c:ac:d0\"\n```\n\nReplace this value with the fingerprint from your machine user.\n\n### Step 5. Connect to CircleCI\n\nIf you do not already have a Circle CI account, head [here](https://circleci.com/signup/) and create one, and\nadd your project to your Circle CI account.  Here are [instructions](https://circleci.com/docs/getting-started/) if you've never done this before.\n\nOnce you have an account, if you navigate to the main [app page](https://circleci.com/dashboard/)\nyou should be able to click \"Add Projects\" and then select your\nrepository. If you don't see it on the list, then select a different\norganization in the top left. Once you find the repository, you can\nclick the button to \"Start Building\" adn accept the defaults.\n\nBefore you push or trigger a build, let's set up the following\nenvironment variables. Also in the project interface on CirleCi, click\nthe gears icon next to the project name to get to your project settings.\nUnder settings, click on the \"Environment Variables\" tab. In this\nsection, you want to define the following:\n\n1.  `CONTAINER_NAME` should be the name of the Docker Hub repository you\n    just created.\n2.  `DOCKER_TAG` is the tag you want to use. If not defined, will use\n    first 10 characters of commit.\n3.  `DOCKER_USER` and `DOCKER_PASS` should be your credentials (to\n    allowing pushing)\n4.  `GITHUB_USER` and `GITHUB_EMAIL` should be your machine user Github account\n5.  `REPO_NAME` should be the full Github url (or other) of the\n    repository with the notebook. This doesn't have to coincide with the\n    repository you are using to do the build (e.g., \"myrepo\" in our\n    example).\n\nIf you don't define the `CONTAINER_NAME` it will default to be the\nrepository where it is building from, which you should only do if the\nDocker Hub repository is named equivalently. If you don't define either\nof the variables from step 3. for the Docker credentials, your image\nwill build but not be pushed to Docker Hub. Finally, if you don't define\nthe `REPO_NAME` it will again use the name of the repository defined for\nthe `CONTAINER_NAME`. As a quick sanity check, here are the variables you\nshould have defined in your CircleCI settings.\n\n![https://github.com/vsoch/repo2docker-share/raw/master/img/envars.png](https://github.com/vsoch/repo2docker-share/raw/master/img/envars.png)\n\n### Step 6. Push and Deploy!\n\nOnce the environment variables are set up, you can push or issue a pull\nrequest to see circle build the workflow. Remember that you only need\nthe `.circleci/config.yml`, `.circleci/template.html` and not any other files in the repository. If\nyour notebook is hosted in the same repo, you might want to add these,\nalong with your requirements.txt, etc.\n\n## FAQ\n\n**How do I customize the build or template?**\n\nThe circle configuration file is the entire workflow that does build, test, and deploy.\nThis literally means you can edit this text file and change any or all behavior. This could\nbe as simple as changing some of the text output, to adding an additional set of testing or\ndeployment options, or more complex like adding entire new steps in the workflow. The template.html\nis the same! You can tweak it, completely change it, or throw it out and push something entirely\ndifferent back to Github pages. This deployment is open and completely transparent, as it should be.\n\n**How do I customize the julia or python install**\n\nThe julia dependencies and python dependencies are managed separately from the container build, in the files\nenvironment.yml and REQUIRE, respectively. You can add modules here to customize your julia+jupyter container.\n\n**How do I run builds for pull requests?**\n\nBy default, new builds on CircleCI will not build for pull requests and\nyou can change this default in the settings. You can easily add filters\n(or other criteria and actions) to be performed during or after the\nbuild by editing the `.circleci/config.yml` file in your repository.\n\n**How do I use my container?**\n\nFor a repo2docker container, you should expect a jupyter notebook. Here is\nan example of how to pull and run this container:\n\n```bash\ndocker pull \u003cORG\u003e/\u003cNAME\u003e:\u003cTAG\u003e\ndocker run -it --name repo2docker -p 8888:8888 \u003cORG\u003e/\u003cNAME\u003e:\u003cTAG\u003e jupyter notebook --ip 0.0.0.0\n```\n\nFor a pre-built working example, try the following:\n\n```bash\ndocker pull vanessa/repo2docker-julia\ndocker run -it --name repo2docker -p 8888:8888 vanessa/repo2docker-julia jupyter notebook --ip 0.0.0.0\n```\n\nYou can then enter the url and token provided in the browser to access\nyour notebook. When you are done and need to stop and remove the\ncontainer:\n\n```bash\ndocker stop repo2docker docker rm repo2docker\n```\n\n## Support\nIf you want to get help please [post an issue!](https://www.github.com/vsoch/repo2docker-julia/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvsoch%2Frepo2docker-julia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvsoch%2Frepo2docker-julia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvsoch%2Frepo2docker-julia/lists"}