github上有docker-library: python
https://github.com/docker-librarymysql
1、FROMlinux
一、從頭開始建立鏡像:git
FROM scratch
二、基於某個鏡像開始建立鏡像:github
FROM ubuntu:14.04
FROM centos
三、備註:最好使用官方的image做爲base image,這樣安全性高sql
2、LABEL(能夠看作是註釋)docker
案例:ubuntu
LABEL version="1.0" LABEL description="This is description"
3、RUN(執行命令並建立新的 Image Layer)vim
一、案例:centos
RUN yum update && yum install -y vim \
python-dev #反斜線換行
二、備註:
每個RUN會建立一層新的container,因此最好使用&&合併多條命令,使用反斜線\進行換行
4、WORKDIR(相似linux的cd)
一、案例:
WORKDIR /test #若是沒有該目錄會自動建立
WORKDIR demo
RUN pwd #輸出結果爲/test/demo
二、備註:
1)使用WORKDIR,不要用RUN cd 2) 儘可能使用絕對目錄
5、ADD and COPY(把本地文件添加到鏡像中)
一、案例:
ADD hello / WORKDIR /root ADD hello test/ #/root/test/hello WORKDIR /root COPY hello test/
二、ADD和COPY的區別:
ADD test.tar.gz / #ADD添加到根目錄而且解壓
三、備註:
1) 大部分狀況下,COPY優於ADD 2) ADD除了COPY功能外還有解壓功能 3) 添加遠程文件/目錄請使用curl或者wget
6、ENV(設置常量)
一、案例:
ENV MYSQL_VERSION 5.6 #設置常量 RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \ && rm -rf /var/lib/apt/list/* # 引用常量
二、備註:儘可能使用ENV增長可維護性
7、CMD && ENTRYPOINT
一、CMD (設置容器啓動後默認執行的命令和參數)
1)容器啓動時默認執行的命令
2)若是docker run指定了其餘命令,CMD命令被忽略
3)若是定義了多個CMD,只有最後一個會執行
二、ENTRYPOINT(設置容器啓動時運行的命令)
1)讓容器以應用程序或服務的形式運行
2)不會被忽略,必定會執行
三、CMD配合ENTRYPOINT
1) 案例:
FROM ubuntu:14.04 RUN apt-get update && apt-get install -y stress ENTRYPOINT ["/usr/bin/stress"] CMD []
2) 說明:這裏的CMD [] 用於接收/usr/bin/stress的參數