|
7 | 7 | # Docs: https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/docker-in-docker.md
|
8 | 8 | # Maintainer: The VS Code and Codespaces Teams
|
9 | 9 | #
|
10 |
| -# Syntax: ./docker-in-docker-debian.sh [enable non-root docker access flag] [non-root user] [use moby] |
| 10 | +# Syntax: ./docker-in-docker-debian.sh [enable non-root docker access flag] [non-root user] [use moby] [Engine/CLI Version] |
11 | 11 |
|
12 | 12 | ENABLE_NONROOT_DOCKER=${1:-"true"}
|
13 | 13 | USERNAME=${2:-"automatic"}
|
14 | 14 | USE_MOBY=${3:-"true"}
|
| 15 | +DOCKER_VERSION=${4:-"latest"} # The Docker/Moby Engine + CLI should match in version |
15 | 16 | MICROSOFT_GPG_KEYS_URI="https://packages.microsoft.com/keys/microsoft.asc"
|
16 | 17 | DOCKER_DASH_COMPOSE_VERSION="1"
|
17 | 18 |
|
@@ -123,33 +124,69 @@ if type iptables-legacy > /dev/null 2>&1; then
|
123 | 124 | update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
|
124 | 125 | fi
|
125 | 126 |
|
126 |
| -# Install Docker / Moby CLI if not already installed |
| 127 | +# Source /etc/os-release to get OS info |
| 128 | +. /etc/os-release |
| 129 | +# Fetch host/container arch. |
127 | 130 | architecture="$(dpkg --print-architecture)"
|
| 131 | + |
| 132 | +# Set up the necessary apt repos (either Microsoft's or Docker's) |
| 133 | +if [ "${USE_MOBY}" = "true" ]; then |
| 134 | + |
| 135 | + # Name of open source engine/cli |
| 136 | + engine_package_name="moby-engine" |
| 137 | + cli_package_name="moby-cli" |
| 138 | + |
| 139 | + # Import key safely and import Microsoft apt repo |
| 140 | + get_common_setting MICROSOFT_GPG_KEYS_URI |
| 141 | + curl -sSL ${MICROSOFT_GPG_KEYS_URI} | gpg --dearmor > /usr/share/keyrings/microsoft-archive-keyring.gpg |
| 142 | + echo "deb [arch=${architecture} signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/microsoft-${ID}-${VERSION_CODENAME}-prod ${VERSION_CODENAME} main" > /etc/apt/sources.list.d/microsoft.list |
| 143 | +else |
| 144 | + # Name of licensed engine/cli |
| 145 | + engine_package_name="docker-ce" |
| 146 | + cli_package_name="docker-ce-cli" |
| 147 | + |
| 148 | + # Import key safely and import Docker apt repo |
| 149 | + curl -fsSL https://download.docker.com/linux/${ID}/gpg | gpg --dearmor > /usr/share/keyrings/docker-archive-keyring.gpg |
| 150 | + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/${ID} ${VERSION_CODENAME} stable" > /etc/apt/sources.list.d/docker.list |
| 151 | +fi |
| 152 | + |
| 153 | +# Refresh apt lists |
| 154 | +apt-get update |
| 155 | + |
| 156 | +# Soft version matching |
| 157 | +if [ "${DOCKER_VERSION}" = "latest" ] || [ "${DOCKER_VERSION}" = "lts" ] || [ "${DOCKER_VERSION}" = "stable" ]; then |
| 158 | + # Empty, meaning grab whatever "latest" is in apt repo |
| 159 | + engine_version_suffix="" |
| 160 | + cli_version_suffix="" |
| 161 | +else |
| 162 | + # Fetch a valid version from the apt-cache (eg: the Microsoft repo appends +azure, breakfix, etc...) |
| 163 | + engine_version_suffix="=$(apt-cache madison ${engine_package_name} | awk -F"|" '{print $2}' | sed -e 's/^[ \t]*//' | grep -E -m 1 "^(${DOCKER_VERSION})(\.|$|\+.*|-.*)")" |
| 164 | + cli_version_suffix="=$(apt-cache madison ${cli_package_name} | awk -F"|" '{print $2}' | sed -e 's/^[ \t]*//' | grep -E -m 1 "^(${DOCKER_VERSION})(\.|$|\+.*|-.*)")" |
| 165 | + if [ ${engine_version_suffix} = "=" ] || [ ${cli_version_suffix} = "=" ] ; then |
| 166 | + echo "ERR: Provided VERSION (${DOCKER_VERSION}) was not found in the apt-cache for the CLI and/or Engine in this distribution"; |
| 167 | + echo "Available *engine* versions for your distribution (NOTE: pass to this script in the form -> MAJOR.MINOR.REV)" |
| 168 | + apt-cache madison ${engine_package_name} | awk -F"|" '{print $2}' |
| 169 | + exit 1 |
| 170 | + fi |
| 171 | + echo "engine_version_suffix ${engine_version_suffix}" |
| 172 | + echo "cli_version_suffix ${cli_version_suffix}" |
| 173 | +fi |
| 174 | + |
| 175 | +# Install Docker / Moby CLI if not already installed |
128 | 176 | if type docker > /dev/null 2>&1 && type dockerd > /dev/null 2>&1; then
|
129 | 177 | echo "Docker / Moby CLI and Engine already installed."
|
130 | 178 | else
|
131 |
| - # Source /etc/os-release to get OS info |
132 |
| - . /etc/os-release |
133 | 179 | if [ "${USE_MOBY}" = "true" ]; then
|
134 |
| - # Import key safely (new 'signed-by' method rather than deprecated apt-key approach) and install |
135 |
| - get_common_setting MICROSOFT_GPG_KEYS_URI |
136 |
| - curl -sSL ${MICROSOFT_GPG_KEYS_URI} | gpg --dearmor > /usr/share/keyrings/microsoft-archive-keyring.gpg |
137 |
| - echo "deb [arch=${architecture} signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/microsoft-${ID}-${VERSION_CODENAME}-prod ${VERSION_CODENAME} main" > /etc/apt/sources.list.d/microsoft.list |
138 |
| - apt-get update |
139 |
| - apt-get -y install --no-install-recommends moby-cli moby-buildx moby-engine |
| 180 | + apt-get -y install --no-install-recommends moby-cli${cli_version_suffix} moby-buildx moby-engine${engine_version_suffix} |
140 | 181 | apt-get -y install --no-install-recommends moby-compose || echo "(*) Package moby-compose (Docker Compose v2) not available for ${VERSION_CODENAME} ${architecture}. Skipping."
|
141 | 182 | else
|
142 |
| - # Import key safely (new 'signed-by' method rather than deprecated apt-key approach) and install |
143 |
| - curl -fsSL https://download.docker.com/linux/${ID}/gpg | gpg --dearmor > /usr/share/keyrings/docker-archive-keyring.gpg |
144 |
| - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/${ID} ${VERSION_CODENAME} stable" > /etc/apt/sources.list.d/docker.list |
145 |
| - apt-get update |
146 |
| - apt-get -y install --no-install-recommends docker-ce-cli docker-ce |
| 183 | + apt-get -y install --no-install-recommends docker-ce-cli${cli_version_suffix} docker-ce${engine_version_suffix} |
147 | 184 | fi
|
148 | 185 | fi
|
149 | 186 |
|
150 |
| -echo "Finished installing docker / moby" |
| 187 | +echo "Finished installing docker / moby!" |
151 | 188 |
|
152 |
| -# Install Docker Compose if not already installed and is on a supported architecture |
| 189 | +# Install Docker Compose if not already installed and is on a supported architecture |
153 | 190 | if type docker-compose > /dev/null 2>&1; then
|
154 | 191 | echo "Docker Compose already installed."
|
155 | 192 | else
|
|
176 | 213 | ${pipx_bin} install --system-site-packages --pip-args '--no-cache-dir --force-reinstall' docker-compose
|
177 | 214 | rm -rf /tmp/pip-tmp
|
178 | 215 | else
|
| 216 | + # Only supports docker-compose v1 |
179 | 217 | find_version_from_git_tags DOCKER_DASH_COMPOSE_VERSION "https://github.com/docker/compose" "tags/"
|
180 | 218 | echo "(*) Installing docker-compose ${DOCKER_DASH_COMPOSE_VERSION}..."
|
181 | 219 | curl -fsSL "https://github.com/docker/compose/releases/download/${DOCKER_DASH_COMPOSE_VERSION}/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
|
|
0 commit comments