spacemacs/layers/+tools/docker/README.org

91 lines
3.5 KiB
Org Mode

#+TITLE: Docker layer
#+TAGS: layer|tool
[[file:img/docker.png]]
* Table of Contents :TOC_5_gh:noexport:
- [[#description][Description]]
- [[#features][Features:]]
- [[#install][Install]]
- [[#docker][Docker]]
- [[#linting][Linting]]
- [[#lsp][LSP]]
- [[#usage][Usage]]
- [[#tramp-access-to-docker-containers][TRAMP access to docker containers]]
- [[#key-bindings][Key bindings]]
* Description
This layer integrates basic container management into Spacemacs.
** Features:
- Syntax highlighting for =Docker= files
- =Docker= build integration
- =TRAMP= access to running Docker containers
- =Docker= container and image management via [[https://github.com/Silex/docker.el][docker.el]]
- =docker-compose= integration via [[https://github.com/Silex/docker.el][docker.el]]
- Syntax checking via [[https://github.com/hadolint/hadolint][hadolint]]
- Code-Completion via =company-lsp=
* Install
** Docker
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =docker= to the existing =dotspacemacs-configuration-layers= list in this
file.
You will also need the native package [[https://www.docker.com/][Docker]] for the actual container management.
** Linting
For syntax checking the external library [[https://github.com/hadolint/hadolint][hadolint]] is necessary.
It can either be downloaded from [[https://github.com/hadolint/hadolint/releases/latest][=here=]] or
build locally with stack as shown below:
#+BEGIN_SRC sh
stack install hadolint
#+END_SRC
** LSP
This layer can be enhanced with [[https://github.com/rcjsuen/dockerfile-language-server-nodejs][=dockerfile-language-server-nodejs=]] and emacs
[[https://github.com/emacs-lsp/lsp-mode][=lsp-mode=]] to provide richer, IDE-like capabilities.
To do so set the layer variable =docker-dockerfile-backend= to =lsp= like shown below:
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers
'((docker :variables docker-dockerfile-backend 'lsp)))
#+END_SRC
In addition you need to install the lsp server's executable in your system.
This can be done via npm:
#+BEGIN_SRC sh
npm i -g dockerfile-language-server-nodejs
#+END_SRC
* Usage
** TRAMP access to docker containers
This relies on the [[https://github.com/emacs-pe/docker-tramp.el][docker-tramp]] package which uses =docker exec= available in
docker versions > 1.3.
=docker-tramp= adds a new prefix =/docker:= that you can use with ~SPC f f~,
this prefix allows to access your docker containers and also provides
auto-completion of the running containers.
* Key bindings
| Key binding | Description |
|-------------+---------------------------------------------|
| ~SPC m c b~ | build current buffer |
| ~SPC m c B~ | build current buffer without cache |
| ~SPC a D c~ | list docker containers |
| ~SPC a D C~ | docker-compose commands for current project |
| ~SPC a D d~ | delete image |
| ~SPC a D e~ | unpause container |
| ~SPC a D F~ | pull image |
| ~SPC a D i~ | list docker images |
| ~SPC a D k~ | delete container |
| ~SPC a D o~ | stop container |
| ~SPC a D p~ | pause container |
| ~SPC a D P~ | push image |
| ~SPC a D r~ | restart container |
| ~SPC a D s~ | start container |