diff --git a/engine/admin/systemd.md b/engine/admin/systemd.md index b4fd7ecda1..1bb1d0385d 100644 --- a/engine/admin/systemd.md +++ b/engine/admin/systemd.md @@ -9,147 +9,62 @@ title: Control and configure Docker with systemd Many Linux distributions use systemd to start the Docker daemon. This document shows a few examples of how to customize Docker's settings. -## Starting the Docker daemon +## Start the Docker daemon + +### Start manually Once Docker is installed, you will need to start the Docker daemon. +Most Linux distributions use `systemctl` to start services. If you +do not have `systemctl`, use the `service` command. -```bash -$ sudo systemctl start docker -# or on older distributions, you may need to use -$ sudo service docker start -``` +- **`systemctl`**: -If you want Docker to start at boot, you should also: + ```bash + $ sudo systemctl start docker + ``` -```bash -$ sudo systemctl enable docker -# or on older distributions, you may need to use -$ sudo chkconfig docker on -``` +- **`service`**: + + ```bash + $ sudo service docker start + ``` + +### Start automatically at system boot + +If you want Docker to start at boot, see +[Configure Docker to start on boot](/engine/installation/linux/linux-postinstall.md/#configure-docker-to-start-on-boot). ## Custom Docker daemon options There are a number of ways to configure the daemon flags and environment variables -for your Docker daemon. +for your Docker daemon. The recommended way is to use the platform-independent +`daemon.json` file, which is located in `/etc/docker/` on Linux by default. See +[Daemon configuration file](/engine/reference/commandline/dockerd.md/#daemon-configuration-file). -The recommended way is to use a systemd drop-in file (as described in the systemd.unit -documentation). These are local files named `.conf` in the -`/etc/systemd/system/docker.service.d` directory. - -However, if you had previously used a package which had an `EnvironmentFile` -(often pointing to `/etc/sysconfig/docker`) then for backwards compatibility, -you drop a file with a `.conf` extension into the -`/etc/systemd/system/docker.service.d` directory including the following: - -```conf -[Service] -EnvironmentFile=-/etc/sysconfig/docker -EnvironmentFile=-/etc/sysconfig/docker-storage -EnvironmentFile=-/etc/sysconfig/docker-network -ExecStart= -ExecStart=/usr/bin/dockerd $OPTIONS \ - $DOCKER_STORAGE_OPTIONS \ - $DOCKER_NETWORK_OPTIONS \ - $BLOCK_REGISTRY \ - $INSECURE_REGISTRY -``` - -To check if the `docker.service` uses an `EnvironmentFile`: - -```bash -$ systemctl show docker | grep EnvironmentFile - -EnvironmentFile=-/etc/sysconfig/docker (ignore_errors=yes) -``` - -Alternatively, find out where the service file is located: - -```bash -$ systemctl show --property=FragmentPath docker - -FragmentPath=/usr/lib/systemd/system/docker.service - -$ grep EnvironmentFile /usr/lib/systemd/system/docker.service - -EnvironmentFile=-/etc/sysconfig/docker -``` - -You can customize the Docker daemon options using override files as explained in -the [HTTP Proxy example](systemd.md#http-proxy) below. The files located in -`/usr/lib/systemd/system` or `/lib/systemd/system` contain the default options -and should not be edited. +You can configure nearly all daemon configuration options using `daemon.json`. The following +example configures two options. One thing you cannot configure using `daemon.json` mechanism is +a [HTTP proxy](#http-proxy). ### Runtime directory and storage driver You may want to control the disk space used for Docker images, containers and volumes by moving it to a separate partition. -In this example, we'll assume that your `docker.service` file looks something -like: +To accomplish this, set the following flags in the `daemon.json` file: -```conf -[Unit] -Description=Docker Application Container Engine -Documentation=https://docs.docker.com -After=network.target - -[Service] -Type=notify -# the default is not to use systemd for cgroups because the delegate issues still -# exists and systemd currently does not support the cgroup feature set required -# for containers run by docker -ExecStart=/usr/bin/dockerd -ExecReload=/bin/kill -s HUP $MAINPID -# Having non-zero Limit*s causes performance problems due to accounting overhead -# in the kernel. We recommend using cgroups to do container-local accounting. -LimitNOFILE=infinity -LimitNPROC=infinity -LimitCORE=infinity -# Uncomment TasksMax if your systemd version supports it. -# Only systemd 226 and above support this version. -#TasksMax=infinity -TimeoutStartSec=0 -# set delegate yes so that systemd does not reset the cgroups of docker containers -Delegate=yes -# kill only the docker process, not all processes in the cgroup -KillMode=process - -[Install] -WantedBy=multi-user.target -``` - -This will allow us to add extra flags via a drop-in file (mentioned above) by -placing a file containing the following in the `/etc/systemd/system/docker.service.d` -directory: - -```conf -[Service] -ExecStart= -ExecStart=/usr/bin/dockerd --graph=/mnt/docker-data --storage-driver=overlay -``` - -You can also set other environment variables in this file, for example, the -`HTTP_PROXY` environment variables described below. - -To modify the ExecStart configuration, specify an empty configuration followed -by a new configuration as follows: - -```conf -[Service] -ExecStart= -ExecStart=/usr/bin/dockerd --bip=172.17.42.1/16 -``` - -If you fail to specify an empty configuration, Docker reports an error such as: - -```conf -docker.service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing. +```none +{ + "graph": "/mnt/docker-data", + "storage-drivers": "overlay" +} ``` ### HTTP proxy +The Docker daemon uses the `HTTP_PROXY` and `NO_PROXY` environmental variables in +its start-up environment to configure HTTP proxy behavior. You cannot configure +these environment variables using the `daemon.json` file. + This example overrides the default `docker.service` file. If you are behind an HTTP proxy server, for example in corporate settings, @@ -197,7 +112,7 @@ you will need to add this configuration in the Docker systemd service file. ## Manually creating the systemd unit files When installing the binary without a package, you may want -to integrate Docker with systemd. For this, simply install the two unit files -(service and socket) from [the github +to integrate Docker with systemd. For this, install the two unit files +(`service` and `socket`) from [the github repository](https://github.com/docker/docker/tree/master/contrib/init/systemd) to `/etc/systemd/system`.