【Docker實戰之入門】Dockerfile詳細分析:構建docker鏡像(1)基礎鏡像centos7

Dockerfile

Docker是軟件工業上的集裝箱技術。前端

經過如下文件製做Docker鏡像python

[root@Optimus docker-training]# cd centos7/
[root@Optimus centos7]# ls
aliyun-epel.repo  aliyun-mirror.repo  Dockerfile  supervisord.conf

Dockerfile 自動構建docker鏡像的配置文件,相似於Linux下shell命令。c++

[root@Optimus centos7]# vim Dockerfile 

#
# MAINTAINER        Carson,C.J.Zeong <zcy@nicescale.com>
# DOCKER-VERSION    1.6.2
#
# Dockerizing CentOS7: Dockerfile for building CentOS images
#
FROM       centos:centos7.1.1503
MAINTAINER Carson,C.J.Zeong <zcy@nicescale.com>

ENV TZ "Asia/Shanghai"
ENV TERM xterm

ADD aliyun-mirror.repo /etc/yum.repos.d/CentOS-Base.repo
ADD aliyun-epel.repo /etc/yum.repos.d/epel.repo

RUN yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man && \
   yum install -y gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel && \
   yum install -y --enablerepo=epel pwgen python-pip && \
   yum clean all

RUN pip install supervisor
ADD supervisord.conf /etc/supervisord.conf

RUN mkdir -p /etc/supervisor.conf.d && \
   mkdir -p /var/log/supervisor

EXPOSE 22

ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]

[FROM]指令指定基礎鏡像(副鏡像)centos:centos7.1.1503.git

[MAINTAINER]說明docker鏡像的維護者。docker

[ENV](environment環境)這裏設置了時區的環境變量TZ "Asia/Shanghai",環境變量能夠多個。shell

[ADD] 在Dockerfile中有兩條指令能夠進行copy文件,一個是ADD,一個是COPY。均可以複製本地文件到container中。
ADD比COPY多兩個功能:vim

1. 能夠ADD一個在WebServer上的文件,在ADD後面aliyun-mirror.repo處直接寫上連接地址,便可把文件copy到container(/etc/yum.repos.d/CentOS-Base.repo)裏面。
2. 解壓:有一個壓縮包,不用進入到container中運行tar命令手動解壓,用ADD命令能夠自動解壓。

[RUN] 指令後面能夠寫任何一條命令,RUN會將該命令放到Linux Shell下去執行。在這裏,RUN指令用來安裝一些基礎的工具和軟件。
在Dockerfile build docker鏡像的時候,每執行一條指令,都會生成docker鏡像的一層(分層layer技術),最後生成的鏡像由不少個layer組合而成。segmentfault

[RUN pip install supervisor] 在製做docker鏡像的時候,會考慮到製做完成後能運行一個什麼樣的容器,如運行一個PHP服務或者Linux服務。那麼,此時須要一個進程管理工具supervisor來管理進程。運行單個進程能夠不用supervisor。後端

[ADD supervisord.conf /etc/supervisord.conf] 添加supervisor的配置文件到/etc目錄下。centos

[RUN mkdir -p /etc/supervisor.conf.d]建立supervisor.conf.d目錄,在這裏存放啓動其餘服務的配置文件。/var/log/supervisor是存放supervisor的日誌目錄。

[EXPOSE 22] 好比container想暴露22端口給宿主機,宿主機會拿一個端口與container的22端口去映射,如2222端口號,那麼可使用服務器的IP地址,鏈接的時候端口號是2222,就能夠鏈接到container(docker容器)裏面。

[ENTRYPOINT] 在dockerfile中只有最後一條ENTRYPOINT會生效。container每次啓動的時候,都會執行該命令。/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf開啓supervisor服務,加載主要的配置文件。

構建docker鏡像

使用dockerfile生成docker鏡像

docker build

給要構建的docker鏡像起一個名字

docker build -t

docker鏡像完整的命名規則

docker build -t registry_url/namespace/csphere/centos:7.1

版本號

centos:版本號

若不寫版本號,則會自動加上latest標籤默認爲 centos:latest

指定dockerfile

docker build -t csphere/centos:7.1 .  

若dockerfile在當前目錄下,則使用 .來指定;不然使用相對路徑/path.

查看鏡像

docker images   

能夠查看本地有哪些鏡像,鏡像的名字REPOSTORY、TAG、IMAGE ID、建立時間CREATED、鏡像大小VIRTUA.

生成docker容器

生成docker容器

docker run

經過以上建立好的docker鏡像,執行run指令可生成docker容器。(此時退出/centos7目錄,回到根目錄下)

查看run參數

docker help run

查看run有哪些參數

交互式模

docker run -it

啓動docker容器container時 是交互式模式,把container啓動到前臺。

後端啓動

docker run -d 

把container在後端啓動,啓動後,返回一個container的ID號。

端口映射-P

docker run -d -P 2222:222  

在dockerfile中有一個指令EXPOSE 22,暴露出22號端口。在前端,宿主機會分配一個沒有使用的端口號,如2222,來進行端口映射。那麼,能夠用2222端口鏈接container。若是有服務器須要維護重啓時,container也會重啓,此時2222端口會發生變化,仍然會隨機拿一個沒有使用的端口號來和22號端口作端口映射。

端口映射-p

docker run -d -p 2222:22   

無論是宿主機重啓仍是container重啓,2222端口一直給這個container。除非該container刪掉後,2222端口號會被分配給其餘container使用。

容器名

docker run -d -p 2222:22 --name base 

在經過docker鏡像生成docker容器時,--name用於給容器起名字,這裏起名爲base,方便之後查找。

指定docker鏡像

docker run -d -p 2222:22 --name base csphere/centos:7.1 

指明docker鏡像,這裏使用csphere/centos:7.1  docker鏡像生成叫作`base`的docker容器。返回container的長ID號,如2d36dbfc72a045725b845771bdeb8ff0acc0845eb7d39d09e5f8025237b0d9c9。

查看container

docker ps -a  

不加參數時,默認只會顯示處於running下的container。-a可查看退出狀態下/非up情況下的container等當前本地全部的container。
相關文章
相關標籤/搜索