doomemacs/modules/tools/docker/README.org
Henrik Lissner 6f40ad55f5
docs: discourage after! and use-package! use
There's little reason for users to use these macros in their private
configs over plain ol' `with-eval-after-load` and `use-package`, unless
they're writing their own modules.

It's my fault for signal boosting them in documentation and whenever I'm
asked for help, because beginners now believe they are somehow
required for Doom to work correctly (there are guides out there
telling beginners that migrating to Doom involves replacing all
instances of `with-eval-after-load` and `use-package` in their
pre-existing configs with `after!` and `use-package!` -- which was never
true).

What's more, I plan to replace `use-package`, internally, so the
`use-package!` macro won't exist for much longer.
2026-02-09 04:29:47 -05:00

146 lines
6 KiB
Org Mode

#+title: :tools docker
#+subtitle: Yo dawg, I heard you like OSes, so I…
#+created: September 06, 2018
#+since: 21.12.0
* Description :unfold:
This module allows you to manipulate Docker images, containers, and more from
Emacs.
Provides a major ~dockerfile-mode~ to edit =Dockerfiles=. Additional convenience
functions allow images to be built easily.
[[doom-package:docker-tramp]] offers [[https://www.gnu.org/software/tramp/][TRAMP]] support for Docker containers.
** Maintainers
/This module has no dedicated maintainers./ [[doom-contrib-maintainer:][Become a maintainer?]]
** Module flags
- +lsp ::
Enable integration for the Dockerfile Language Server.
- +tree-sitter ::
Leverages tree-sitter for better syntax highlighting and structural text
editing. Requires Emacs 29.1+ and [[doom-module::tools tree-sitter]].
** Packages
- [[doom-package:docker]]
- [[doom-package:docker-tramp]]
- [[doom-package:dockerfile-mode]]
** Hacks
/No hacks documented for this module./
** TODO Changelog
# This section will be machine generated. Don't edit it by hand.
/This module does not have a changelog yet./
* Installation
[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]]
This module assumes =docker=, =docker-compose= and =docker-machine= binaries are
installed and accessible from your PATH.
Optionally, this module also uses the following programs:
- =docker-langserver= (for LSP users): ~$ npm install -g
dockerfile-language-server-nodejs~
- =dockfmt= for [[doom-module::editor format]]: https://github.com/jessfraz/dockfmt#installation
* TODO Usage
#+begin_quote
󱌣 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
#+end_quote
** Docker control
Use ~M-x docker~, select a resource, and then mark or unmark items using the
following keybindings (for more marking possibilities, check out
[[github:politza/tablist][politza/tablist]]):
| Binding | Description |
|-----------+----------------------|
| [[kbd:][?]] | List actions |
| [[kbd:][l]] | Configure listing |
| [[kbd:][m]] | Mark item |
| [[kbd:][u]] | Unmark item |
| [[kbd:][t]] | Toggle marks |
| [[kbd:][U]] | Unmark all |
| [[kbd:][s]] | Sort |
| [[kbd:][* r]] | Mark items by regexp |
| [[kbd:][<]] | Shrink column |
| [[kbd:][>]] | Enlarge column |
| [[kbd:][C-c C-e]] | Export to csv |
*** Supported commands
- ~docker container~: ~attach~, ~cp~, ~diff~, ~inspect~, ~kill~, ~logs~,
~pause~, ~rename~, ~restart~, ~rm~, ~start~, ~stop~, ~unpause~
- ~docker image~: ~inspect~, ~pull~, ~push~, ~rm~, ~run~, ~tag~
- ~docker network~: ~rm~
- ~docker volume~: ~rm~
- ~docker-machine~: ~create~, ~env~, ~restart~, ~rm~, ~start~, ~stop~
- ~docker-compose~: ~build~, ~config~, ~create~, ~down~, ~exec~, ~logs~, ~pull~,
~push~, ~remove~, ~restart~, ~run~, ~start~, ~stop~, ~up~
You can also enter =dired= or open a file inside a container or volume.
** TRAMP
Offers the [[https://www.gnu.org/software/tramp/][TRAMP]] method =docker= to access running containers:
#+begin_example
C-x C-f /docker:$USER@$CONTAINER:/path/to/file
#+end_example
| =$USER= | the user that you want to use (optional) |
| =$CONTAINER= | the id or name of the container |
* TODO Configuration
#+begin_quote
󱌣 /This module's configuration documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
#+end_quote
** Popups
Thanks to [[https://github.com/magit/magit-popup][magit-popup]], all the popups default arguments can be customized. For
example, here is how to customize the arguments for =docker-image-run-popup=:
#+begin_src emacs-lisp
(with-eval-after-load 'docker
(setq docker-image-run-arguments '("-i" "-t" "--rm")))
#+end_src
*** Other useful variables
| Variable | Description | Default |
|-------------------------------------+---------------------------------------+------------------|
| ~docker-command~ | The docker binary to use | ~docker~ |
| ~docker-container-default-sort-key~ | Sort key for docker containers | ~("Image")~ |
| ~docker-container-shell-file-name~ | Shell to use when entering containers | ~/bin/bash~ |
| ~docker-image-default-sort-key~ | Sort key for docker images | ~("Repository")~ |
| ~docker-machine-default-sort-key~ | Sort key for docker machines | ~("Name")~ |
| ~docker-network-default-sort-key~ | Sort key for docker networks | ~("Name")~ |
| ~docker-run-as-root~ | Run docker as root | ~nil~ |
| ~docker-volume-default-sort-key~ | Sort key for docker volumes | ~("Driver")~ |
** Completion in Dockerfiles
By default, the keyword completion function detects the =docker-compose= version
of the current buffer and suggests the appropriate keywords.
You can change the candidates offered by the backend by customizing
=docker-compose-keywords=.
* Troubleshooting
[[doom-report:][Report an issue?]]
** Tramp hangs on Alpine container
Busyboxes built with the =ENABLE_FEATURE_EDITING_ASK_TERMINAL= config option
also send escape sequences, which =tramp-wait-for-output= doesn't ignore
correctly. This was [[http://git.savannah.gnu.org/cgit/tramp.git/commit/?id=98a511248a9405848ed44de48a565b0b725af82c][fixed in TRAMP upstream]] and is available since TRAMP 2.3.
For older versions of TRAMP you can dump [[https://github.com/emacs-pe/docker-tramp.el/blob/master/docker-tramp-compat.el][docker-tramp-compat.el]] in your
~load-path~ somewhere and add the following to =$DOOMDIR/config.el= to overwrite
~tramp-wait-for-output~ with the patch applied:
#+begin_src emacs-lisp
(with-eval-after-load 'tramp
(require 'docker-tramp-compat))
#+end_src
* Frequently asked questions
/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]]
* TODO Appendix
#+begin_quote
󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]]
#+end_quote