Linux中國

如何創建一個 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

你可以看到共有三個鏡像:dockpUbuntu、和 hello-worldhello-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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國