diff --git a/ct/docker.sh b/ct/docker.sh index 531e04e8d..5b8589ae5 100644 --- a/ct/docker.sh +++ b/ct/docker.sh @@ -20,18 +20,68 @@ color catch_errors function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /var ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - msg_info "Updating ${APP} LXC" - $STD apt-get update - $STD apt-get -y upgrade - msg_ok "Updated ${APP} LXC" - exit + header_info + check_container_storage + check_container_resources + + get_latest_release() { + curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4 + } + + msg_info "Updating base system" + $STD apt-get update + $STD apt-get -y upgrade + msg_ok "Base system updated" + + msg_info "Updating Docker Engine" + $STD apt-get install --only-upgrade -y docker-ce docker-ce-cli containerd.io + msg_ok "Docker Engine updated" + + if [[ -f /usr/local/lib/docker/cli-plugins/docker-compose ]]; then + COMPOSE_BIN="/usr/local/lib/docker/cli-plugins/docker-compose" + COMPOSE_NEW_VERSION=$(get_latest_release "docker/compose") + msg_info "Updating Docker Compose to $COMPOSE_NEW_VERSION" + curl -fsSL "https://github.com/docker/compose/releases/download/${COMPOSE_NEW_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \ + -o "$COMPOSE_BIN" + chmod +x "$COMPOSE_BIN" + msg_ok "Docker Compose updated" + fi + + if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then + msg_info "Updating Portainer" + $STD docker pull portainer/portainer-ce:latest + $STD docker stop portainer && docker rm portainer + $STD docker volume create portainer_data >/dev/null 2>&1 + $STD docker run -d \ + -p 8000:8000 \ + -p 9443:9443 \ + --name=portainer \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v portainer_data:/data \ + portainer/portainer-ce:latest + msg_ok "Updated Portainer" + fi + + if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then + msg_info "Updating Portainer Agent" + $STD docker pull portainer/agent:latest + $STD docker stop portainer_agent && docker rm portainer_agent + $STD docker run -d \ + -p 9001:9001 \ + --name=portainer_agent \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/lib/docker/volumes:/var/lib/docker/volumes \ + portainer/agent + msg_ok "Updated Portainer Agent" + fi + + msg_info "Cleaning up" + $STD apt-get -y autoremove + $STD apt-get -y autoclean + msg_ok "Cleanup complete" + exit } start @@ -39,4 +89,4 @@ build_container description msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" \ No newline at end of file +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" diff --git a/install/docker-install.sh b/install/docker-install.sh index 5156f4d36..238a84046 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -29,7 +29,17 @@ echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json $STD sh <(curl -fsSL https://get.docker.com) msg_ok "Installed Docker $DOCKER_LATEST_VERSION" -read -r -p "${TAB3}Would you like to add Portainer? " prompt +read -r -p "${TAB3}Install Docker Compose v2 plugin? " prompt_compose +if [[ ${prompt_compose,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" + mkdir -p /usr/local/lib/docker/cli-plugins + curl -fsSL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \ + -o /usr/local/lib/docker/cli-plugins/docker-compose + chmod +x /usr/local/lib/docker/cli-plugins/docker-compose + msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION" +fi + +read -r -p "${TAB3}Would you like to add Portainer (UI)? " prompt if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" docker volume create portainer_data >/dev/null @@ -43,9 +53,9 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then portainer/portainer-ce:latest msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" else - read -r -p "${TAB3}Would you like to add the Portainer Agent? " prompt - if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" + read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? " prompt_agent + if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then + msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" $STD docker run -d \ -p 9001:9001 \ --name portainer_agent \ @@ -57,12 +67,25 @@ else fi fi -read -r -p "${TAB3}Expose Docker TCP socket (⚠️ insecure)? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Enabling Docker TCP socket on port 2375 (insecure)" - - mkdir -p /etc/docker - echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json +read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] : " socket_choice +case "${socket_choice,,}" in + l) + socket="tcp://127.0.0.1:2375" + ;; + a) + socket="tcp://0.0.0.0:2375" + ;; + *) + socket="" + ;; +esac + +if [[ -n "$socket" ]]; then + msg_info "Enabling Docker TCP socket on $socket" + $STD apt-get install -y jq + + tmpfile=$(mktemp) + jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json > "$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json mkdir -p /etc/systemd/system/docker.service.d cat < /etc/systemd/system/docker.service.d/override.conf @@ -75,14 +98,13 @@ EOF $STD systemctl daemon-reload if systemctl restart docker; then - msg_ok "Docker TCP socket now available on tcp://0.0.0.0:2375" + msg_ok "Docker TCP socket available on $socket" else msg_error "Docker failed to restart. Check journalctl -xeu docker.service" exit 1 fi fi - motd_ssh customize