docker link 练习
部署两个容器,一个web服务,一个数据库服务,实现web容器从数据库容器拿数据
环境
- Ubuntu 18.04 虚拟机
- docker 20.10.1
- go1.10.4 linux/amd64
前提准备
准备redis v7版本
下载redis v7版本
链接,可以直接git clone
https://github.com/go-redis/redis/tree/v7
将下载的文件夹里的所有内容放在go相关路径下
路径,如提示没有当前文件夹则手动创建
root@k8smaster:/usr/lib/go-1.10/src/github.com/go-redis/redis/v7
步骤
制作web服务docker image
创建go 可执行程序
创建一个文件夹,新建一个main.go文件,代码如下
package main
import (
"fmt"
"log"
"net/http"
"github.com/go-redis/redis/v7"
)
var dbClient *redis.Client
var key = "pv"
func init() {
dbClient = redis.NewClient(&redis.Options{
Addr: "db:6379",
})
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe("0.0.0.0:8080", nil))
}
func handler(w http.ResponseWriter, r *http.Request) {
log.Printf("Ping from %s", r.RemoteAddr)
pageView, err := dbClient.Incr(key).Result()
if err != nil {
panic(err)
}
fmt.Fprintf(w, "Hello, you're visitor #%v.\n", pageView)
}
将main.go编译成可执行程序
可执行程序名为mainredis
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o mainredis
创建docker image
创建Dockerfile
在当前路径(main.go所在路径)创建Dockerfile文件,内容如下
FROM ubuntu:18.04
COPY mainredis /
CMD ["/mainredis"]
创建docker image
root@k8smaster:~/pageview2# docker build -t pvredis2:v1.0.0 .
Sending build context to Docker daemon 8.668MB
Step 1/3 : FROM ubuntu:18.04
---> 2c047404e52d
Step 2/3 : COPY mainredis /
---> 629537449ef0
Step 3/3 : CMD ["/mainredis"]
---> Running in 171bf813843c
Removing intermediate container 171bf813843c
---> 8043e513fbf0
Successfully built 8043e513fbf0
Successfully tagged pvredis2:v1.0.0
运行container
运行redis container
将container命名为db
docker run --name db -d redis
运行web 容器
查看刚刚build的image
root@k8smaster:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pvredis2 v1.0.0 8043e513fbf0 17 hours ago 71.9MB
启动容器
以id启动,将容器内部8080端口映射到外部宿主机84端口,并在此容器run时指定连接db容器
root@k8smaster:~/pageview2# docker run -p 84:8080 --link db -d 804
检查
随着curl 本地84端口,web服务会将访问次数计次
root@k8smaster:~/pageview2# curl 0.0.0.0:84
Hello, you're visitor #1.
root@k8smaster:~/pageview2# curl 0.0.0.0:84
Hello, you're visitor #2.
而由于后台有数据库服务,将web容器重启之后,访问次数不会置零,会保持重启前的次数
网友评论