Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== Docker ====== **General Information** Installing and configuring docker. * **Docker Versions Change Log** - Change branches to see different change logs * 17.12: https://github.com/docker/docker-ce/blob/17.12/CHANGELOG.md **Checklist** * CentOS 7 ---- ====== Docker: Upgrade to CE ====== Docker has switched from docker-engine packages to docker-ce (community edition) and docker-ee (enterprise edition). docker-engine-ce's last version was 17.05. Official documentation: https://docs.docker.com/engine/installation/linux/docker-ce/centos/ ---- ====== Docker: Install ====== * Ensure system is updated<code bash>sudo yum update</code> * Add the Docker repo * Repo<code bash>yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo</code> * Add the GPG key<code bash>rpm --import https://download.docker.com/linux/centos/gpg</code> * Install Docker * CE (community edition)<code bash>yum install docker-ce</code> ---- ====== Docker: Storage ====== **Docker Data and Meta Data** * Create a "thin" logical volume using all of the space on a physical volume<code bash>sudo lvcreate --extents 100%PVS --thin --name lvdockerpool vglocal /dev/sdX1</code> * This thin logical volume will be used by the docker daemon directly to automatically setup a file system and allocate space for docker data and metadata. * **NOTE:** This space is NOT used for docker container image storage. (/var is the default) \\ If you ever need to increase docker container data storage OR metadata storage, they can be resized individually. * Resize docker pool metadata example (increase by 1 GB)<code bash>lvextend --size +1G -n vglocal/lvdockerpool_tmeta</code> * Resize docker pool storage example (increase by 10 GB)<code bash>lvextend --size +10G -n vglocal/lvdockerpool_tdata</code> \\ **Docker container image storage (/var)** * If /var needs more space for container image storage, run the following (example)<code bash>sudo lvextend --resizefs --size +7G /dev/vglocal/lvvar</code> ---- ====== Docker: Service ====== **Service Setup** * Override default docker.service startup options * Create a systemd docker.service override directory <code bash>sudo mkdir /etc/systemd/system/docker.service.d</code> * Create a docker.service override file * **Docker 1.12 (2016-07-28) - 17.12.0-ce (2017-12)**<code bash>tee /etc/systemd/system/docker.service.d/docker.conf <<-'EOF' [Service] EnvironmentFile= EnvironmentFile=-/etc/sysconfig/docker ExecStart= ExecStart=/usr/bin/dockerd $OPTIONS EOF</code> * The blank variable setting ensures that no default settings are appended to the overrides. * Setup docker daemon startup options * **Docker 1.12 (2016-07-28) - 17.12.0-ce (2017-12)**<code bash>tee /etc/sysconfig/docker <<-'EOF' # Modify these options if you want to change the way the docker daemon runs OPTIONS=--storage-driver=devicemapper --storage-opt dm.thinpooldev=vglocal-lvdockerpool --storage-opt dm.use_deferred_deletion=true --storage-opt dm.use_deferred_removal=true EOF </code> * Reload the systemd daemon for the override file to be picked up<code bash>systemctl daemon-reload</code> ---- ====== Docker: Start and Test ====== * Start the Docker engine, enable on boot, and check status<code bash>sudo systemctl start docker sudo systemctl enable docker sudo systemctl status docker</code> * Verify docker was started with the correct options<code bash>ps -elf | grep docker | grep -v grep</code> * Run the test image to ensure it is installed correctly<code bash>sudo docker run hello-world</code> * Create the "docker" group and add users to it<code bash>sudo usermod -aG docker <username></code> * Multiple users example<code bash>for x in user1 user2 user3; do sudo usermod -aG docker $x; done</code> * Log out/log back in * Verify the user can run docker commands without using sudo<code bash>docker run hello-world</code> ---- ====== Troubleshooting ====== * **Symptom**: Docker service fails to start * **Error Seen In Logs**: Error starting daemon: error initializing graphdriver: devicemapper: Non existing device vglocal-lvdockerpool * **Why**: /var/lib/docker contains metadata telling docker about the contents of device mapper storage. When /var/lib/docker is removed, metadata is lost. Then docker will detect the thin pool has data, but docker is unable to use it. * **Official Documentation**: https://access.redhat.com/solutions/2281281 __**The Fix**__ * Stop docker<code bash>systemctl stop docker</code> * Remove the docker thin pool logical volume<code bash>lvremove /dev/vglocal/lvdockerpool</code> * Re-create it (example using 100% of /dev/sde1)<code bash>lvcreate --extents 100%PVS --thin --name lvdockerpool vglocal /dev/sde1</code> ---- linux_wiki/docker.txt Last modified: 2019/07/20 18:13by billdozor