3.2. Install Docker¶
Docker plays an essential role in this framework. Most of our services will be installed into a Docker container for better isolation.
Run the following command to install Docker (you need to enable the extra
repo if you are on Red Hat Enterprise
Linux):
sudo yum install docker
3.2.1. Set up Docker Storage Options¶
By default, Docker storage uses its devicemapper storage driver in the loopback mode. However, this default setting is strongly discouraged for production use. Here, the overlay storage driver will be used, but you are free to explore other storage options. If you have your own idea of storage options, you can skip to the section Enable and Start Docker.
To change the storage options, set the DOCKER_STORAGE_OPTIONS
in /etc/sysconfig/docker-storage
:
sudo sed -i '/DOCKER_STORAGE_OPTIONS=/s/$/-s overlay/' /etc/sysconfig/docker-storage
Since SELinux is not supported by the overlay
driver, the SELinux support for Docker should be disabled by removing
--selinux-enabled
from the Docker options in /etc/sysconfig/docker
:
sudo sed -i '/OPTIONS=/s/--selinux-enabled//' /etc/sysconfig/docker
On some variants of RHEL, a service docker-storage-setup
is available on the system (you can check this by executing
systemctl | grep docker-storage-setup
). In this case, we need to disable it:
sudo systemctl disable docker-storage-setup
3.2.2. Enable and Start Docker¶
Now we can start Docker and make Docker start at boot:
sudo systemctl enable docker
sudo systemctl start docker
3.2.3. Miscellaneous Setup for Convenient Administration¶
To use Docker as a non-root user:
sudo groupadd docker
sudo usermod -a -G docker $USER
It will let us run Docker without root access. Remember relogin is required to make the group change take effect.
Since we need to enter the container, for convenience, run the command below to add a bash function to use nsenter to enter a container:
cat >>~/.bashrc << 'EOF'
ne () {
pid=$(docker inspect --format '{{.State.Pid}}' $1)
env SHELL='/bin/bash' sudo -E nsenter --target $pid \
--mount --uts --ipc --net --pid
}
EOF
Now we are going to record the host IP address in the docker0
network. First run the following command:
ifconfig docker0
The output should be similar to the following:
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.42.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::5484:7aff:fefe:9799 prefixlen 64 scopeid 0x20<link>
ether 56:84:7a:fe:97:99 txqueuelen 0 (Ethernet)
RX packets 39 bytes 1828 (1.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 45 bytes 4050 (3.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
You may have a different IP address after inet
. Export the inet
entry to a variable, which
will be used later. In this example it should be:
echo 'export HOST_ADDR=172.17.42.1' >> ~/.bashrc
Remember to replace 172.17.42.1
with the output on your system!
Finally, reload ~/.bashrc
:
source ~/.bashrc