Jed Cunningham - Thousand Oaks Perl Mongers
November 18, 2015
package an application with all of its dependencies
Source: What is Docker?
Source: What is Docker?
Source: Understanding Docker
$ docker run --rm -ti debian
FROM perl:5.22
RUN cpanm Mojolicious
$ docker build -t mojolicious .
Simple web app that generates n random characters
FROM mojolicious
COPY random-generator /app/random-generator
CMD ["/usr/local/bin/hypnotoad", "-f", "/app/random-generator"]
$ docker build -t random-generator .
$ docker run --rm -p 8080:8080 random-generator
Simple web app that uses file storage
FROM perl:5.22
COPY cpanfile /app/cpanfile
COPY script/mojopaste /app/mojopaste
RUN cpanm --installdeps /app
ENV PASTE_DIR /app/pastes
CMD ["/app/mojopaste", "daemon"]
$ docker build -t mojopaste .
$ docker run -p 3000:3000 --name mypaste -d mojopaste
We want to persist our data outside the container.
Our options include:
$ docker run -v /app/pastes -p 3000:3000 \
--name mypaste -d mojopaste
$ docker inspect mypaste
$ docker run -v $(pwd)/pastes:/app/pastes -p 3000:3000 \
--name mypaste2 -d mojopaste
$ docker run -v /app/pastes --name paste-data debian /bin/true
$ docker run --volumes-from paste-data -p 3000:3000 \
--name mypaste3 -d mojopaste
Chat app
*No Dockerfile*
$ docker run --name chat-postgres -e POSTGRES_PASSWORD=mysecretpassword \
-d postgres
$ docker run --rm -ti --link chat-postgres:postgres \
-v $(pwd):/app -p 3000:3000 perl bash
Next, install dependencies and start the app:
$ cpanm Mojo::Pg
$ morbo /app/chat.pl