# 构建镜像
> 构建Golang编译环境
## 使用容器创建镜像
* 创建并运行一个容器(基于ubuntu:14.04镜像)
``` shell
$ sudo docker run --name golang -it ubuntu:14.04 /bin/bash
```
* 安装Golang编译器
``` shell
$ apt-get update
$ apt-get install -y golang
# 清除apt缓存
$ rm -rf /var/lib/apt/lists/*
```
* 配置Golang编译环境
``` shell
$ mkdir /gopath && cd /gopath && mkdir bin src
$ export GOPATH=/gopath
$ export PATH=$PATH:$GOPATH/bin
```
* 构建Golang镜像
``` shell
# Usage docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
$ docker commit -m 'Golang compiler.' golang golang:test
```
## 使用Dockerfile构建镜像
> 以上述操作为例,介绍一些常用指令,具体了解可参考附录A
* Dockerfile指令
``` Dockerfile
# 基础镜像
# Usage: FROM image:tag
FROM ubuntu:14.04
# 指定维护者信息
# Usage: MAINTAINER name
MAINTAINER tiannianshou@gmail.com
# 在shell中运行命令
# Usage: RUN command
RUN apt-get update && \
apt-get install -y golang && \
rm -rf /var/lib/apt/lists/* && \
mkdir -p /gopath
# 指定环境变量
# Usage: ENV key value
ENV GOPATH /gopath
ENV PATH $GOPATH/bin:$PATH
# 工作目录
# Usage: WORKDIR /path
WORKDIR /gopath
# 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
# Usage: VOLUMES
VOLUMES ["/gopath"]
# 容器暴漏给外侧的端口号
# Usage: EXPOSE port [port...]
EXPOSE 80
# 指定启动容器时执行的命令
# Usage: CMD ["executable","param1","param2"]
CMD ["/bin/bash"]
```
* 构建镜像
``` shell
# 使用指定的Dockerfile创建镜像
# Usage: docker build [OPTIONS] PATH | URL | -
# .表示当前目录
$ sudo docker build -t golang:1.2 .
```