Clarify scratch image example (#5947)

This commit is contained in:
Misty Stanley-Jones 2018-02-07 15:48:05 -08:00 committed by GitHub
parent 4b9c8008ef
commit d1b01e29a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 42 additions and 14 deletions

View File

@ -60,28 +60,56 @@ GitHub Repo:
## Create a simple parent image using scratch
You can use Docker's reserved, minimal image, `scratch`, as a starting point for building containers. Using the `scratch` "image" signals to the build process that you want the next command in the `Dockerfile` to be the first filesystem layer in your image.
You can use Docker's reserved, minimal image, `scratch`, as a starting point for
building containers. Using the `scratch` "image" signals to the build process
that you want the next command in the `Dockerfile` to be the first filesystem
layer in your image.
While `scratch` appears in Docker's repository on the hub, you can't pull it, run it, or tag any image with the name `scratch`. Instead, you can refer to it in your `Dockerfile`. For example, to create a minimal container using `scratch`:
While `scratch` appears in Docker's repository on the hub, you can't pull it,
run it, or tag any image with the name `scratch`. Instead, you can refer to it
in your `Dockerfile`. For example, to create a minimal container using
`scratch`:
FROM scratch
ADD hello /
CMD ["/hello"]
```Dockerfile
FROM scratch
ADD hello /
CMD ["/hello"]
```
Assuming you built the "hello" executable example [from the Docker GitHub example C-source code](https://github.com/docker-library/hello-world/blob/master/hello.c), and you compiled it with the `-static` flag, you can then build this Docker image using: `docker build --tag hello .`
Assuming you built the "hello" executable example by following the instructions
at
[https://github.com/docker-library/hello-world/](https://github.com/docker-library/hello-world/),
and you compiled it with the `-static` flag, you can build this Docker
image using this `docker build` command:
> **Note**: Because Docker for Mac and Docker for Windows use a Linux VM, you must compile this code using a Linux toolchain to end up
> with a Linux binary. Not to worry, you can quickly pull down a Linux image and a build environment and build within it:
```bash
docker build --tag hello .
```
$ docker run --rm -it -v $PWD:/build ubuntu:16.04
container# apt-get update && apt-get install build-essential
container# cd /build
container# gcc -o hello -static -nostartfiles hello.c
Don't forget the `.` character at the end, which sets the build context to the
current directory.
Then you can run it (on Linux, Mac, or Windows) using: `docker run --rm hello`
> **Note**: Because Docker for Mac and Docker for Windows use a Linux VM, you
> you need a Linux binary, rather than a Mac or Windows binary.
> You can use a Docker container to build it:
>
> ```bash
> $ docker run --rm -it -v $PWD:/build ubuntu:16.04
>
> container# apt-get update && apt-get install build-essential
> container# cd /build
> container# gcc -o hello -static -nostartfiles hello.c
> ```
To run your new image, use the `docker run` command:
```bash
docker run --rm hello
```
This example creates the hello-world image used in the tutorials.
If you want to test it out, you can clone [the image repo](https://github.com/docker-library/hello-world).
If you want to test it out, you can clone
[the image repo](https://github.com/docker-library/hello-world).
## More resources