記一次docker容器化部署

事情是這樣的

一我的程序員,用golang寫了個server,寫完後...不會部署 : )
是的,這我的就是我...
今天真的是要被本身笑死
終於有機會在公司項目中使用golang進行開發,整個開發過程至關亢奮!然而...當跟前端小哥哥聯調完接口後,小哥哥問我何時能給線上地址
(一臉懵)忘記還有上線這回事了
每每本身業餘寫的golang項目就直接 go build 而後拖到服務器而後運行一下搞定
可是這是公司項目啊!!! 會給你ftp??? 你能夠碰到服務器??? (彷彿聽到了DBA小哥哥的心聲)
因而... 我找到了DBA小哥哥,問該如何發佈
「你直接打包一個rpm或者給個docker吧」 前端

哈?
rpm? 你肯定不是npm?
docker??? (臥槽,我好像兩年前就該看看了) 我還沒看過... linux

因而乎虛心請教DBA小哥哥,「能麻煩大體跟我講下這個rpm是怎麼個打法嗎?」
「好啊,你就先……*¥%#¥而後再$%……%%」
「哦,好,我回去看看」程序員

而後

而後我就回來學起了docker 23333333333
好在部門內有個老司機
直接就讓我上了車golang

開車

首先咱們要先down一個docker
mac版: https://www.docker.com/docker...
能打開mac已經證實會安裝了,咱們就再也不復述了 docker

安裝完成後到啓動臺裏面點一下可愛的小鯨魚 npm

clipboard.png

而後在命令行輸入centos

$ docker info

看到一堆亂七八糟的東西輸出證實安裝成功 bash

咱們須要從鏡像市場down一個linux鏡像~
https://store.docker.com 搜索 centos 會看到 服務器

clipboard.png
選擇哪一個版本徹底混眼熟 哈哈哈哈
看到具體版本號 在命令行執行tcp

$ docker pull centos:7.2.1511

clipboard.png
Already exists 是由於在寫這篇記錄以前已經pull過了 哈哈哈

裝好鏡像後經過docker images來查看已存在的鏡像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7.2.1511            0a2bad7da9b5        5 months ago        195MB

下面咱們來讓這個鏡像跑起來

$ docker run -p 8888:80 --name godocker -e ENV="dev" -it 0a2bad7da9b5 /bin/bash
-p 本機端口號:映射到docker的端口號(當本機的8888請求被訪問時會進入到docker的80端口)
--name docker實例的名稱(想怎麼起怎麼起)
-e docker的環境變量
-v 相似於軟鏈,將docker的某個路徑映射到本機的實體路徑(具體的能夠針對性百度哦)
-it 後面跟docker image 的id

敲下回車~ 哎呦進去了!
不急不急 咱們先退出來

exit

趕快 趕快 build一個go server

$ cd /xxx/xxx/xxx/xxx/xxx/gotest  
$ touch main.go  
$ vi main.go  
  package main  
  import "fmt"  
  func main() {
    fmt.Println("hello word")
  }
  :x
$ go build for linux (固然是僞代碼啦)  
# 會生成一個跟目錄同名的可執行文件 gotest
# 將文件拷貝到docker鏡像中
$ docker cp /Users/wangboyan/development/golang/src/gotest/gotest godocker:/var/www
# 而後進入docker中查看剛纔的gotest是否存在  
$ docker ps  

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
b2802801c24c        0a2bad7da9b5        "/bin/bash"         14 minutes ago      Up 14 minutes       0.0.0.0:8888->80/tcp   godocker  

docker exec -it b2802801c24c /bin/bash
# 會發現咱們成功進入了docker哦  
$ cd /var/www
$ ll
$ gotest

驚不驚喜~意不意外~
徹底意料之中...
執行如下咱們編譯好的可執行文件看看

clipboard.png
此時 只想呵呵 呵呵 哈哈哈哈哈
如今咱們來將剛剛的修改 生成新的鏡像文件

# 先退出docker
exit
$ docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
b2802801c24c        0a2bad7da9b5        "/bin/bash"         14 minutes ago      Up 14 minutes       0.0.0.0:8888->80/tcp   godocker

咱們經過commit命令將容器轉化爲鏡像

$ docker commit -m "myself docker image" -a "holdno" 0a2bad7da9b5 holdno/centos-go:1.0.0  
# 敲下回車後會獲得如下結果 證實成功!
sha256:554e840711c57bd4d2ede4a29a5c1dff3a711050c421ebfc38090d0f5a358b83  
# 從新查看鏡像信息  
$ docker images  

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
holdno/centos-go    1.0.0               554e840711c5        11 seconds ago      197MB
centos              7.2.1511            0a2bad7da9b5        5 months ago        195MB

有沒有!生成了新的鏡像

打包(save)

本身的docker鏡像算是作好了(我作啥了?)
下面咱們來打包這個鏡像
畢竟DBA小哥哥要的只是個
咱們可使用 saveload 方法,前者用來把鏡像保存一個tar文件,後臺從一個tar文件恢復成一個鏡像

$ docker save -o /Users/wangboyan/development/docker/centos-go.v1.0.0.tar 554e840711c5
-o :輸出到的文件(注意哦,這個路徑必定是已經存在的路徑!)

恢復(load)

# 刪除剛剛打包過的鏡像
$ docker rmi 554e840711c5
$ docker load < /Users/wangboyan/development/docker/centos-go.v1.0.0.tar  
Loading layer [==================================================>]   2.03MB/2.03MB  
$ docker images  

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              554e840711c5        11 seconds ago      197MB
centos              7.2.1511            0a2bad7da9b5        5 months ago        195MB

不知道爲何 REPOSITORY 和 TAG 變成了 none
如今咱們來啓動剛剛導入的鏡像

$ docker run -it 554e840711c5 /bin/bash
$ cd /var/www  
$ ll  
gotest  
# 有沒有! 剛纔cp進來的可執行文件還在!(這不是很正常嗎)  
$ ./gotest  
hello world  
$

因此能夠直接把 centos-go.v1.0.0.tar 丟給DBA小哥哥了?

相關文章
相關標籤/搜索