MENU

应用容器的构建与部署

April 27, 2019 • Read: 475 • 杂项

前段时间发现了一个CNCF × Alibaba 云原生技术公开课,然后就跟着学了起来。课程是免费的,然后听完课参加一个小测试,通过的话系统会发一个实验券可以免费上手还是挺不错的,下面就是一个简单的docker容器的构建和部署实践。

云原生最初来描述云上应用的典型架构与特性,近几年,容器、kubernetes、Serverless、FaaS这些为云设计的基础软件与资源模型重新定义着云上的最佳实践,云原生的概念也不断演进,CNCF(云原生计算基金会)在这个背景下创立,它把云原生的概念更广泛地定义为“让应用更有弹性、容错性、观测性的基础技术,让应用更容易部署、管理的基础软件、让应用更容易编写、编排的运行框架等”,希望能够让用户最好的利用云的资源、产品和交付能力。

1.实验资源

阿里云会创建一个临时ECS服务器,该资源会在一小时内释放。

2.登录ECS,安装docker

登录远程的ECS机器,然后安装docker。

sudo yum update -y
sudo yum install docker -y
sudo systemctl start docker

测试docker是否安装成功。

sudo docker run hello-world

3.创建Dockerfile

新建目录demo,将go代码写入demo下的main.go文件。

# mkdir demo
# cat main.go
import (
        "fmt"
        "net/http"
)

func main() {
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
                fmt.Fprintf(w, "Hello! World\n")
        })

        fmt.Println("start to serve...")
        http.ListenAndServe(":80", nil)
}

在当前目录下编写Dockerfile。

# cat Dockerfile
FROM golang:1.12-alpine

# change current working dir
WORKDIR /go/src/app

# copy main.go into /go/src/app
COPY . .

# go build and install the app
RUN go install -v ./...

# run the app by default
CMD ["app"]

4.构建镜像

# demo:v1 表示镜像名字demo和标签v1
$ docker build . -t demo:v1

Sending build context to Docker daemon  3.072kB
Step 1/5 : FROM golang:1.12-alpine
 ---> 8ff3fd35cf82
Step 2/5 : WORKDIR /go/src/app
Removing intermediate container ffd88a948413
 ---> 1056ea513b89
Step 3/5 : COPY . .
 ---> 9fc4655c973a
Step 4/5 : RUN go install -v ./...
 ---> Running in 928fc776a6e1
app
Removing intermediate container 928fc776a6e1
 ---> a93f17a3a726
Step 5/5 : CMD ["app"]
 ---> Running in 9e3463aa81f6
Removing intermediate container 9e3463aa81f6
 ---> 8697c7279c74
Successfully built 8697c7279c74
Successfully tagged demo:v1

另外可以在Docker引擎中设置镜像加速器加速对Docker Hub的访问,其实也可以直接使用阿里的镜像。更新/etc/docker/daemon.json

{
    "registry-mirrors":["https://registry.docker-cn.com"]
}

构建完毕后,本地运行以验证。

# 映射容器内 80 端到宿主机上的 8000 端口
# docker run -d -p 8000:80 demo:v1

# curl 一下查看结果
# curl localhost:8000
Hello! World

5.推送镜像至阿里云容器镜像服务

在推送之前,需要注册阿里云账号和开通阿里云容器镜像服务。容器镜像服务(Container Registry)提供安全的应用镜像托管能力,精确的镜像安全扫描功能,稳定的国内外镜像构建服务,便捷的镜像授权功能,方便用户进行镜像全生命周期管理。当我们拥有阿里云容器镜像服务账号,并在访问凭证页面设置固定密码后,就可以使用 docker 客户端来登录服务。

# docker login  -username=**** registry.cn-hangzhou.aliyuncs.com
Password: 
Login Succeeded

注意:此处的密码是在容器镜像服务-访问凭证页面 设置的固定密码。

在推送到镜像之前,我们在容器镜像服务的杭州地域,建立一个命名空间为aliyun_college_docker、仓库名为mydemo的本地仓库。之后,我们在ECS上将镜像地址修改为对应的镜像仓库地址:

# aliyun_college-docker 可以替换成自己的命名空间
# docker tag demo:v1 registry.cn-hangzhou.aliyuncs.com/aliyun_college_docker/mydemo:v1

# docker push registry.cn-hangzhou.aliyuncs.com/aliyun_college_docker/mydemo:v1

6.本地下载demo:v1镜像

现在就可以在自己的已装好docker环境本地使用docker pull命令下载镜像,然后直接运行测试。

# aliyun_college_docker 请替换成第5小节步骤中指定的命令空间
# docker pull registry.cn-hangzhou.aliyuncs.com/aliyun_college_docker/mydemo:v1
# curl localhost:8000
Last Modified: October 19, 2020