作者 | Swapnil Bhartiya
譯者 | qhwdw ? ? ? ? ? 共計翻譯:104 篇 貢獻時間:164 天
在 前面的文章[1] 中,我們學習了在 Linux、macOS、以及 Windows 上如何使用 Docker 的基礎知識。在這篇文章中,我們將學習建立 Docker 映象的基本知識。我們可以在 DockerHub 上得到可用於你自己的專案的預構建映象,並且也可以將你自己的映象釋出到這裡。
我們使用預構建映象得到一個基本的 Linux 子系統,因為,從頭開始構建需要大量的工作。你可以使用 Alpine( Docker 版使用的官方版本)、Ubuntu、BusyBox、或者 scratch。在我們的示例中,我將使用 Ubuntu。
在我們開始構建映象之前,讓我們先“容器化”它們!我的意思是,為你的所有 Docker 映象建立目錄,這樣你就可以維護不同的專案和階段,並保持它們彼此隔離。
$ mkdir dockerprojects
cd dockerprojects
現在,在 dockerprojects
目錄中,你可以使用自己喜歡的文字編輯器去建立一個 Dockerfile
檔案;我喜歡使用 nano,它對新手來說很容易上手。
$ nano Dockerfile
然後新增這樣的一行內容:
FROM Ubuntu
使用 Ctrl+Exit
然後選擇 Y
去儲存它。
現在開始建立你的新映象,然後給它起一個名字(在剛才的目錄中執行如下的命令):
$ docker build -t dockp .
(註意命令後面的圓點)這樣就建立成功了,因此,你將看到如下內容:
Sending build context to Docker daemon 2.048kB
Step 1/1 : FROM ubuntu
---> 2a4cca5ac898
Successfully built 2a4cca5ac898
Successfully tagged dockp:latest
現在去執行和測試一下你的映象:
$ docker run -it Ubuntu
你將看到 root 提示符:
root@c06fcd6af0e8:/#
這意味著在 Linux、Windows、或者 macOS 中你可以執行一個最小的 Ubuntu 了。你可以執行所有的 Ubuntu 原生命令或者 CLI 實用程式。
我們來檢視一下在你的目錄下你擁有的所有 Docker 映象:
$docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockp latest 2a4cca5ac898 1 hour ago 111MB
ubuntu latest 2a4cca5ac898 1 hour ago 111MB
hello-world latest f2a91732366c 8 weeks ago 1.85kB
你可以看到共有三個映象:dockp
、Ubuntu
、和 hello-world
, hello-world
是我在幾周前建立的,這一系列的前面的文章就是在它下麵工作的。構建一個完整的 LAMP 棧可能是一個挑戰,因此,我們使用 Dockerfile 去建立一個簡單的 Apache 伺服器映象。
從本質上說,Dockerfile 是安裝所有需要的包、配置、以及複製檔案的一套指令。在這個案例中,它是安裝配置 Apache 和 Nginx。
你也可以在 DockerHub 上去建立一個帳戶,然後在構建映象之前登入到你的帳戶,在這個案例中,你需要從 DockerHub 上拉取一些東西。從命令列中登入 DockerHub,執行如下所求的命令:
$ docker login
在登入時輸入你的使用者名稱和密碼。
接下來,為這個 Docker 專案,在目錄中建立一個 Apache 目錄:
$ mkdir apache
在 Apache 目錄中建立 Dockerfile 檔案:
$ nano Dockerfile
然後,貼上下列內容:
FROM ubuntu
MAINTAINER Kimbro Staken version: 0.1
RUN apt-get update && apt-get install -y apache2 && apt-get clean && rm -rf /var/lib/apt/lists/*
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
然後,構建映象:
docker build -t apache .
(註意命令尾部的空格和圓點)
這將花費一些時間,然後你將看到如下的構建成功的訊息:
Successfully built e7083fd898c7
Successfully tagged ng:latest
Swapnil:apache swapnil$
現在,我們來執行一下這個伺服器:
$ docker run -d apache
a189a4db0f7c245dd6c934ef7164f3ddde09e1f3018b5b90350df8be85c8dc98
發現了嗎,你的容器映象已經運行了。可以執行如下的命令來檢查所有執行的容器:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
a189a4db0f7 apache "/usr/sbin/apache2ctl" 10 seconds ago
你可以使用 docker kill
命令來殺死容器:
$docker kill a189a4db0f7
正如你所見,這個 “映象” 它已經永久存在於你的目錄中了,而不論執行與否。現在你可以根據你的需要建立很多的映象,並且可以從這些映象中繁衍出來更多的映象。
這就是如何去建立映象和執行容器。
想學習更多內容,你可以開啟你的瀏覽器,然後找到更多的關於如何構建像 LAMP 棧這樣的完整的 Docker 映象的檔案。這裡有一個幫你實現它的 Dockerfile[2] 檔案。在下一篇文章中,我將演示如何推送一個映象到 DockerHub。
你可以透過來自 Linux 基金會和 edX 的 “介紹 Linux”[3] 免費課程來學習更多的知識。
via: https://www.linux.com/blog/learn/intro-to-linux/2018/1/how-create-docker-image
作者:SWAPNIL BHARTIYA[5] 譯者:qhwdw 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出