製作docker映像(三)--golang應用程序

本篇文章與製作docker映像(二)–golang應用程序的不同之處在於,不會拷貝程序源代碼到容器中,而是通過掛載數據卷的方式,使容器與容器共享文件。

1. Dockerfile

首先新建項目目錄,目錄中的文件如下:

[lanyang@localhost docker_demo]$ cd myapp3
[lanyang@localhost myapp3]$ ll
total 8
-rw-rw-r--. 1 lanyang lanyang 117 Feb 16 21:52 Dockerfile
-rw-rw-r--. 1 lanyang lanyang 158 Feb 16 21:52 hello.go

來看下,Dockerfile的內容:

FROM golang:1.13
RUN mkdir -p /opt/app
WORKDIR /opt/app
CMD go build -o hello  hello.go && ./hello

可以看到,沒有將源碼文件拷貝到容器的操作。

CMD中進行編譯並執行可執行文件。

hello.go的內容沒有變化。

2.構建映像

[lanyang@localhost myapp3]$ docker build -t myapp3 .
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM golang:1.13
 ---> 297e5bf50f50
Step 2/4 : RUN mkdir -p /opt/app
 ---> Using cache
 ---> 0d3903be2f95
Step 3/4 : WORKDIR /opt/app
 ---> Using cache
 ---> e0ab81b9f435
Step 4/4 : CMD go build -o hello  hello.go && ./hello
 ---> Running in 0a75ed80e20b
Removing intermediate container 0a75ed80e20b
 ---> 9639699d7aa0
Successfully built 9639699d7aa0
Successfully tagged myapp3:latest

3.測試映像

[lanyang@localhost myapp3]$ docker run -it --rm -v $PWD:/opt/app --name myapp3-test myapp3
Hello golang from Docker!
Hello golang from Docker!
Hello golang from Docker!
Hello golang from Docker!
Hello golang from Docker!
Hello golang from Docker!
Hello golang from Docker!
Hello golang from Docker!
Hello golang from Docker!
Hello golang from Docker!

--rm 容器退出時自動刪除該容器,通常用在演示、測試等場景中。

在容器中執行命令,查看目錄內容:

[lanyang@localhost myapp3]$ docker exec -it myapp3-test bash
root@b5cf4e1f9f60:/opt/app# ls
Dockerfile  hello  hello.go

可以看到宿主機目錄上的文件,在容器中也存在。

發佈了471 篇原創文章 · 獲贊 170 · 訪問量 208萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章