docker的基本使用
如何在ubuntu 16.04上安装docker,以及docker的基本使用可以参考我的上一篇博客 服务计算之玩转 Docker
dockerfile的编写
要在docker上部署应用一定绕不开编写dockerfile,下面简单的总结一下dockerfile的编写规则
指令 | 作用 | 其他 |
FROM | 镜像使用的基础镜像 | 我们创建的镜像都是从一个基础镜像中生成,如果在指定时没有加入tag选项,系统会默认使用latest镜像 |
MAINTAINER | 镜像的作者 | 可以省略 |
RUN | 镜像在编译时运行的脚本 | RUN指令设置编译镜像时执行的脚本,镜像编译完成后,RUN指令的生命周期结束 |
CMD | 容器的启动命令 | |
LABEL | 镜像的标签 | |
EXPOSE | 镜像暴露的端口 | EXPOSE只设置暴露端口并不导出端口,只有启动容器时使用-P/-p才导出端口,这个时候才能通过外部访问容器提供的服务 |
ENV | 容器的环境变量 | |
ADD | 编译时会被复制到镜像中的文件 | 使用语法为ADD < src> < dest> 当src为文件或目录时,Docker Daemon会从编译目录寻找这些文件或目录,而dest为镜像中的绝对路径或者相对于WORKDIR的路径 |
COPY | 同ADD | |
ENTRYPOINT | 容器的入口程序 | 入口程序是容器启动时执行的程序,docker run中最后的命令将作为参数传递给入口程序 |
VOLUME | 容器的挂载点 | 启动容器时,Docker Daemon会新建挂载点,并用镜像中的数据初始化挂载点,可以将主机目录或数据卷容器挂载到这些挂载点 |
USER | 用户名 | USER可以设置RUN CMD ENTRYPOINT的用户名或UID |
WORKDIR | 镜像运行的工作目录 | 设置RUN CMD ENTRYPOINT ADD COPY指令的工作目录,如果工作目录不存在,则Docker Daemon会自动创建 |
ARG | 编译镜像时加入的参数 | |
STOPSIGNAL | 容器的退出信号 |
如何应用这些规则来编写Dockerfile可以向下看Go Web App 的容器化的第三步
Go Web App 的容器化
编写一个简单的Go Web App
在go工作目录下新建一个main.go文件,写入如下代码,实现一个简单的监听8080端口的服务器
package main
import (
"net/http"
"fmt"
)
func main() {
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
fmt.Fprint(writer, "Hello World")
})
http.ListenAndServe(":8080",nil)
}
编译main.go文件
在当前目录下打开终端,输入 go build -o main
编译写好的main.go
此时目录下出现了生成的二进制文件main
编写 dockerfile
首先新建文件。在当前文件夹下执行指令 touch Dockerfile
,注意将Dockerfile
的D
大写
现在文件夹下就出现了dockerfile
打开新建的Dockerfile
FROM golang:latest
WORKDIR /
ADD main /
EXPOSE 8080
ENTRYPOINT ["./main"]
-
FROM golang:latest
: docker 镜像选择从golang:latest构建 -
WORKDIR /
: 设置工作路径为当前目录,容器启动时执行的命令会在当前目录下执行 -
ADD main /
: 将当前路径的main文件添加进docker容器里面 -
EXPOSE 8080
: 设置暴露的端口为8080 -
ENTRYPOINT ["./main"]
: 设置容器启动时执行的程序为当前目录的main程序
构建镜像
使用下面的指令构建镜像
docker build -t web .
其中 -t
参数后的 web
制定了镜像名
执行docker images
查看创建的镜像
可以看到我们刚刚创建的镜像web
运行容器
在终端执行下面的指令使用创建好的 web 镜像启动一个容器
docker run --rm -it -d -p 8080:8080 web
- docker run 命令用于指定镜像上上启动一个容器,这里指定为
web
镜像 - -it 表示以交互的方式启动容器
- –rm 表示在容器关闭后将会将其清除
- -p 8080:8080 标签允许通过8080端口访问该容器
- -d 后台运行
测试 Go Web App
在浏览器中输入网址 localhost:8080
可以看到网页上成功输出了“hello world”,说明容器化应用成功!