Centos 7.x 利用 Dockerfile 來建立Beego Framework

來源:互聯網
上載者:User

Dockerfile包含建立鏡像所需要的全部指令。基於在Dockerfile中的指令,我們可以使用Docker build命令來建立鏡像。通過減少鏡像和容器的建立過程來簡化部署

Dockerfile 基本的文法是

使用#來注釋
FROM 指令告訴 Docker 使用哪個鏡像作為基礎,這裡我從自己的私人鏡像庫擷取
MAINTAINER:設定該鏡像的作者
RUN開頭的指令會在建立中運行,比如安裝一個軟體包,在這裡使用 yum 來安裝了一些軟體,在shell或者exec的環境下執行的命令。RUN指令會在新建立的鏡像上添加新的層面,接下來提交的結果用在Dockerfile的下一條指令中
ADD:複製檔案指令。它有兩個參數<source>和<destination>。destination是容器內的路徑。source可以是URL或者是啟動配置上下文中的一個檔案
CMD:提供了容器預設的執行命令。 Dockerfile只允許使用一次CMD指令。 使用多個CMD會抵消之前所有的指令,只有最後一個指令生效
EXPOSE:指定容器在運行時監聽的連接埠
ENTRYPOINT:配置給容器一個可執行檔命令,這意味著在每次使用鏡像建立容器時一個特定的應用程式可以被設定為預設程式。同時也意味著該鏡像每次被調用時僅能運行指定的應用。類似於CMD,Docker只允許一個ENTRYPOINT,多個ENTRYPOINT會抵消之前所有的指令,只執行最後的ENTRYPOINT指令
WORKDIR:指定RUN、CMD與ENTRYPOINT命令的工作目錄
ENV:設定環境變數。它們使用索引值對,增加運行程式的靈活性
USER:鏡像正在運行時設定一個UID
VOLUME:授權訪問從容器內到主機上的目錄
這個是一個部署beego環境的Dockfile,容器使用該鏡像能自動啟動一個beego架構的web應用


[root@docker data]# cat Dockerfile
# install beego
# version 1.0 
 
FROM 127.0.0.1:5000/centos:latest 
MAINTAINER ivonlee "ldtrain@gmail.com" 

ENV GOPATH /data/golang
ENV PATH $GOPATH/bin:$PATH
 
RUN \
 mkdir -p /data/golang && \
 yum install golang vim golang-vim git supervisor -y && \
 go get github.com/astaxie/beego && \
 go get github.com/beego/bee

ADD ./hello.go /data/golang/hello.go

RUN go build -o /data/golang/hello /data/golang/hello.go
RUN chmod 755 /data/golang/hello

WORKDIR /data/golang
EXPOSE 22 8080 

CMD ["/data/golang/hello"]

beego架構測試檔案hello.go,和Dockerfile放在同一目錄


[root@docker data]# cat hello.go
package main

import (
    "github.com/astaxie/beego"
)

type MainController struct {
    beego.Controller
}

func (this *MainController) Get() {
    this.Ctx.WriteString("hello world")
}

func main() {
    beego.Router("/", &MainController{})
    beego.Run()
}

bulid鏡像,這裡可以看到build的過程,是不是和打RPM包很相似。


[root@docker data]# docker build -t ivonlee/beego:0.2 .                   
Sending build context to Docker daemon 121.8 MB
Sending build context to Docker daemon
Step 0 : FROM 127.0.0.1:5000/centos:latest
 ---> 7322fbe74aa5
Step 1 : MAINTAINER ivonlee "ldtrain@gmail.com"
 ---> Using cache
 ---> 5e0641b86a2e
Step 2 : ENV GOPATH /data/golang
 ---> Using cache
 ---> a24c7200756f
Step 3 : ENV PATH $GOPATH/bin:$PATH
 ---> Using cache
 ---> 5c3318517537
Step 4 : RUN mkdir -p /data/golang &&  yum install golang vim golang-vim git supervisor -y &&  go get github.com/astaxie/beego &&  go get github.com/beego/bee
 ---> Using cache
 ---> e3d7183077bd
Step 5 : ADD ./hello.go /data/golang/hello.go
 ---> Using cache
 ---> 38353c802079
Step 6 : RUN go build -o /data/golang/hello /data/golang/hello.go
 ---> Using cache
 ---> ff18e9b3001a
Step 7 : RUN chmod 755 /data/golang/hello
 ---> Using cache
 ---> 3d047ec8add6
Step 8 : WORKDIR /data/golang
 ---> Running in 358fddd90750
 ---> d8c363846643
Removing intermediate container 358fddd90750
Step 9 : EXPOSE 22 8080
 ---> Running in ac57f3f00c8a
 ---> 032dae53209b
Removing intermediate container ac57f3f00c8a
Step 10 : CMD /data/golang/hello
 ---> Running in 85f17b350eba
 ---> ef5ba42cf19c
Removing intermediate container 85f17b350eba
Successfully built ef5ba42cf19c

-t: 為構建的鏡像制定一個標籤,便於記憶/索引等

. : 指定Dockerfile檔案在目前的目錄下

查看產生的鏡像,我上面bulid的是0.2這個版本

[root@docker data]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ivonlee/beego           0.2                 ef5ba42cf19c        4 minutes ago       539.1 MB
ivonlee/beego           0.1                 6b4c8db1ee6d        10 minutes ago      539.1 MB
如果想刪除某個鏡像,可以用 docker rmi ef5ba42cf19c

基於產生的鏡像運行一個容器


[root@docker data]# docker run -d -P -i --name beegotest2 ivonlee/beego:0.2
a69634223a4cfced7667c6e1667117b63fb714782c57a8ed0f64099183b0a90e
–name 是給容器取名,方便自己識別

-P 是自動對應容器裡面連接埠,宿主機會隨機映射一個連接埠

查看容器


[root@docker data]# docker ps -a
CONTAINER ID        IMAGE                                                                     COMMAND                CREATED             STATUS                       PORTS                                            NAMES
a69634223a4c        ivonlee/beego:0.2                                                         "/data/golang/hello"   11 seconds ago      Up 10 seconds                0.0.0.0:32788->22/tcp, 0.0.0.0:32789->8080/tcp   beegotest2            
6553473b32ed        ivonlee/beego:0.1                                                         "/bin/bash"            5 minutes ago       Up 5 minutes                 0.0.0.0:32786->22/tcp, 0.0.0.0:32787->8080/tcp   beegotest1

如果想刪除某個容器的話,可以docker rm a69634223a4c, 如果只有一個a6開頭的話,你甚至可以直接  docker rm a6,強制移除可以-f

可以看到容器開放了22和8080連接埠,宿主機將本地的32788映射到容器的22連接埠,32789映射到容器的8080連接埠,如果你想手動指定映射連接埠可以採用


docker run -d -p 8080:8080 -i --name beegotest2 ivonlee/beego:0.2

然後我們瀏覽器訪問下容器裡面的beego

92E7DD82-08F4-4A28-BB2E-DAEAD1C5C36B

如果想看容器內作業記錄可以用docker logs


[root@docker data]# docker logs a69634223a4c
2015/07/17 03:53:39 [config.go:314] [W] open /data/golang/conf/app.conf: no such file or directory
2015/07/17 03:53:39 [asm_amd64.s:2232] [I] http server Running on :8080
2015/07/17 03:54:07 [router.go:854] [D] | GET        | /                                        | 69.504µs         | match      | /                                        |
2015/07/17 03:54:11 [router.go:854] [D] | GET        | /                                        | 56.677µs         | match      | /                                        |
2015/07/17 04:01:53 [router.go:854] [D] | GET        | /                                        | 257.78µs         | match      | /                                        |
2015/07/17 06:36:26 [router.go:854] [D] | GET        | /                                        | 472.511µs        | match      | /                                        |


如果想停止重啟容器可以用 docker stop和docker restart


[root@docker data]# docker stop a69634223a4c
a69634223a4c
[root@docker data]# docker ps -a
CONTAINER ID        IMAGE                                                                     COMMAND                CREATED             STATUS                     PORTS                                            NAMES
a69634223a4c        ivonlee/beego:0.2                                                         "/data/golang/hello"   2 hours ago         Exited (2) 2 seconds ago                                                    beegotest2            
6553473b32ed        ivonlee/beego:0.1                                                         "/bin/bash"            2 hours ago         Up 2 hours                 0.0.0.0:32786->22/tcp, 0.0.0.0:32787->8080/tcp   beegotest1

可以看到a69634223a4c 這個容器已經是exit狀態

如果你想將容器儲存為鏡像,可以用docker commit

docker commit a69634223a4c newbeego

 

如果你想進一步對容器進行修改,可以ssh進去,前提是你的鏡像裡面設定過ssh密碼,或者在製作鏡像的時候,加入

RUN echo "root:123456" | chpasswd

或者通過docker exec無密碼進入

 docker exec -it a69634223a4c   /bin/bash

中間是容器的CONTAINER ID,通過docker ps -a可以看到

測試通過後,我們將鏡像提交到我們私人鏡像庫

[root@docker data]# docker tag ef5ba42cf19c  127.0.0.1:5000/beego
[root@docker data]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ivonlee/beego           0.2                 ef5ba42cf19c        29 minutes ago      539.1 MB
127.0.0.1:5000/beego    latest              ef5ba42cf19c        29 minutes ago      539.1 MB
ivonlee/beego           0.1                 6b4c8db1ee6d        35 minutes ago      539.1 MB
docker.io/registry      latest              ddfbba49d0b6        2 days ago          423.6 MB
docker.io/centos        latest              7322fbe74aa5        4 weeks ago         172.2 MB
127.0.0.1:5000/centos   latest              7322fbe74aa5        4 weeks ago         172.2 MB
[root@docker data]# docker push 127.0.0.1:5000/beego
The push refers to a repository [127.0.0.1:5000/beego] (len: 1)
Sending image list
Pushing repository 127.0.0.1:5000/beego (1 tags)
Image f1b10cd84249 already pushed, skipping
Image 7322fbe74aa5 already pushed, skipping
Image c852f6d61e65 already pushed, skipping
5e0641b86a2e: Image successfully pushed
a24c7200756f: Image successfully pushed
5c3318517537: Image successfully pushed
e3d7183077bd: Image successfully pushed
38353c802079: Image successfully pushed
ff18e9b3001a: Image successfully pushed
3d047ec8add6: Image successfully pushed
d8c363846643: Image successfully pushed
032dae53209b: Image successfully pushed
ef5ba42cf19c: Image successfully pushed
Pushing tag for rev [ef5ba42cf19c] on {http://127.0.0.1:5000/v1/repositories/beego/tags/latest}
[root@docker data]# curl 127.0.0.1:5000/v1/search
{"num_results": 2, "query": "", "results": [{"description": "", "name": "library/centos"}, {"description": "", "name": "library/beego"}]}
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.