一、Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

在这里插入图片描述
观察Docker图标,其实很形象的解释了什么是Docker。在没有使用集装箱的情况下,我们需要考虑不同形状、尺寸的货物怎么安放,货物与货物之间是否能堆叠,这无疑是很繁琐的事情。现在有了集装箱(容器),我们就能将不同的货物放入集装箱之内这样就能以同样的方式来存放货物,实现了标准化。

Docker采用了集装箱原理,我们将程序放入到容器中,实现“一次封装,到处运行”,只要开发环境能跑,在其他任何流行的机器上都能运行。并且将程序丢入到容器中,很好的实现了程序与程序之间的隔离,避免了类似Java开发的程序和.net开发的程序安装在一个服务器上需要很多调试,有时还会产生冲突的情况。

Docker的应用场景:

Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。



二、Docker的安装与配置【CentOS环境】

在CentOS环境下,通过如下指令即可安装Docker:

sudo yum install docker

在安装完毕后,可通过如下指令检验安装是否成功:

$ docker --version
Docker version 1.13.1, build 64e9980/1.13.1

检查安装无误后,即可开始下面的基于golang的docker helloworld程序。


三、Docker部署Golang web helloworld

首先创建项目目录和main.go文件:

[henryhzy@localhost 桌面]$ mkdir helloWorldDocker
[henryhzy@localhost 桌面]$ cd helloWorldDocker/
[henryhzy@localhost helloWorldDocker]$ touch main.go
[henryhzy@localhost helloWorldDocker]$ cat main.go 
[henryhzy@localhost helloWorldDocker]$ vim main.go

在main.go文件中输入如下内容:

package main
import ("fmt""net/http"
)
func main() {fmt.Println("Hello world!!")http.HandleFunc("/", homePage)http.HandleFunc("/login", login)_ = http.ListenAndServe(":80", nil)
}
func homePage(w http.ResponseWriter, r *http.Request) {fmt.Println("Hello Docker")
}
func login(w http.ResponseWriter, r *http.Request) {fmt.Println("Login Docker")
}

然后创建Dockerfile文件,其内容如下:

FROM golang:latest
WORKDIR $GOPATH/src/helloWorldDocker
COPY . $GOPATH/src/helloWorldDocker
RUN go build .
EXPOSE 8080
ENTRYPOINT ["./helloWorldDocker"]

编译并运行dockers:

docker build -t hellow ./helloWorldDocker
docker run -p 8080:8080 hellow 

运行结果:

Hello world!!



四、Docker与虚拟机的区别

在这里插入图片描述


五、吐槽

Docker在编译运行时太慢了太慢了,如果系统资源不足&网速慢,估计得等到一百年~
下篇博客应该会介绍快速编译&more golang web~