# 構建鏡像
> 構建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 .
```