如何創建一個 Docker 鏡像
在 前面的文章 中,我們學習了在 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 文件。在下一篇文章中,我將演示如何推送一個鏡像到 DockerHub。
你可以通過來自 Linux 基金會和 edX 的 「介紹 Linux」 免費課程來學習更多的知識。
via: https://www.linux.com/blog/learn/intro-to-linux/2018/1/how-create-docker-image
作者:SWAPNIL BHARTIYA 譯者:qhwdw 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive