


Introduction
While most Go applications are compiled into a single binary file, web applications also come with templates, assets, and configuration files; these can get out of sync and cause erroneous deployments.
Docker allows us to create a standalone image with everything our application needs to run. In this article, we will learn how to deploy a Go web application using Docker installed on an instance, and how Docker can help you improve your development workflow and deployment process.
The steps we need will be as follows:
- Launch an instance (your machine)to build Docker on and the Go
application
- Install Docker in instance
- Installing Go in instance
- Create code files for your Go application
- Application Testing
Launch an instance (your machine)to build Docker on and the Go
application
You can find the same steps of the launch and connect of instance described in the article:
https://dev.to/zahraajawad/building-a-jupyter-notebook-environment-in-docker-for-data-analysis-on-aws-ec2-376i
Note: Make sure you choose the security group:
SSH-Port 22: To access and connect to the instance using SSH
protocol to manage the system remotely.HTTP-Port 8080: To run the Go application on this port (8080) to access it from the Internet or local network, this port must be open.
- Install Docker in our instance
The specific workflow architecture we will create uses Docker to provide an integrated workflow environment.
So after connecting to the instance via SSH and obtaining the root privilege, use the following command automation to install Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get update && apt-cache policy docker-ce
Docker experience: Run a simple test command docker -v to check that Docker is working properly and to see the Docker version:
Installing Go
You can install Go by downloading it from the official Go website https://go.dev/dl/
wget https://golang.org/dl/go1.20.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile
source ~/.bash_profile
where :
wget https://golang.org/dl/go1.20.linux-amd64.tar.gz is to download Go binary.
and
sudo tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz is to extract the tarball to /usr/local.
and
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile to Update the PATH environment variable.
and source ~/.bash_profile to apply the changes made to the profile
So after executing the commands and verifying the execution through the command ls to show the downloaded files:
Initialize the Go application with the following code:
go mod init my-go-app
Now we need to create a project folder by the command:
mkdir
Then change the current directory by the command :
cd
so the execution is :
Create code files for your Go application
The main.go file
We create a new file called main.go which contains the following functions and codes which we will explain in detail and then we put all the codes in the main.go file:
- To import the necessary packages we use the code:
import ( "encoding/json" "log" "net/http" "github.com/gorilla/mux" "os" )
- For the data structure item:
type Item struct { ID int `json:"id"` Name string `json:"name"` }
where itemis a data structure containing an identifier (ID) and a name (Name). These fields are converted to JSON format using tags (json:"id" and json:"name".
- items variable
var items []Item
which is a slice of items stored in server memory.
- Through the main function the structures are arranged by reading the port (here it will be on port 8080) in addition to directing the various requests from retrieving or adding a new element and displaying a simple HTML page.
import ( "encoding/json" "log" "net/http" "github.com/gorilla/mux" "os" )
- The function getItems returns a list of items in JSON format. The content type in the header is set to application/json.
type Item struct { ID int `json:"id"` Name string `json:"name"` }
- The createItem function adds a new item to the items list. The data is read from the Request Body in JSON format, the item is assigned an ID based on the number of existing items, and the added item is returned as JSON.
var items []Item
- The serveHome function displays a simple HTML page with a welcome message (Welcome to the Go App) and links to access the data.
func main() { port := os.Getenv("PORT") if port == "" { port = "8080" } router := mux.NewRouter() router.HandleFunc("/items", getItems).Methods("GET") router.HandleFunc("/items", createItem).Methods("POST") router.HandleFunc("/", serveHome).Methods("GET") log.Printf("Server is running on port %s...\n", port) log.Fatal(http.ListenAndServe(":"+port, router)) }
So the entire main.go file is:
func getItems(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(items) }
Now through the command vim or nano create the main.go file and put above code in the file, here we will use the command nano:
nano main.go
And past the codes:
then exit the file from the keyboard by ctrl x then y (to save the file) then click enter
Dockerfile:
Is a text document that contains all the commands a user could call on the command line to assemble an image.
Dockerfile can build images automatically by reading the instructions from a Dockerfile.
Create a Dockerfile:
A Dockerfile with build instructions is required to build a container image with Docker.
We create a Dockerfile and add the following code in the same way as before through the command nano Dockerfile:
Dockerfile command details can be found on the docker docs homepage https://docs.docker.com/guides/golang/build-images/
Now that we have prepared the Dockerfile, it is time to build a Docker image for the Go application. The image can be made from the official Docker images which are:
docker build -t my-go-app .
The image is successfully built, and to make sure of the build by using the command:
docker images
Then to run the container after building the image, we use:
docker run -p 8080:8080 my-go-app
where 8080 is the port of the web servers, so the execution run is:
Application Testing
- Test the Go application by the curl command
To test whether the Go application works properly through the curl command by:
curl http://localhost:8080/items
or
curl http://
the execution is null, which means the application is working but we have no data yet.
To add an item, by the command:
curl -X POST -H "Content-Type: application/json" -d '{"name": "item"}' http://localhost:8080/items
or
curl -X POST -H "Content-Type: application/json" -d '{"name": "item"}' http://
so the execution of adding:
we can add another item:
- Test the Go application by the web page
To test whether the Go application works properly through the web page, the following steps:
- Go back to the instance and select it by the checkbox.
- Go to the Details and copy the Public IPv4 address.
- Paste the public IPv4 address with port 8080 into the browser and press Enter.
The web page is working and when we press on items on the page we obtain the items that add by the curl command.
Or can press the checkbox of Pretty-print:
References:
- https://dev.to/zahraajawad/building-a-jupyter-notebook-environment-in-docker-for-data-analysis-on-aws-ec2-376i
- https://semaphoreci.com/community/tutorials/how-to-deploy-a-go-web-application-with-docker
- https://hub.docker.com/_/golang
- https://docs.docker.com/guides/golang/build-images/
- https://github.com/gorilla/mux
The above is the detailed content of Building a Go Application with Docker on AWS: Creating a RESTful Interface for Adding and Retrieving Items. For more information, please follow other related articles on the PHP Chinese website!

Golang is suitable for rapid development and concurrent programming, while C is more suitable for projects that require extreme performance and underlying control. 1) Golang's concurrency model simplifies concurrency programming through goroutine and channel. 2) C's template programming provides generic code and performance optimization. 3) Golang's garbage collection is convenient but may affect performance. C's memory management is complex but the control is fine.

Goimpactsdevelopmentpositivelythroughspeed,efficiency,andsimplicity.1)Speed:Gocompilesquicklyandrunsefficiently,idealforlargeprojects.2)Efficiency:Itscomprehensivestandardlibraryreducesexternaldependencies,enhancingdevelopmentefficiency.3)Simplicity:

C is more suitable for scenarios where direct control of hardware resources and high performance optimization is required, while Golang is more suitable for scenarios where rapid development and high concurrency processing are required. 1.C's advantage lies in its close to hardware characteristics and high optimization capabilities, which are suitable for high-performance needs such as game development. 2.Golang's advantage lies in its concise syntax and natural concurrency support, which is suitable for high concurrency service development.

Golang excels in practical applications and is known for its simplicity, efficiency and concurrency. 1) Concurrent programming is implemented through Goroutines and Channels, 2) Flexible code is written using interfaces and polymorphisms, 3) Simplify network programming with net/http packages, 4) Build efficient concurrent crawlers, 5) Debugging and optimizing through tools and best practices.

The core features of Go include garbage collection, static linking and concurrency support. 1. The concurrency model of Go language realizes efficient concurrent programming through goroutine and channel. 2. Interfaces and polymorphisms are implemented through interface methods, so that different types can be processed in a unified manner. 3. The basic usage demonstrates the efficiency of function definition and call. 4. In advanced usage, slices provide powerful functions of dynamic resizing. 5. Common errors such as race conditions can be detected and resolved through getest-race. 6. Performance optimization Reuse objects through sync.Pool to reduce garbage collection pressure.

Go language performs well in building efficient and scalable systems. Its advantages include: 1. High performance: compiled into machine code, fast running speed; 2. Concurrent programming: simplify multitasking through goroutines and channels; 3. Simplicity: concise syntax, reducing learning and maintenance costs; 4. Cross-platform: supports cross-platform compilation, easy deployment.

Confused about the sorting of SQL query results. In the process of learning SQL, you often encounter some confusing problems. Recently, the author is reading "MICK-SQL Basics"...

The relationship between technology stack convergence and technology selection In software development, the selection and management of technology stacks are a very critical issue. Recently, some readers have proposed...


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Dreamweaver Mac version
Visual web development tools

SublimeText3 English version
Recommended: Win version, supports code prompts!

Notepad++7.3.1
Easy-to-use and free code editor

Atom editor mac version download
The most popular open source editor

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.