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的参数