docker-asciidoctor icon indicating copy to clipboard operation
docker-asciidoctor copied to clipboard

:ship: A Docker image for using the Asciidoctor toolchain to process AsciiDoc content

:ALPINE_VERSION: 3.16.2 :ASCIIDOCTOR_VERSION: 2.0.17 :ASCIIDOCTOR_CONFLUENCE_VERSION: 0.0.2 :ASCIIDOCTOR_PDF_VERSION: 2.3.0 :ASCIIDOCTOR_DIAGRAM_VERSION: 2.2.1 :ASCIIDOCTOR_EPUB3_VERSION: 1.5.1 :ASCIIDOCTOR_FB2_VERSION: 0.5.1 :ASCIIDOCTOR_MATHEMATICAL_VERSION: 0.3.5 :ASCIIDOCTOR_REVEALJS_VERSION: 4.1.0 :KRAMDOWN_ASCIIDOC_VERSION: 2.1.0 :ASCIIDOCTOR_BIBTEX_VERSION: 0.8.0 :ASCIIDOCTOR_KROKI_VERSION: 0.6.0 :ASCIIDOCTOR_REDUCER_VERSION: 1.0.2 = Asciidoctor Docker Container :source-highlighter: coderay

//// GitHub renders asciidoctor natively, but DockerHub does not (it needs markdown). make README.md converts this page into markdown. ////

== The environment

This Docker image provides:

  • https://asciidoctor.org/[Asciidoctor] {ASCIIDOCTOR_VERSION}
  • https://asciidoctor.org/docs/asciidoctor-diagram/[Asciidoctor Diagram] {ASCIIDOCTOR_DIAGRAM_VERSION} with ERD and Graphviz integration (supports plantuml and graphiz diagrams)
  • https://asciidoctor.org/docs/asciidoctor-pdf/[Asciidoctor PDF] {ASCIIDOCTOR_PDF_VERSION}
  • https://asciidoctor.org/docs/asciidoctor-epub3/[Asciidoctor EPUB3] {ASCIIDOCTOR_EPUB3_VERSION}
  • https://github.com/asciidoctor/asciidoctor-fb2/[Asciidoctor FB2] {ASCIIDOCTOR_FB2_VERSION}
  • https://github.com/asciidoctor/asciidoctor-mathematical[Asciidoctor Mathematical] {ASCIIDOCTOR_MATHEMATICAL_VERSION}
  • https://docs.asciidoctor.org/reveal.js-converter/latest/[Asciidoctor reveal.js] {ASCIIDOCTOR_REVEALJS_VERSION}
  • https://rubygems.org/gems/asciimath[AsciiMath]
  • Source highlighting using http://rouge.jneen.net[Rouge], https://rubygems.org/gems/coderay[CodeRay] or https://pygments.org/[Pygments]
  • https://github.com/asciidoctor/asciidoctor-confluence[Asciidoctor Confluence] {ASCIIDOCTOR_CONFLUENCE_VERSION}
  • https://github.com/asciidoctor/asciidoctor-bibtex[Asciidoctor Bibtex] {ASCIIDOCTOR_BIBTEX_VERSION}
  • https://github.com/Mogztter/asciidoctor-kroki[Asciidoctor Kroki] {ASCIIDOCTOR_KROKI_VERSION}
  • https://github.com/asciidoctor/asciidoctor-reducer[Asciidoctor Reducer] {ASCIIDOCTOR_REDUCER_VERSION}

This image uses Alpine Linux {ALPINE_VERSION} as base image.

NOTE: Docker Engine link:https://docs.docker.com/engine/release-notes/#20100[20.10] or later is required (or any container engine supporting link:https://wiki.alpinelinux.org/wiki/Release_Notes_for_Alpine_3.14.0[Alpine 3.14]) to avoid unexpected No such file or directory errors (such as link:https://github.com/asciidoctor/docker-asciidoctor/issues/214[#214] or link:https://github.com/asciidoctor/docker-asciidoctor/issues/215[#215]).

== How to use it

Just run:

[source,bash]

docker run -it -v :/documents/ asciidoctor/docker-asciidoctor

or the following for https://podman.io/[Podman]:

[source,bash]

podman run -it -v :/documents/ docker.io/asciidoctor/docker-asciidoctor

Docker/Podman maps your directory with [path]/documents directory in the container.

NOTE: You might need to add the option :z or :Z like <your directory>:/documents/:z or <your directory>:/documents/:Z if you are using SELinux. See https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label[Docker docs] or https://docs.podman.io/en/latest/markdown/podman-run.1.html#volume-v-source-volume-host-dir-container-dir-options[Podman docs].

After you start the container, you can use Asciidoctor commands to convert AsciiDoc files that you created in the directory mentioned above. You can find several examples below.

  • To run Asciidoctor on a basic AsciiDoc file:

[source,bash]

asciidoctor sample.adoc asciidoctor-pdf sample.adoc asciidoctor-epub3 sample.adoc

  • To run AsciiDoc on an AsciiDoc file that contains diagrams:

[source,bash]

asciidoctor -r asciidoctor-diagram sample-with-diagram.adoc asciidoctor-pdf -r asciidoctor-diagram sample-with-diagram.adoc asciidoctor-epub3 -r asciidoctor-diagram sample-with-diagram.adoc

  • To run AsciiDoc on an AsciiDoc file that contains latexmath and stem blocks:

[source,bash]

asciidoctor -r asciidoctor-mathematical sample-with-diagram.adoc asciidoctor-pdf -r asciidoctor-mathematical sample-with-diagram.adoc asciidoctor-epub3 -r asciidoctor-mathematical sample-with-diagram.adoc

  • To use Asciidoctor Confluence:

[source,bash]

asciidoctor-confluence --host HOSTNAME --spaceKey SPACEKEY --title TITLE --username USER --password PASSWORD sample.adoc

  • To use Asciidoctor reveal.js with local downloaded reveal.js:

[source,bash]

asciidoctor-revealjs sample-slides.adoc asciidoctor-revealjs -r asciidoctor-diagram sample-slides.adoc

  • To use Asciidoctor reveal.js with online reveal.js:

[source,bash]

asciidoctor-revealjs -a revealjsdir=https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.9.2 sample-slides.adoc asciidoctor-revealjs -a revealjsdir=https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.9.2 -r asciidoctor-diagram sample-slides.adoc

  • To convert files in batch:

[source,bash]

docker run --rm -v $(pwd):/documents/ asciidoctor/docker-asciidoctor asciidoctor-pdf index.adoc

or: + [source,bash]

podman run --rm -v $(pwd):/documents/ docker.io/asciidoctor/docker-asciidoctor asciidoctor-pdf index.adoc

== How to contribute / do it yourself?

=== Requirements

You need the following tools:

  • A bash compliant command line
  • link:http://man7.org/linux/man-pages/man1/make.1.html[GNU make]
  • link:https://github.com/sstephenson/bats[Bats] installed and in your bash PATH
  • Docker installed and in your path
  • link:https://github.com/aquasecurity/trivy[Trivy] cli in case you want to scan images for vulnerabilities

=== How to build and test?

  • Bats is used as a test suite runner. Since the ability to build is one way of testing, it is included.

  • You just have to run the Bats test suite, from the repository root:

[source,bash]

make test

==== Include test in your build pipeline or test manually

You can use Bats directly to test the image. Optionally, you can specify a custom image name:

[source,bash]

If you want to use a custom name for the image, OPTIONAL

export DOCKER_IMAGE_NAME_TO_TEST=your-image-name bats tests/*.bats

=== How to scan for vulnerabilities?

  • Trivy scans a docker image looking for software versions containing known vulnerabilities (CVEs). It's always a good idea to scan the image to ensure no new issues are introduced.

  • Run the following command to replicate the repo's CVE Scan pipeline on an image build locally. Note the pipeline runs nightly on the latest release version, so it can display issues solved in main branch.

[source,bash]

trivy image --severity HIGH,CRITICAL asciidoctor:latest

==== Deploy

The goal for deploying is to make the Docker image available with the correct Docker tag in Docker Hub.

As a matter of trust and transparency for the end-users, the image is rebuilt by Docker Hub itself by triggering a build. This only works under the hypothesis of a minimalistic variation between the Docker build in the CI, and the Docker build by Docker Hub.

Deploying the image requires setting the following environment variables: DOCKERHUB_SOURCE_TOKEN and DOCKERHUB_TRIGGER_TOKEN. Their values come from a Docker Hub trigger URL: https://hub.docker.com/api/build/v1/source/${DOCKERHUB_SOURCE_TOKEN}/trigger/${DOCKERHUB_TRIGGER_TOKEN}/call/.

You might want to set these variables as secret values in your CI to avoid any leaking in the output (as curl output for instance).