摘要:圖表君聊前邊幾篇文章給大家介紹了的三大基本概念。維護者的信息是圖表君當前目錄到容器中的目錄下指定工作路徑為安裝依賴暴露端口啟動創建鏡像編寫好后,就可以使用來了。歡迎訂閱我的公眾號,第一時間獲取圖表君的新文章。
圖表君聊docker-Dockerfile
前邊幾篇文章給大家介紹了docker的三大基本概念。可能大家覺得概念的東西比較生澀,有沒有更多實戰的例子呢?好了,從這篇文章開始,我會給大家介紹更多實際的例子來幫助大家,那么就從dockerfile開始吧。
在介紹docker image的時候,我給大家介紹了build image的兩種方法,但是留了一個坑,就是DockerFile,那今天圖表君就來把這個坑填了。
什么是DockerfileDockerfile實際上是由一行行命令組成的,讓用戶可以方便的創建自定義鏡像。下邊就是一個Dockerfile的例子
FROM python:2.7 MAINTAINER Aaron Chen "mail@aaronchen.cn" COPY . /app WORKDIR /app RUN pip install -r requirements.txt EXPOSE 5000 ENTRYPOINT ["python"] CMD ["app.py"]
這個例子是啟動一個python flask app的Dockerfile(flask是python的一個輕量的web框架)。下邊我就來介紹下dockerfile里的指令。
通常來說,Dockerfile的指令分為四類,基礎鏡像信息,維護者信息,鏡像操作指令以及容器啟動時執行的指令。常用的指令有如下:
FROM用于指定基礎的images
格式為 FROM
一個Dockerfile里的第一條指令必須為FORM指令。
MAINTAINER格式為 MAINTAINER
格式為 RUN
RUN命令將在基礎鏡像上執行相應的指令,并提交為新的鏡像。
啟動Docker時運行的命令,一個dockerfile只有一個CMD起效,但是當用戶在docker run 時提供了運行的命令時,CMD命令就會被覆蓋。
推薦的格式為為 CMD["executable","param1","param2"]
另外一種格式為 CMD["param1","param2"],配合ENTRYPOINT同時使用,其中的兩個參數會提供給ENTRYPOINT。
ENTRYPOINT配置容器啟動后執行的命令,并且不可被 docker run 提供的參數覆蓋。每個 Dockerfile 中只能有一個 ENTRYPOINT ,當指定多個時,只有最后一個起 效。
COPY復制本地主機的
為后續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目錄。
格式為 WORKDIR /workdirPath
上邊就是一些基礎的命令,還有其他一些命令,圖表君就不一一介紹了,大家有興趣了可以去docker官網上自己查詢。
我們再來看上邊的Dockerfile的例子,現在應該能看懂了把。它定義就是:
從dockerhub上pull下python 2.7的基礎鏡像。
維護者的信息是圖表君
copy當前目錄到容器中的 /app目錄下
指定工作路徑為/app
安裝依賴
暴露5000端口
啟動app
創建鏡像編寫好Dockerfile后,就可以使用docker build來build images了。其格式為:
docker build 選項 [路徑],通常我們可以使用.dockerignore來定義docker build images的時候忽略的文件,通常項目的依賴我們一般會忽略(例如 npm install后的 node_modules)。我們可以使用 docker build . -t pythonflasksample來build image. 然后我們就可以使用docker run 來運行容器。
上邊是一個python app的栗子,我們再來看一個前端的栗子。
├── .dockerignore ├── .gitignore ├── Dockerfile ├── README.md ├── app │?? ├── directives │?? ├── index.html │?? └── index.js ├── dist │?? ├── bundle.js │?? └── index.html ├── node_modules ├── karma.conf.js ├── package.jsonimage └── webpack.config.js
這是一個Angular的前端project的項目目錄。我們用npm來管理和安裝依賴的包,用webpack來構建項目。下來用Dockerfile來定義一個docker image,將其容器化。
FROM node:4.6 MAINTAINER Aaron ChenRUN mkdir /app WORKDIR /app COPY . /app RUN npm install EXPOSE 8080
這里Dockerfile的定義,很簡單,下載基礎鏡像node 4.6,安裝依賴,暴露接口。
下來我們用docker build . -t webpackdemo來build這個image,當image構建好后,簡單的執行docker run -it -p 3456:8080 webapackdemo2 npm run start,好了一個前端的project就啟動起來了。相當的輕松,讓你訪問http://localhost:3456/的時候就可以訪問了。
這里是這個project的github repo,大家可以來一看究竟。
dockerSample
如果你是個前端開發人員,看到這里的時候一定會覺得,這到底解決了什么問題呢?我本地啟動也沒有什么問題啊。的確圖表君剛開始也有這樣的疑問,但經過思考,我認為解決了這幾個問題:
讓開發的環境能更簡單的搭建了。經常會有這樣的場景,在別人機器上正常的開發環境,在自己的機器上為什么就是不行呢?研究了半天,發現人家用的是node 6.5,自己用的是node 0.11。在使用了docker以后就解決了這樣的問題,只要pull下image就OK了,所有的版本和依賴都固定下來了。
現在業績最流行的構架方式當屬于微服務了,一個系統的正常啟動依賴于多個服務,有可能對于其中的某些服務我們并不熟悉,那么如果將服務容器化了以后,就能有效的解決這樣的問題了。另外對于團隊里的其他非技術人員使得他們也能容易的在本地搭建起環境來。
其實,上邊這個前端項目中的dockerfile有一個很大的問題,圖表君給大家留個問題。如果大家看出來了,歡迎給我留言
好了,Dockerfile就介紹這么多,我們下期再見。
歡迎訂閱我的公眾號,第一時間獲取圖表君的新文章。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26748.html
摘要:圖表君聊開篇今天是圖表君聊的第一篇,為什么會有這個系列呢容器技術出現已經有一段時間了,之前零零星星的也看過一些文章,圖表君的項目上也在使用。至于,圖表君沒試過,官網有的教程,大家可以參考。上的官網,安裝,然后跟著圖表君一起學習吧。 圖表君聊Docker-開篇 今天是圖表君聊Docker的第一篇,為什么會有這個系列呢?容器技術Docker出現已經有一段時間了,之前零零星星的也看過一些文章...
摘要:圖表君聊倉庫今天我們來繼續聊,上篇文章我們介紹了里的今天來繼續三大概念中的最后一個倉庫。這個倉庫可以是一個私有的倉庫,供一個內部使用。目前官方維護一個公共倉庫里邊有大量的,可以滿足我們的大部分需求。原創文章,歡迎轉發,但請標明出處。 圖表君聊docker-倉庫 今天我們來繼續聊docker,上篇文章我們介紹了docker里的Container.今天來繼續三大概念中的最后一個--倉庫(R...
摘要:當運行這條命令的時候,實際上是從上來請求標記為的,當然由于眾所周知的原因,的速度會很慢。運行下邊這條命令,我們就可以清理下了。歡迎訂閱我的公眾號,第一時間獲取圖表君的新文章。 上篇文章我們介紹了docker的歷史由來帶來的一些好處,從這篇文章開始,我們開始正式的進入Docker的世界,首先給大家介紹一下Docker一些基本概念。 Docker的基本概念 Docker的基本概念并不是很多...
摘要:利用鏡像創建并啟動一個容器分配一個文件系統,并在只讀的鏡像層外層掛接一個寫讀寫層。容器的啟動過程,對于理解容器至關重要,需要深入的理解。同時,對于終止狀態的容器,我們可以采用來啟動。歡迎訂閱我的公眾號,第一時間獲取圖表君的新文章。 上篇文章我們介紹了Docker三大概念中的Image,這篇我們來介紹Container,上篇文章中我們了解到了Image是運行在Container中的,實際...
摘要:它有什么圖表加粗文字如何使用這個圖表庫可以通過存儲庫下載或通過包管理器安裝。數據可以直接從文件加載到圖表中。它有什么圖表如何使用該庫可在包管理器和他們自己的內容傳送網絡中使用。該庫專為風格的數據可視化而設計,提供一系列高度可配置的圖表。 現在有很多圖表庫,但哪一個最好用?這可能取決于許多因素,如業務需求,數據類型,圖表本身的目的等等。在本文中,每個JavaScript圖表庫將與一些關鍵...
閱讀 2109·2023-04-26 00:50
閱讀 2479·2021-10-13 09:39
閱讀 2200·2021-09-22 15:34
閱讀 1605·2021-09-04 16:41
閱讀 1336·2019-08-30 15:55
閱讀 2433·2019-08-30 15:53
閱讀 1707·2019-08-30 15:52
閱讀 748·2019-08-29 16:19