diff --git a/README.md b/README.md index 8e055d7..2258dd1 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ It offers a clean, interactive menu for common Docker operations like pulling im - ๐Ÿ”น **Interactive container management** โ€” start, stop, remove, or attach to containers with simple numbered menus. - ๐Ÿ”น **Port mapping made clear** โ€” automatically prompts for and explains host โ†” container port bindings. - ๐Ÿ”น **Image operations** โ€” pull, list, and delete Docker images. +- ๐Ÿ”น **Script-to-image workflow** โ€” turn a bash setup script into a Dockerfile and build the resulting image in one go. - ๐Ÿ”น **Quick MySQL setup** โ€” spin up a MySQL container with version, password, and port configuration in seconds. - ๐Ÿ”น **Get container IP address** โ€” cleanly retrieves and displays only the containerโ€™s assigned IP. - ๐Ÿ”น **Modern C++ design** โ€” built with classes, minimal dependencies, and clear abstractions. @@ -59,7 +60,8 @@ Tux-Dock: Docker Management Menu 10. Attach Shell to Running Container 11. Spin Up MySQL Container 12. Get Container IP Address -13. Exit +13. Create Dockerfile & Build Image from Bash Script +14. Exit ``` Each action guides you through the required steps. diff --git a/main.cpp b/main.cpp index 2bb7995..16b6fe9 100644 --- a/main.cpp +++ b/main.cpp @@ -197,7 +197,7 @@ void DockerManager::showContainerIP() { } void DockerManager::createDockerfile() { - string baseImage, bashScriptPath, outputFile; + string baseImage, bashScriptPath, outputFile, imageName; cout << "Enter base Docker image (e.g., ubuntu:22.04): "; cin >> baseImage; @@ -243,8 +243,17 @@ void DockerManager::createDockerfile() { scriptFile.close(); cout << "Dockerfile created successfully: " << outputFile << "\n"; - cout << "You can edit it or build it with:\n"; - cout << " docker build -t myimage -f " << outputFile << " .\n"; + cout << "Enter image name to build from this Dockerfile (e.g., myimage): "; + cin >> imageName; + + if (imageName.empty()) { + cout << "No image name provided. Skipping build.\n"; + return; + } + + cout << "Building Docker image '" << imageName << "'...\n"; + runCommand("docker build -t " + imageName + " -f " + outputFile + " ."); + cout << "Docker build command executed.\n"; } // ---------------- Menu ---------------- @@ -268,7 +277,7 @@ int main() { << "10. Attach Shell to Running Container\n" << "11. Spin Up MySQL Container\n" << "12. Get Container IP Address\n" - << "13. Create Dockerfile from Bash Script\n" + << "13. Create Dockerfile & Build Image from Bash Script\n" << "14. Exit\n" << "----------------------------------\n" << "Choose an option: "; @@ -297,5 +306,3 @@ int main() { } } } - - diff --git a/option13_script.sh b/option13_script.sh new file mode 100644 index 0000000..3020570 --- /dev/null +++ b/option13_script.sh @@ -0,0 +1,6 @@ +#!/bin/bash +echo "Setting up application directory" +mkdir -p /app/bin +echo '#!/bin/bash' > /app/bin/run.sh +echo 'echo "Hello from Tux-Dock generated image"' >> /app/bin/run.sh +chmod +x /app/bin/run.sh diff --git a/tux-dock b/tux-dock new file mode 100755 index 0000000..5312b2c Binary files /dev/null and b/tux-dock differ