《Docker初相见》

什么是Docker

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

Docker通常用于如下场景

  • web应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境

golang为什么使用Docker作为容器

多数Go应用程序时简单的二进制文件。这就引发一个问题为什么使用Docker运行一个Go应用程序?一些使用Docker运行Go的理由包
括:

  1. Web应用程序通常都有模版和配置文件。
  2. Docker有助于保持这些文件与二进制文件的同步
  3. Docker确保了在开发或生产中完全相同的配置。
  4. 很多时候当应用程序可以在开发环境中正常工作时,在生产环境去无法正常工作。使用DOcker则把你从对这些问题的担心中解放了出来。在一个大型的团队中主机、操作系统及所安装的软件可能存在很大的不同。Docker提供了一种机制来确保一致的开发环境配置。这将提升团队的生产力并且在开发阶段减少冲突和可避免问题的发生。

安装Docker

我的电脑是Windows10,所以我在官网下载了windows版本的docker安装包,下载好了以后,一直安装就可以了。有其他需求的同学可参考windows下安装docker有更多的说明。

实战

  1. 创建一个项目为hellodocker
  2. 创建一个main.go(没什么特别)
package main

import (
    "net/http"
    "fmt"
)

func main() {
    http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
        fmt.Fprint(writer,"hello docker")
    })
    http.ListenAndServe(":8080",nil)
}

  1. 在项目的根目录创建一个叫dockerfile的文件
# 得到最新的 golang docker 镜像
FROM golang:latest

# 在容器内部创建一个目录来存储我们的 web 应用,接着使它成为工作目录。
RUN mkdir -p /go/src/go-mgox

WORKDIR /go/src/GoMgo 

# 复制 web-app 目录到容器中

COPY . /go/src/GoMgo
# 下载并安装第三方依赖到容器中

RUN go-wrapper download
RUN go-wrapper install

# 设置 PORT 环境变量
ENV PORT 8080

# 给主机暴露 8080 端口,这样外部网络可以访问你的应用
EXPOSE 8080

# 告诉 Docker 启动容器运行的命令
CMD ["go-wrapper", "run"]
  1. 构建镜像(这里可以使用镜像服务器,不然有点慢,但是我是没用上)
docker build -t go-mgox .
// . 是不能省略的

image

build的时候出现了Successfully build才表示成功

  1. 查看docker镜像
docker images
image
  1. 开启docker(前台方式)
    在命令行输入
docker run -p 8080:8080 hellodocker
  • docker run :运行docker镜像
  • -p 8080:8080 :将宿主机(也就是本机)的8080端口映射到容器的8080端口,此处需要先确认本机的8080端口并未被占用,否则将无法开启
  • hellodocker :镜像名(也支持id)
  1. 开启docker(后台方式)
docker run -p 8080:8080 -d hellodocker
image

说明开启成功,在浏览器中输入http://localhost:8080/,即可看到我们的返回内容

  1. 停止docker
    停止和退出docker有两种方法,一个是kill另一个是stop
  • stop :系统先发送停止信号,有充分的时间(默认10s)完成清理后再发送kill信号让容器退出
  • kill : 系统直接发送退出信号,让容器强制退出
docker stop id
或
docker kill id

删除镜像

镜像删除是一个比较复杂的操作

  1. 查询镜像
docker images
image

现在想删除第一个,ID为 ad981e05699d 的镜像。


image

从上面看出,需要先停到ID为 e4ebfe6be8d8 的容器。

  1. 查询容器
docker ps -a
image
  1. 先删除容器
docker rm 容器id
image
  1. 删除镜像
docker rmi 镜像id

image

注意点:

  1. 删除前需要保证容器是停止的 stop
  2. 需要注意删除镜像和容器的命令不一样。 docker rmi ID ,其中 容器(rm) 和 镜像(rmi)
  3. 顺序需要先删除容器

尾声

本人也作为一个初学者,很多docker的只是还有待提高。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349