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

Docker部署GLPI的项目 docker部署go_Docker

编写 dockerfile

首先新建文件。在当前文件夹下执行指令 touch Dockerfile,注意将DockerfileD大写

现在文件夹下就出现了dockerfile

Docker部署GLPI的项目 docker部署go_Docker_02


打开新建的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部署GLPI的项目 docker部署go_docker_03


执行docker images查看创建的镜像

Docker部署GLPI的项目 docker部署go_ubuntu_04


可以看到我们刚刚创建的镜像web

运行容器

在终端执行下面的指令使用创建好的 web 镜像启动一个容器

docker run --rm -it -d -p 8080:8080 web

Docker部署GLPI的项目 docker部署go_ubuntu_05

  • docker run 命令用于指定镜像上上启动一个容器,这里指定为web镜像
  • -it 表示以交互的方式启动容器
  • –rm 表示在容器关闭后将会将其清除
  • -p 8080:8080 标签允许通过8080端口访问该容器
  • -d 后台运行


测试 Go Web App

在浏览器中输入网址 localhost:8080 可以看到网页上成功输出了“hello world”,说明容器化应用成功!

Docker部署GLPI的项目 docker部署go_App_06