一起學習docker04-docker鏡像

2020-10-22 北漂的一隻it狗

一起學習docker系列:

一、關於鏡像

鏡像是 Docker 的三大組件之一。

Docker 運行容器前需要本地存在對應的鏡像,如果鏡像不存在本地,Docker 會從鏡像倉庫下載(默認是Docker Hub 公共註冊伺服器中的倉庫)。一般公司內部會搭建私有倉庫,公司自己的鏡像會放到私有倉庫裡。

二、下載鏡像,了解基本信息

1、先找一個鏡像下載下來(選擇一個較小的,下載快)

docker search java

下載,並運行確認版本

docker run -it java java -version

也可以通過docker pull下載docker pull docker.io/hello-world 然後執行其他命令

查看系統

docker run -it java uname

查看鏡像ip

docker run java ip addr

查看環境變量

docker run java env

以上了解鏡像裡面是什麼。

以上了解了鏡像內容後我們可以下載運行一個鏡像,了解平時需要查看鏡像的那些信息。

下載鏡像

docker pull docker.io/hello-world

注意:倉庫地址,docker.io,沒有指明tag,默認就是latest.運行這個鏡像

查看鏡像

docker images 查看是否下載

運行鏡像

docker run docker.io/hello-world

查看鏡像信息(這裡信息較多)

docker inspect docker.io/hello-world

刪除鏡像

docker rmi docker.io/hello-world -f

刪除所有未打標籤的鏡像 docker rmi $(docker images -q -f dangling=true) 刪除所有鏡像 docker rmi $(docker images -q)

三、手工製作鏡像

一般情況下,公司內部使用的鏡像都是經過內部情況進行優化處理的,所有需要進行修改,然後傳到私有倉庫。

我們這裡先通過剛剛下載的java鏡像來做我們自己需要的鏡像

docker create --name wolfjava -it java /bin/bash

# docker create --name wolfjava -it java /bin/bash

271e96acb33a0afdc4b4101e00aa1cb343bb959b844db2817584cd499016d523

啟動

#docker start wolfjava

#docker ps

進去查看一下

# docker exec -it 271e96acb33a /bin/bash

root@271e96acb33a:/#

我們這裡創建一個wolf目錄

打開另一個窗口,執行commit操作。

# docker commit 271e96acb33a wolfjava-01

sha256:31bb307101b0ee3e52a239ec1ca80df3b9e147d69e9a3b4bb43e5c1256e9674a

通過docker images查看是否成功,通過下圖發現已經成功。

我們在通過我們製作的鏡像來啟動,看看裡面是否有我們創建的wolf目錄

docker run -it wolfjava-01 ls 這裡發現有wolf目錄存在,說明我們成功了。

我們昨天搭建了harbor,這裡提交一下

docker tag 31bb307101b0 10.101.200.159/wolf/wolfjava-01

上傳到倉庫

docker push 10.101.200.159/wolf/wolfjava-01

看到這裡說明,沒問題,我們登錄網頁查看一下

這裡發現很快就創建了一個新的容器這種做法的優點:最方便、最快速,學習製作鏡像更易理解這種做法的缺點:不規範、無法自動化(完全手工)、不科學

四、dockerfile製作鏡像

Dockerfile的官方手冊如下

https://docs.docker.com/engine/reference/builder/

在Dockerfile中用到的命令有FROM

FROM指定一個基礎鏡像, 一般情況下一個可用的 Dockerfile一定是 FROM 為第一個指令。至於image則可以是任何合理存在的image鏡像。 FROM 一定是首個非注釋指令 Dockerfile. FROM 可以在一個 Dockerfile 中出現多次,以便於創建混合的images。 如果沒有指定 tag ,latest 將會被指定為要使用的基礎鏡像版本。

MAINTAINER 這裡是用於指定鏡像製作者的信息RUN

RUN命令將在當前image中執行任意合法命令並提交執行結果。命令執行提交後,就會自動執行Dockerfile中的下一個指令。

層級 RUN 指令和生成提交是符合Docker核心理念的做法。它允許像版本控制那樣,在任意一個點,對image 鏡像進行定製化構建。

RUN 指令緩存不會在下個命令執行時自動失效。比如 RUN apt-get dist-upgrade -y 的緩存就可能被用於下一個指令. --no-cache 標誌可以被用於強制取消緩存使用。

ENV ENV指令可以用於為docker容器設置環境變量

ENV設置的環境變量,可以使用 docker inspect命令來查看。同時還可以使用docker run --env <key>=<value>來修改環境變量。

USER USER 用來切換運行屬主身份的。

Docker 默認是使用 root,但若不需要,建議切換使用者身份,畢竟 root 權限太大了,使用上有安全的風險。

WORKDIR WORKDIR 用來切換工作目錄的。Docker 默認的工作目錄是/,只有 RUN 能執行 cd 命令切換目錄,而且還只作用在當下下的 RUN,也就是說每一個 RUN 都是獨立進行的。如果想讓其他指令在指定的目錄下執行,就得靠 WORKDIR。WORKDIR 動作的目錄改變是持久的,不用每個指令前都使用一次 WORKDIR。

COPY COPY 將文件從路徑 <src> 複製添加到容器內部路徑 <dest>。 <src> 必須是相對於源文件夾的一個文件或目錄,也可以是一個遠程的url,<dest> 是目標容器中的絕對路徑。 所有的新文件和文件夾都會創建UID 和 GID 。事實上如果 <src> 是一個遠程文件URL,那麼目標文件的權限將會是600。

ADD ADD 將文件從路徑 <src> 複製添加到容器內部路徑 <dest>。 <src> 必須是想對於源文件夾的一個文件或目錄,也可以是一個遠程的url。<dest> 是目標容器中的絕對路徑。 所有的新文件和文件夾都會創建UID 和 GID。事實上如果 <src> 是一個遠程文件URL,那麼目標文件的權限將會是600。

VOLUME 創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放資料庫和需要保持的數據等。

EXPOSE EXPOSE 指令指定在docker允許時指定的埠進行轉發。

CMD Dockerfile.中只能有一個CMD指令。 如果你指定了多個,那麼最後個CMD指令是生效的。 CMD指令的主要作用是提供默認的執行容器。這些默認值可以包括可執行文件,也可以省略可執行文件。 當你使用shell或exec格式時, CMD 會自動執行這個命令。ONBUILD ONBUILD 的作用就是讓指令延遲執行,延遲到下一個使用 FROM 的 Dockerfile 在建立 image 時執行,只限延遲一次。 ONBUILD 的使用情景是在建立鏡像時取得最新的源碼 (搭配 RUN) 與限定系統框架。

ARG ARG是Docker1.9 版本才新加入的指令。 ARG 定義的變量只在建立 image 時有效,建立完成後變量就失效消失LABEL 定義一個 image 標籤 Owner,並賦值,其值為變量 Name 的值。(LABEL Owner=$Name )ENTRYPOINT 是指定 Docker image 運行成 instance (也就是 Docker container) 時,要執行的命令或者文件。

我們來製作一個java鏡像

#vi Dockerfile

FROM 10.101.200.159/wolf/wolfjava-01

MAINTAINER nimmis <1098331428@qq.com>

# disable interactive functions

ENV DEBIAN_FRONTEND noninteractive

# set default java environment variable

ADD hello.sh /bin/hello.sh

RUN /bin/hello.sh

開始執行製作

docker build -t 10.101.200.159/wolf/wolfjava-02 .

製作成功,我們看一下docker iamges

上傳到倉庫

docker push 10.101.200.159/wolf/wolfjava-02

Dockerfile的命令,要多用,就熟悉了,後面我們會逐步使用,這裡先熟悉一下製作過程。

五、導入備份生成鏡像

我們這裡隨意導出一個(這裡是到處一個容器快照)

docker export f393a847db63 >myimage.tar

我們導入,導入容器快照,生成鏡像

docker import myimage.tar import-test/myimage:v1.0

使用此外也可以使用url來 docker import

*註:用戶既可以使用 docker load 來導入鏡像存儲文件到本地鏡像庫,也可以使用 docker import 來導入一個容器快照到本地鏡像庫。這兩者的區別在於容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時可以重新指定標籤等元數據信息

相關焦點

  • Docker系列教程04-Docker構建鏡像的三種方式
    簡介創建鏡像的方法主要有三種:基於已有鏡像的容器創建、基於本地模板導入、基於Dockerfile創建。今天就逐一講述為大家講述,如何構建屬於自己的docker鏡像。1、基於容器構建鏡像基於已有容器構建鏡像主要是通過docker commit命令來構建新的鏡像,語法規則如下:下面將演示下如何基於已有容器構建鏡像1、首先,創建一個容器,並在其容器內創建一個test文件,之後退出。
  • Docker系列教程01-使用Docker鏡像
    前言學習Docker,我們需要掌握它的三大核心概念:鏡像、容器和倉庫。今天先帶大家學習Docker鏡像相關的基礎知識。例如,查看Ubuntu:18.04鏡像的創建過程,命令如下:注意:由於CREATED BY部分命令過長,被自動截斷了,可使用--no-trunc選項輸出完整命令。
  • Docker實戰005:docker鏡像使用詳解
    如果還想更精確地查看docker鏡像可以添加filter進行過濾,過濾屬性有dangling、before、since、lable、reference。如果需要查看docker鏡像的詳細信息可以使用命令:docker inspect ubuntu:12.04 實現,查看鏡像歷史可以通過命令:docker history ubuntu:12.04實現。
  • 使用Docker鏡像
    舉個例子,獲取一個Ubuntu18.04系統的基礎鏡像可以使用如下命令:[envythink@localhost ~]$ docker pull ubuntu:18.04運行結果如下所示:
  • 一起學習docker-08-小結
    一起學習docker系列: 1、docker分為企業版和社區版Docker-CE:由社區維護和提供技術支持,為免費版本,2、最好找一個國內好一點的鏡像地址(國外容易被牆,還一個就是比較慢)阿里:http://mirrors.aliyun.com/清華:http://mirrors.tuna.tsinghua.edu.cn163:http://hub-mirror.c.163.com還有其他比如下載倉庫源wget http://mirrors.aliyun.com
  • 一起學習docker05-docker容器
    二、容器的基本操作要想啟動容器,就要先獲取鏡像1、搜索鏡像docker search hello2、下載鏡像docker pull docker.io/hello-world當利用docker run來創建容器時,Docker 在後臺運行的標準操作包括:a.檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載b.利用鏡像創建並啟動一個容器c.分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層d.從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去e.從地址池配置一個 ip 地址給容器
  • Docker 鏡像構建之 docker commit
    我們可以通過公共倉庫拉取鏡像使用,但是,有些時候公共倉庫拉取的鏡像並不符合我們的需求。儘管已經從繁瑣的部署工作中解放出來,但是實際開發時,我們可能希望鏡像包含整個項目的完整環境,在其他機器上拉取打包完整的鏡像,直接運行即可。
  • Docker image鏡像常用命令
    一般情況下,無需指定此參數,指定--rm可以避免浪費空間ubuntu:16.04:以此鏡像為基礎啟動容器/bin/bash:指定的交互式Shell此命令還可以進行如下簡寫:docker run -it --rm ubuntu:16.04 bash1查看更多docker run的用法,我們可以使用docker run
  • docker系列學習之如何有效的管理docker鏡像
    構建nginx鏡像FROM nginxRUN echo &39; > /usr/share/nginx/html/index.html使用docker build -t nginx:test.構建鏡像即可,
  • 雲計算核心技術Docker教程: Docker鏡像使用
    當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。我們可以使用 docker images 來列出本地主機上的鏡像。
  • 雲計算核心技術Docker教程:Docker鏡像使用
    來源:TechWeb.com.cn當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。我們可以使用 docker images 來列出本地主機上的鏡像。
  • 使用 Docker 鏡像 | Docker 系列
    使用 docker tag 命令來給本地鏡像添加新的標籤。使用 docker inspect 命令來獲取鏡像的詳細信息。使用 docker history 命令列出鏡像各層的創建信息。搜索鏡像使用 docker search 命令來搜索鏡像。
  • Docker 安裝及配置鏡像加速
    我們學習 Docker 使用 CE 社區版即可。Docker 鏡像、容器、數據卷和網絡數據都保存在 /var/lib/docker/。>    Docker 從 Docker Hub 拉取鏡像,因為是從國外獲取,所以速度較慢,會出現以下情況: [root@localhost ~]39;hello-world:latest&39;docker run --help
  • 使用Docker 鏡像|Docker 系列
    使用 docker tag 命令來給本地鏡像添加新的標籤。使用 docker inspect 命令來獲取鏡像的詳細信息。使用 docker history 命令列出鏡像各層的創建信息。搜索鏡像使用 docker search 命令來搜索鏡像。
  • Docker新手入門之四:Docker鏡像和倉庫的基本使用
    例如:sudo docker run -it ubuntu:16.04 /bin/bash默認情況下,在run中如果沒有指定鏡像的tag,將會默認去尋找latest標籤的鏡像。除了倉庫名稱和tag以外,我們還可以將鏡像分為兩個類別:一種是Docker用戶自己創建的用戶倉庫,還有一種是Docker官方維護的頂層倉庫。
  • 雲計算核心技術Docker教程:Docker使用鏡像加速
    來源:TechWeb.com.cn使用docker在國內從 DockerHub 拉取鏡像有時會遇到困難,此時可以配置鏡像加速器。1,使用Docker 官方加速器 https://registry.docker-cn.com 直接從該鏡像加速地址進行拉取。
  • 雲計算核心技術Docker教程: Docker使用鏡像加速
    使用docker在國內從 DockerHub 拉取鏡像有時會遇到困難,此時可以配置鏡像加速器。1,使用Docker 官方加速器 https://registry.docker-cn.com 直接從該鏡像加速地址進行拉取。
  • Docker 鏡像構建之 Dockerfile
     FROM centos:7  如果不以任何鏡像為基礎,那麼寫法為:FROM scratch。官方說明:scratch 鏡像是一個空鏡像,可以用於構建 busybox 等超小鏡像,可以說是真正的從零開始構建屬於自己的鏡像。
  • docker 鏡像的使用
    從前面的文章可知,當我們運行一個web項目時需要在一個容器上運行,而當我們運行一個容器時需要一個鏡像,如果我們本地沒有鏡像,那麼docker就會自動從鏡像倉庫中下載,默認是從docker hub公共鏡像資源庫下載。
  • 玩轉Docker鏡像
    同時,Docker在開發者社區也是一石激起千層浪,許多如我之碼農紛紛開始關注、學習和使用Docker,許多企業,尤其是網際網路企業,也在不斷加大對Docker的投入,大有掀起一場容器革命之勢。Docker鏡像命名解析鏡像是Docker最核心的技術之一,也是應用發布的標準格式。