From ff804ee81e3f94dab5cd207a0a0504e5e67606dd Mon Sep 17 00:00:00 2001 From: Joe Ferguson Date: Fri, 19 Dec 2014 15:39:09 -0800 Subject: [PATCH] Docs for pypy --- pypy/README-short.txt | 1 + pypy/README.md | 91 ++++++++++++++++++++++++++++++++++++++++++ pypy/content.md | 47 ++++++++++++++++++++++ pypy/license.md | 3 ++ pypy/logo.png | Bin 0 -> 13670 bytes 5 files changed, 142 insertions(+) create mode 100644 pypy/README-short.txt create mode 100644 pypy/README.md create mode 100644 pypy/content.md create mode 100644 pypy/license.md create mode 100644 pypy/logo.png diff --git a/pypy/README-short.txt b/pypy/README-short.txt new file mode 100644 index 000000000..aa539a627 --- /dev/null +++ b/pypy/README-short.txt @@ -0,0 +1 @@ +PyPy is a fast, compliant alternative implementation of the Python language. diff --git a/pypy/README.md b/pypy/README.md new file mode 100644 index 000000000..a70759367 --- /dev/null +++ b/pypy/README.md @@ -0,0 +1,91 @@ +# Supported tags and respective `Dockerfile` links + + + +For more information about this image and its history, please see the [relevant +manifest file +(`library/pypy`)](https://github.com/docker-library/official-images/blob/master/library/pypy) +in the [`docker-library/official-images` GitHub +repo](https://github.com/docker-library/official-images). + +# What is PyPy? + +PyPy is a Python interpreter and just-in-time compiler. PyPy focuses on speed, +efficiency and compatibility with the original CPython interpreter. + +PyPy started out as a Python interpreter written in the Python language itself. +Current PyPy versions are translated from RPython to C code and compiled. The +PyPy JIT (short for "Just In Time") compiler is capable of turning Python code +into machine code at run time. + +> [wikipedia.org/wiki/PyPy](https://en.wikipedia.org/wiki/PyPy) + +![logo](https://raw.githubusercontent.com/docker-library/docs/master/pypy/logo.png) + +# How to use this image + +## Create a `Dockerfile` in your Python app project + + FROM pypy:3-onbuild + CMD [ "pypy3", "./your-daemon-or-script.py" ] + +or (if you need to use PyPy 2): + + FROM pypy:2-onbuild + CMD [ "pypy", "./your-daemon-or-script.py" ] + +These images include multiple `ONBUILD` triggers, which should be all you need +to bootstrap most applications. The build will `COPY` a `requirements.txt` file, +`RUN pip install` on said file, and then copy the current directory into +`/usr/src/app`. + +You can then build and run the Docker image: + + docker build -t my-python-app . + docker run -it --rm --name my-running-app my-python-app + +## Run a single Python script + +For many simple, single file projects, you may find it inconvenient to write a +complete `Dockerfile`. In such cases, you can run a Python script by using the +Python Docker image directly: + + docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp pypy:3 pypy3 your-daemon-or-script.py + +or (again, if you need to use Python 2): + + docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp pypy:2 pypy your-daemon-or-script.py + +# License + +View [license +information](https://bitbucket.org/pypy/pypy/src/c3ff0dd6252b6ba0d230f3624dbb4aab8973a1d0/LICENSE?at=default) +for software contained in this image. + +# Supported Docker versions + +This image is officially supported on Docker version 1.4.1. + +Support for older versions (down to 1.0) is provided on a best-effort basis. + +# User Feedback + +## Issues + +If you have any problems with or questions about this image, please contact us + through a [GitHub issue](https://github.com/docker-library/pypy/issues). + +You can also reach many of the official image maintainers via the +`#docker-library` IRC channel on [Freenode](https://freenode.net). + +## Contributing + +You are invited to contribute new features, fixes, or updates, large or small; +we are always thrilled to receive pull requests, and do our best to process them +as fast as we can. + +Before you start to code, we recommend discussing your plans +through a [GitHub issue](https://github.com/docker-library/pypy/issues), especially for more ambitious +contributions. This gives other contributors a chance to point you in the right +direction, give you feedback on your design, and help you find out if someone +else is working on the same thing. diff --git a/pypy/content.md b/pypy/content.md new file mode 100644 index 000000000..9ccbb5074 --- /dev/null +++ b/pypy/content.md @@ -0,0 +1,47 @@ +# What is PyPy? + +PyPy is a Python interpreter and just-in-time compiler. PyPy focuses on speed, +efficiency and compatibility with the original CPython interpreter. + +PyPy started out as a Python interpreter written in the Python language itself. +Current PyPy versions are translated from RPython to C code and compiled. The +PyPy JIT (short for "Just In Time") compiler is capable of turning Python code +into machine code at run time. + +> [wikipedia.org/wiki/PyPy](https://en.wikipedia.org/wiki/PyPy) + +%%LOGO%% + +# How to use this image + +## Create a `Dockerfile` in your Python app project + + FROM pypy:3-onbuild + CMD [ "pypy3", "./your-daemon-or-script.py" ] + +or (if you need to use PyPy 2): + + FROM pypy:2-onbuild + CMD [ "pypy", "./your-daemon-or-script.py" ] + +These images include multiple `ONBUILD` triggers, which should be all you need +to bootstrap most applications. The build will `COPY` a `requirements.txt` file, +`RUN pip install` on said file, and then copy the current directory into +`/usr/src/app`. + +You can then build and run the Docker image: + + docker build -t my-python-app . + docker run -it --rm --name my-running-app my-python-app + +## Run a single Python script + +For many simple, single file projects, you may find it inconvenient to write a +complete `Dockerfile`. In such cases, you can run a Python script by using the +Python Docker image directly: + + docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp pypy:3 pypy3 your-daemon-or-script.py + +or (again, if you need to use Python 2): + + docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp pypy:2 pypy your-daemon-or-script.py diff --git a/pypy/license.md b/pypy/license.md new file mode 100644 index 000000000..d0764da03 --- /dev/null +++ b/pypy/license.md @@ -0,0 +1,3 @@ +View [license +information](https://bitbucket.org/pypy/pypy/src/c3ff0dd6252b6ba0d230f3624dbb4aab8973a1d0/LICENSE?at=default) +for software contained in this image. diff --git a/pypy/logo.png b/pypy/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..612ab0a779a91415dd22848715c13735d50e13a3 GIT binary patch literal 13670 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