Run update.sh
This commit is contained in:
parent
9139646369
commit
e68ee24e7e
|
|
@ -100,6 +100,32 @@ For many simple, single file projects, you may find it inconvenient to write a c
|
||||||
$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp perl:5.20 perl your-daemon-or-script.pl
|
$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp perl:5.20 perl your-daemon-or-script.pl
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Signal handling behavior notice
|
||||||
|
|
||||||
|
As Perl will run as PID 1 by default in containers (unless an [ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#entrypoint) is set,) special care needs to be considered when expecting to send signals (particularly SIGINT or SIGTERM) to it. For example, running
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ docker run -it --name sleeping_beauty --rm perl:5.20 perl -E 'sleep 300'
|
||||||
|
```
|
||||||
|
|
||||||
|
and doing on another terminal,
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ docker exec sleeping_beauty kill 1
|
||||||
|
```
|
||||||
|
|
||||||
|
will *not* stop the perl running on the `sleeping_beauty` container (it will keep running until the `sleep 300` finishes.) To do so, one must set a signal handler like this:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ docker run -it --name quick_nap --rm perl:5.20 perl -E '$SIG{TERM} = sub { $sig++; say "recv TERM" }; sleep 300; say "waking up" if $sig'
|
||||||
|
```
|
||||||
|
|
||||||
|
so doing `docker exec quick_nap kill 1` (or the simpler `docker stop quick_nap`) will immediately stop the container, and print `recv TERM` in the other terminal. Note that the signal handler does not stop the perl process itself unless it calls a `die` or `exit`; in this case, perl will continue and print `waking up` *after* it receives the signal.
|
||||||
|
|
||||||
|
If your Perl program is expected to handle signals and fork child processes, it is encouraged to use an init-like program for ENTRYPOINT, such as [dumb-init](https://github.com/Yelp/dumb-init) or [tini](https://github.com/krallin/tini) (the latter is available since Docker 1.13 via the `docker run --init` flag.)
|
||||||
|
|
||||||
|
See also [Signals in perlipc](https://perldoc.pl/perlipc#Signals) as well as [Perl/docker-perl#44](https://github.com/Perl/docker-perl/issues/44).
|
||||||
|
|
||||||
## Example: Creating a reusable Carton image for Perl projects
|
## Example: Creating a reusable Carton image for Perl projects
|
||||||
|
|
||||||
Suppose you have a project that uses [Carton](https://metacpan.org/pod/Carton) to manage Perl dependencies. You can create a `perl:carton` image that makes use of the [ONBUILD](https://docs.docker.com/engine/reference/builder/#onbuild) instruction in its `Dockerfile`, like this:
|
Suppose you have a project that uses [Carton](https://metacpan.org/pod/Carton) to manage Perl dependencies. You can create a `perl:carton` image that makes use of the [ONBUILD](https://docs.docker.com/engine/reference/builder/#onbuild) instruction in its `Dockerfile`, like this:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue