mirror of https://github.com/docker/docs.git
250 lines
6.4 KiB
Markdown
250 lines
6.4 KiB
Markdown
---
|
|
title: Test your Go deployment
|
|
linkTitle: Test your deployment
|
|
weight: 50
|
|
keywords: deploy, go, local, development
|
|
description: Learn how to deploy your Go application
|
|
aliases:
|
|
- /language/golang/deploy/
|
|
- /guides/language/golang/deploy/
|
|
---
|
|
|
|
## Prerequisites
|
|
|
|
- Complete all the previous sections of this guide, starting with [Build
|
|
your Go image](build-images.md).
|
|
- [Turn on Kubernetes](/manuals/desktop/features/kubernetes.md#install-and-turn-on-kubernetes) in Docker
|
|
Desktop.
|
|
|
|
## Overview
|
|
|
|
In this section, you'll learn how to use Docker Desktop to deploy your
|
|
application to a fully-featured Kubernetes environment on your development
|
|
machine. This allows you to test and debug your workloads on Kubernetes locally
|
|
before deploying.
|
|
|
|
## Create a Kubernetes YAML file
|
|
|
|
In your project directory, create a file named
|
|
`docker-go-kubernetes.yaml`. Open the file in an IDE or text editor and add
|
|
the following contents. Replace `DOCKER_USERNAME/REPO_NAME` with your Docker
|
|
username and the name of the repository that you created in [Configure CI/CD for
|
|
your Go application](configure-ci-cd.md).
|
|
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
labels:
|
|
service: server
|
|
name: server
|
|
namespace: default
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
service: server
|
|
strategy: {}
|
|
template:
|
|
metadata:
|
|
labels:
|
|
service: server
|
|
spec:
|
|
initContainers:
|
|
- name: wait-for-db
|
|
image: busybox:1.28
|
|
command:
|
|
[
|
|
"sh",
|
|
"-c",
|
|
'until nc -zv db 5432; do echo "waiting for db"; sleep 2; done;',
|
|
]
|
|
containers:
|
|
- env:
|
|
- name: PGDATABASE
|
|
value: mydb
|
|
- name: PGPASSWORD
|
|
value: whatever
|
|
- name: PGHOST
|
|
value: db
|
|
- name: PGPORT
|
|
value: "5432"
|
|
- name: PGUSER
|
|
value: postgres
|
|
image: DOCKER_USERNAME/REPO_NAME
|
|
name: server
|
|
imagePullPolicy: Always
|
|
ports:
|
|
- containerPort: 8080
|
|
hostPort: 8080
|
|
protocol: TCP
|
|
resources: {}
|
|
restartPolicy: Always
|
|
status: {}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
labels:
|
|
service: db
|
|
name: db
|
|
namespace: default
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
service: db
|
|
strategy:
|
|
type: Recreate
|
|
template:
|
|
metadata:
|
|
labels:
|
|
service: db
|
|
spec:
|
|
containers:
|
|
- env:
|
|
- name: POSTGRES_DB
|
|
value: mydb
|
|
- name: POSTGRES_PASSWORD
|
|
value: whatever
|
|
- name: POSTGRES_USER
|
|
value: postgres
|
|
image: postgres
|
|
name: db
|
|
ports:
|
|
- containerPort: 5432
|
|
protocol: TCP
|
|
resources: {}
|
|
restartPolicy: Always
|
|
status: {}
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
service: server
|
|
name: server
|
|
namespace: default
|
|
spec:
|
|
type: NodePort
|
|
ports:
|
|
- name: "8080"
|
|
port: 8080
|
|
targetPort: 8080
|
|
nodePort: 30001
|
|
selector:
|
|
service: server
|
|
status:
|
|
loadBalancer: {}
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
service: db
|
|
name: db
|
|
namespace: default
|
|
spec:
|
|
ports:
|
|
- name: "5432"
|
|
port: 5432
|
|
targetPort: 5432
|
|
selector:
|
|
service: db
|
|
status:
|
|
loadBalancer: {}
|
|
```
|
|
|
|
In this Kubernetes YAML file, there are four objects, separated by the `---`. In addition to a Service and Deployment for the database, the other two objects are:
|
|
|
|
- A Deployment, describing a scalable group of identical pods. In this case,
|
|
you'll get just one replica, or copy of your pod. That pod, which is
|
|
described under `template`, has just one container in it. The container is
|
|
created from the image built by GitHub Actions in [Configure CI/CD for your
|
|
Go application](configure-ci-cd.md).
|
|
- A NodePort service, which will route traffic from port 30001 on your host to
|
|
port 8080 inside the pods it routes to, allowing you to reach your app
|
|
from the network.
|
|
|
|
To learn more about Kubernetes objects, see the [Kubernetes documentation](https://kubernetes.io/docs/home/).
|
|
|
|
## Deploy and check your application
|
|
|
|
1. In a terminal, navigate to the project directory
|
|
and deploy your application to Kubernetes.
|
|
|
|
```console
|
|
$ kubectl apply -f docker-go-kubernetes.yaml
|
|
```
|
|
|
|
You should see output that looks like the following, indicating your Kubernetes objects were created successfully.
|
|
|
|
```shell
|
|
deployment.apps/db created
|
|
service/db created
|
|
deployment.apps/server created
|
|
service/server created
|
|
```
|
|
|
|
2. Make sure everything worked by listing your deployments.
|
|
|
|
```console
|
|
$ kubectl get deployments
|
|
```
|
|
|
|
Your deployment should be listed as follows:
|
|
|
|
```shell
|
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
|
db 1/1 1 1 76s
|
|
server 1/1 1 1 76s
|
|
```
|
|
|
|
This indicates all of the pods are up and running. Do the same check for your services.
|
|
|
|
```console
|
|
$ kubectl get services
|
|
```
|
|
|
|
You should get output like the following.
|
|
|
|
```shell
|
|
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
|
db ClusterIP 10.96.156.90 <none> 5432/TCP 2m8s
|
|
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 164m
|
|
server NodePort 10.102.94.225 <none> 8080:30001/TCP 2m8s
|
|
```
|
|
|
|
In addition to the default `kubernetes` service, you can see your `server` service and `db` service. The `server` service is accepting traffic on port 30001/TCP.
|
|
|
|
3. Open a terminal and curl your application to verify that it's working.
|
|
|
|
```console
|
|
$ curl --request POST \
|
|
--url http://localhost:30001/send \
|
|
--header 'content-type: application/json' \
|
|
--data '{"value": "Hello, Oliver!"}'
|
|
```
|
|
|
|
You should get the following message back.
|
|
|
|
```json
|
|
{ "value": "Hello, Oliver!" }
|
|
```
|
|
|
|
4. Run the following command to tear down your application.
|
|
|
|
```console
|
|
$ kubectl delete -f docker-go-kubernetes.yaml
|
|
```
|
|
|
|
## Summary
|
|
|
|
In this section, you learned how to use Docker Desktop to deploy your application to a fully-featured Kubernetes environment on your development machine.
|
|
|
|
Related information:
|
|
|
|
- [Kubernetes documentation](https://kubernetes.io/docs/home/)
|
|
- [Deploy on Kubernetes with Docker Desktop](/manuals/desktop/features/kubernetes.md)
|
|
- [Swarm mode overview](/manuals/engine/swarm/_index.md)
|