doomemacs/modules/tools/docker/README.org

144 lines
5.2 KiB
Org Mode
Raw Normal View History

#+TITLE: tools/docker
#+DATE: April 30, 2019
#+SINCE: {replace with next tagged release version}
#+STARTUP: inlineimages
* Table of Contents :TOC_3:noexport:
- [[#description][Description]]
- [[#module-flags][Module Flags]]
- [[#plugins][Plugins]]
- [[#prerequisites][Prerequisites]]
- [[#features][Features]]
- [[#docker-control][Docker control]]
- [[#supported-commands][Supported commands]]
- [[#tramp][TRAMP]]
- [[#configuration][Configuration]]
- [[#popups][Popups]]
- [[#dockerfile-mode][dockerfile-mode]]
- [[#troubleshooting][Troubleshooting]]
- [[#tramp-hangs-on-alpine-container][Tramp hangs on Alpine container]]
* Description
This package allows you to manipulate docker images, containers & more from Emacs.
Provides a major mode `dockerfile-mode' for use with the standard
`Dockerfile' file format. Additional convenience functions allow
images to be built easily.
docker-tramp.el offers a TRAMP method for Docker containers.
** Module Flags
This module provides no flags.
** Plugins
[[https://github.com/Silex/docker.el][docker]]
[[https://github.com/emacs-pe/docker-tramp.el][docker-tramp]]
[[https://github.com/spotify/dockerfile-mode][dockerfile-mode]]
* Prerequisites
This modules assumes `docker`, `docker-compose` and `docker-machine` binaries are
installed and accessible from your PATH.
* Features
An in-depth list of features, how to use them, and their dependencies.
** Docker control
Use =M-x docker=, select a resource then then mark or unmark items using the following keybindings (for more
marking possibilities, check out https://github.com/politza/tablist):
| Binding | Description |
|-----------+----------------------|
| =?= | List actions |
| =l= | Configure listing |
| =m= | Mark item |
| =u= | Unmark item |
| =t= | Toggle marks |
| =U= | Unmark all |
| =s= | Sort |
| =* r= | Mark items by regexp |
| =<= | Shrink column |
| =>= | Enlarge column |
| =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 TRAMP method `docker` to access running containers
C-x C-f /docker:user@container:/path/to/file
where
user is the user that you want to use (optional)
container is the id or name of the container
* Configuration
** Popups
Thanks to [magit-popup](https://github.com/magit/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
(setq docker-image-run-arguments '("-i" "-t" "--rm"))
#+END_SRC
or inside a use-package declaration:
#+BEGIN_SRC emacs-lisp
(use-package docker
:ensure t
:bind ("C-c d" . docker)
:custom (docker-image-run-arguments '("-i" "-t" "--rm")))
#+END_SRC
You can also customize these using =M-x customize-variable=.
### Others
| 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")` |
** dockerfile-mode
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
** Tramp hangs on Alpine container
Busyboxes built with the `ENABLE_FEATURE_EDITING_ASK_TERMINAL' config option
send also escape sequences, which `tramp-wait-for-output' doesn't ignores
correctly. Tramp upstream fixed in [98a5112][] and is available since
Tramp>=2.3.
For older versions of Tramp you can dump [docker-tramp-compat.el][] in your
`load-path' somewhere and add the following to your `init.el', which
overwrites `tramp-wait-for-output' with the patch applied:
(require 'docker-tramp-compat)
[98a5112]: http://git.savannah.gnu.org/cgit/tramp.git/commit/?id=98a511248a9405848ed44de48a565b0b725af82c
[docker-tramp-compat.el]: https://github.com/emacs-pe/docker-tramp.el/raw/master/docker-tramp-compat.el