2## @brief Docker functions
4## @section docker_example Example
5## @include docker_setup.sh
7(( $EC2PINIT_DOCKER_INCLUDED )) &&
return
8EC2PINIT_DOCKER_INCLUDED=1
12## @brief Install docker on the server
13## @param user account to add to docker group
14## @param bind_port binds the docker daemon to a TCP port. When this option is
15## enabled the ``user`` account argument is ignored in favor of setting
18 local user=
"${1:-$USER}"
21 io_error "docker_setup: unsupported operating system"
24 # TODO: Generalize the following init blocks
25 io_info "docker_setup: Installing docker"
28 sys_pkg_install apt-transport-https ca-certificates curl gnupg lsb-release sudo
29 if [ ! -f
"/etc/apt/keyrings/docker.gpg" ]; then
30 sudo mkdir -p /etc/apt/keyrings
33 if [ ! -f
"/etc/apt/sources.list.d/docker.list" ]; then
34 echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
35 | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
40 sys_pkg_install apt-transport-https ca-certificates curl gnupg lsb-release sudo
41 if [ ! -f
"/etc/apt/keyrings/docker.gpg" ]; then
42 sudo mkdir -p /etc/apt/keyrings
45 if [ ! -f
"/etc/apt/sources.list.d/docker.list" ]; then
46 echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
47 | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
52 if [ ! -f /etc/yum.repos.d/docker-ce.repo ]; then
53 yum-config-manager --add-repo \
56 sys_pkg_install docker-ce docker-ce-cli containerd.io docker-compose-plugin
58 io_warn "docker_setup: Operating system was not recognized. Blindly attempting to install docker." >&2
62 # Enable the system service
63 io_info "docker_setup: Enabling docker"
64 systemctl enable docker
66 if [ -n
"$bind_port" ] && [[ $bind_port =~ [0-9]+ ]]; then
67 # Allow any local account to use the docker API port
68 io_info "docker_setup: Binding docker to port 127.0.0.1:${bind_port}"
69 mkdir -p /etc/systemd/system/docker.service.d
70cat << CONFIG > /etc/systemd/system/docker.service.d/
override.conf
73ExecStart=/usr/bin/dockerd -H 127.0.0.1:${bind_port} --containerd=/run/containerd/containerd.sock
75 echo
"DOCKER_HOST=tcp://127.0.0.1:${bind_port}" > /etc/profile.d/docker_host.sh
76 source /etc/profile.d/docker_host.sh
78 # Only the named can use docker
79 io_info "docker_setup: adding $user to docker group"
83 io_info "docker_setup: Reloading systemd"
84 systemctl daemon-reload
85 io_info "docker_setup: Starting docker"
86 systemctl start docker
89## @fn docker_user_add()
90## @brief Add a user account to the ``docker`` group
91## @param user an account to modify (must exist)
93 local user=
"${1:-$USER}"
94 if groups
"$user" | grep docker; then
95 usermod -a -G docker
"$user"
99## @fn docker_pull_many()
100## @brief Wrapper for ``docker pull``
101## @details Pull multiple docker images with a single command
102## @param image... image to pull
105## images=(centos:7 centos:8)
106## docker_pull_many "${images[@]}"
108## docker_pull_many "centos:7" "centos:8"
112 local image_count=
"${#image[@]}"
115 if [ -z
"$image_count" ]; then
119 io_info "Pulling $image_count image(s)..."
120 for ((i = 0; i < image_count; i++));
do
121 io_info "Image #$((i+1)): ${image[i]}"
122 if ! docker pull
"${image[$i]}"; then
126 (( error_count )) &&
return 1
io_warn(...)
Print a warning message.
io_info(...)
Print a message.
io_error(...)
Print an error message.
Exported String HAVE_UBUNTU
System is based on Ubuntu.
sys_pkg_install(...)
Install a system package.
Exported String HAVE_SUPPORT
System is supported.
Exported String HAVE_DEBIAN
System is based on Debian.
Exported String HAVE_REDHAT
System is based on Red Hat.
docker_user_add(user)
Add a user account to the docker group.
docker_setup(user, bind_port)
Install docker on the server.
docker_pull_many(image...)
Wrapper for docker pull