1. 程式人生 > >Dockerfile建立容器映象

Dockerfile建立容器映象

開發十年,就只剩下這套架構體系了! >>>   

檔名必須為Dockerfile

--Dockerfile是一個文字格式的配置檔案,使用者可以使用Dockerfile快速建立自定義映象

基礎映象、維護者資訊、操作指令、容器CMD

 

注:cmd 和entrypoint 告訴映象啟動時做什麼

 

dockerfile指令

FROM:

FROM {base映象}

  必須放在DOckerfile的第一行,表示從哪個baseimage開始構建 

MAINTAINER:

可選的,用來標識image作者的地方

RUN 

RUN都是啟動一個容器、執行命令、然後提交儲存層檔案變更。

第一層 RUN command1 的執行僅僅是當前程序,一個記憶體上的變化而已,其結果不會造成任何檔案。

而到第二層的時候,啟動的是一個全新的容器,跟第一層的容器更完全沒關係,自然不可能繼承前一層構建過程中的記憶體變化。

而如果需要將兩條命令或者多條命令聯合起來執行需要加上&&。

如:cd /usr/local/src && wget xxxxxxx

CMD:

CMD的作用是作為執行container時候的預設行為(容器預設的啟動命令)

  當執行container的時候聲明瞭command,則不再用image中的CMD預設所定義的命令

一個Dockerfile中只能有一個有效的CMD,當定義多個CMD的時候,只有最後一個才會起作用

EXPOSE

EXPOSE 指令是宣告執行時容器提供服務埠,這只是一個宣告,在執行時並不會因為這個宣告應用就會開啟這個埠的服務。在 Dockerfile 中寫入這樣的宣告有兩個好處,一個是幫助映象使用者理解這個映象服務的守護埠,以方便配置對映;另一個用處則是在執行時使用隨機埠對映時,也就是 

docker run -P 時,會自動隨機對映 EXPOSE 的埠。

entrypoint:

entrypoint的作用是,把整個container變成可執行的檔案,且不能夠通過替換CMD的方法來改變建立container的方式。但是可以通過引數傳遞的方法影響到container內部

每個Dockerfile只能夠包含一個entrypoint,多個entrypoint只有最後一個有效

當定義了entrypoint以後,CMD只能夠作為引數進行傳遞

ADD & COPY:

把host上的檔案或者目錄複製到image中(能夠進行自動解壓壓縮包)  

ENV:

 用來設定環境變數,後續的RUN可以使用它所建立的環境變數 

WORKDIR:

用來指定當前工作目錄(或者稱為當前目錄) 

USER:

 執行RUN指令的使用者 

VOLUME:

 用來建立一個在image之外的mount point

1、最簡單的dockerfile

cd /root/dockerfile/cmd   自定義的目錄  存放dockerfile檔案

vi Dockerfile

2、建立映象

該容器啟動后里面會停掉,因為cmd(echo hello cmd! )命令執行結束

nginx映象製作實戰

編譯/安裝nginx

mkdir一個目錄,在此目錄內下載nginx原始碼包

wget  http://nginx.org/download/nginx-1.13.2.tar.gz

並建立一個Dockerfile檔案,檔案內製作一系列nginx的編譯安裝流程,內容如檔案:

 

 

# base image
FROM centos

# MAINTAINER
MAINTAINER peter

# put nginx-1.13.2.tar.gz
ADD nginx-1.13.2.tar.gz /usr/local/src

# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx

# change dir to /usr/local/src/nginx-1.13.2
WORKDIR /usr/local/src/nginx-1.13.2

# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio  --with-http_ssl_module  --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_module    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degradation_module   --with-http_stub_status_module && make && make install

EXPOSE 80

WORKDIR /usr/local/src/nginx-1.13.2   

相當於下邊這些命令

RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio  --with-http_ssl_module  --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_module    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degradation_module   --with-http_stub_status_module && make && make install

是在cd  /usr/local/src/nginx-1.13.2   (進入/usr/local/src/nginx-1.13.2 目錄)之下敲入執行的

其中,每一個RUN就是增加一個映象層檔案,一層層的RUN命令最終形成一系列映象層

 

進入Dockerfile目錄,執行build指令(注意最後的.代表當前路徑),製作映象

docker build -t cent-ngx2  .

我們檢視一下這個映象的層次歷史

docker images 

docker history

可看到,此映象層基本與dockerfile檔案的RUN是一一對應的

 

使用製作的nginx映象,建立一個容器。

因此映象無前臺命令,因為必須指定啟動命令 :/usr/local/nginx/sbin/nginx -g "daemon off;"

為映象指定環境變數,掛載目錄,預設啟動命令,避免每次啟動都有輸入 /usr/local/nginx/sbin/nginx -g "daemon off;"

在上一版映象的基礎上,我們新加配置

新編寫Dockerfile檔案

ENV 環境

執行:docker build -t cent-ngx3  .

檢視映象的歷史,可看到比ngx2的映象多了幾個層

ngx3的映象建立容器,已經不需要再指定cmd命令了

可執行命令自行校驗:docker run -d --name ng2 cent-ngx3

 

相關推薦

Dockerfile建立容器映象

開發十年,就只剩下這套架構體系了! >>>   

Centos7使用Dockerfile建立apache映象容器

Dockerfile # Version 0.1 # 基礎映象 FROM centos:latest # 維護者資訊 MAINTAINER [email protected] #啟動apache服務 RUN yum -y install httpd RU

centos7.4下Dockerfile建立nginx映象並生成容器這樣做解決所有錯誤!!!

實驗環境:192.168.80.185 (www.ae.com)https://download.openvz.org/template/precreated/           //去公網環境下載基礎映象centos--------建立nginx映象:前提要有centos

使用Dockerfile建立Docker映象

原文地址:https://renguangli.com/articles/docker-dockerfile 以下是Dockerfile常用指令的簡單介紹。 Dockerfile常用指令 FROM FROM指定基礎映象,若映象不存在Docker會從docke

區域網搭建hadoop平臺——基於基礎映象通過Dockerfile建立Hadoop映象

建立一個base.repo檔案 在window機器上建立一個檔案base.repo,檔案包含內容如下: [base] name=RedHat baseurl=http://172.17.0.2/RedHat gpgcheck=1 gpgkey=http://172.17

Docker學習筆記(三)- Dockerfile建立本地映象

Dockerfile建立本地映象 本博文將會介紹在docker中,如何建立本地映象。內容包括,編寫Dockerfile檔案,從編寫的Dockerfile建立映象,映象建立的過程解析,執行所建立的映象。 Dockerfile是用來建立自定義的im

使用Dockerfile建立javaweb映象

一、在centos映象上進行操作1.在宿主機的一個目錄下建立檔案Dockerfile,如:/root/static_web,並在該目錄下放專案的war包。Dockerfile的內容:FROM centos:latestMAINTAINER panjqWORKDIR /home

自定義Dockerfile建立tomcat映象

由於在docker hub上pull下來的官方tomcat映象中,tomcat採用的時間格式為UTC格式,並且webapps目錄存放了預設專案,tomcat也沒有設定相關的JAVA_OPTS引數(JAVA_OPTS一般是要自己根據機器效能進行最優設定)。 因此

Dockerfile建立Docker映象

Dockerfile是一個文字格式的配置檔案,使用者可以使用Dockerfile快速建立自定義的映象。一、Dockerfile基本結構 Dockerfile由一行行命令語句組成,並且支援以#開頭的註釋行。 一般而言,Dockerfile分為 四部分基礎映象資訊維護者資訊映象操

利用Dockerfile建立映象並生成容器

建立Dockerfile(以mysql 5.7為例) 可以從Docker Hub上下載官方Dockerfile,以及docker-entrypoint.sh 具體內容太長,還是在Docker Hu

Docker使用Dockerfile建立支援ssh服務自啟動的容器映象

1. 首先建立一個Dockerfile檔案,檔案內容如下# 選擇一個已有的os映象作為基礎 FROM centos:centos6 # 映象的作者 MAINTAINER Fanbin Kong "[email protected]" # 安裝openssh-

Docker之搭建2048遊戲,四種網路模式的學習,容器和管理,資料卷的管理,用Dockerfile建立映象

1.映象管理 物理機上: 軟體包: docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm [

使用Dockerfile建立映象(七)

Dockerfile Dockerfile是一個文字格式的配置檔案,使用者可以使用Dockerfile快速建立自定義的映象。 基本結構 Dockerfile由一行行命令語句組成,並且支援以#開頭的註釋行。 一般而言,Dockerfile分為四個部分:基礎映象資訊

使用Dockerfile建立映象

Dockerfile是一個文字格式的配置檔案 1  基本結構 dockerfile由一行行命令語句組成,以#開頭的是註釋行 主體內容分四部分:   基礎映象資訊   維護者資訊   映象操作指令   容器啟動時執行指令 2 &n

將springBoot專案打成映象建立容器,啟動容器,訪問專案過程

1.安裝docker就不說了 2.安裝docker 的 nexus倉庫 (1)拉取私有倉庫映象 docker pull registry   (2)啟動私有倉庫容器 docker run -di --name=registry -p 5000:5000 regi

dockerfile建立映象

2018-10-13 Docker 使用Dockerfile建立映象 Dockerfile 是什麼:一個文字格式的配置檔案 能做什麼:快速建立自定義映象 由哪幾部分構成: 基礎映象資訊 維護者資訊 映象操作指令 容器啟動時執行指令 舉例: # escape

[轉載] Dockerfile建立自定義Docker映象以及CMD與ENTRYPOINT指令的比較

1.概述 建立Docker映象的方式有三種 docker commit命令:由容器生成映象; Dockerfile檔案+docker build命令; 從本地檔案系統匯入:OpenVZ的模板。 最近學習了Dockerfile檔案的相關配置,這裡做一下簡單的

【centos】Dockerfile 建立pytorch程式執行環境的映象

目的:基於pytorch框架實現了一個卷積神經網路,現想建立該程式的執行映象。 程式執行所需要的環境: CUDA 8.0  cudnn 7 ffmpeg Anaconda3.4 cv2 Pytorch0.4.1 流程: 0. 我的程式在test資料夾下,因此

[轉]Docker基礎-使用Dockerfile建立映象

本文轉自:https://www.cnblogs.com/jie-fang/p/7927643.html 1、基本結構   Dockerfile由一行行命令語句組成,並支援以#開頭的註釋行。例如: # This dockerfile uses the ubuntu image #

Docker實踐(六):建立本地映象(commit、Dockerfile)

通常我們自己製作映象都是以某一映象為基礎,在此之上安裝或者定製自己需要的映象,推薦使用Dockerfile。 一、commit命令建立本地映象 這邊我們準備在centos為基礎的映象上,安裝jdk,並建立一個txt檔案,然後使用commit命