Docker
Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker安装(CentOS 7)
升级内核
升级方法:链接
安装配置Docker
- 移除旧版本
$ sudo yum remove docker*
- 阿里云配置安装
# Set up repository
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Use Aliyun Docker
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看指定版本
yum list docker-ce --showduplicates
# 安装指定版本
yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
# 不指定版本号 默认安装最新版
sudo yum install docker-ce
启动Docker后台服务
# Start docker service
systemctl enable docker
systemctl start docker
镜像加速
注册阿里云账号,在管理控制台中容器镜像服务,在左边栏点击镜像加速器,便能看见加速器的地址,然后配置/etc/docker/daemon.json文件
{
“registry-mirrors":["加速器地址”]
}
重新加载设置,重新启动Docker服务
# systemctl daemon-reload
# systemctl restart docker
注意:若不配置加速器,在docker build环节中出现超时
用Go语言创建一个“Hello World" web 应用
首先我们为 Go 应用创建一个目录,它会在浏览器中显示 “Hello World”。创建一个 web-app 目录并使它成为当前目录。进入 web-app 应用目录并编辑一个名为 main.go 的文件。
root@demohost:~# mkdir web-app
root@demohost:~# cd web-app/
root@demohost:~/web-app# vim.tiny main.go
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello %s", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/World", handler)
http.ListenAndServe(":8080", nil)
}
下一步是将上面的应用在 docker 中容器化。因此我们会创建一个 dockerfile 文件,它会告诉 docker 如何容器化我们的 web 应用。
root@demohost:~/web-app# vim.tiny Dockerfile
# 得到最新的 golang docker 镜像FROM golang:latest
# 在容器内部创建一个目录来存储我们的 web 应用,接着使它成为工作目录。
RUN mkdir -p /go/src/web-app
WORKDIR /go/src/web-app
# 复制 web-app 目录到容器中
COPY . /go/src/web-app
# 下载并安装第三方依赖到容器中
RUN go-wrapper download
RUN go-wrapper install
# 设置 PORT 环境变量
ENV PORT 8080
# 给主机暴露 8080 端口,这样外部网络可以访问你的应用
EXPOSE 8080
# 告诉 Docker 启动容器运行的命令
CMD ["go-wrapper", "run"]
构建/运行容器
使用下面的命令构建你的 Go web-app,你会在成功构建后获得确认。
root@demohost:~/web-app# docker build --rm -t web-app .
现在可以运行我们的 web-app 了,可以执行下面的命令。
root@demohost:~/web-app# docker run -p 8080:8080 --name="test" -d web-app
用浏览器输入http://localhost:8080/World,便能看到Hello World的字符
用下面的命令来启动、停止并检查容器的状态。
### 列出所有容器
root@demohost:~/ docker ps -a
### 使用 id 启动容器
root@demohost:~/ docker start CONTAINER_ID_OF_WEB_APP
### 使用 id 停止容器
root@demohost:~/ docker stop CONTAINER_ID_OF_WEB_APP