1、FROM scratch 表示 从头 build 一个image
2、FROM centos:7 表示通过centos7 build一个image(通过官方的base image 构建一个新的image)
LABEL:定义dockerfile 中的 metadata。
LABEL maintainer =“谁谁 作者”
LABEL version=“1.0”
LABEL description=“this is demo image”
RUN yum update && yum instal -y vim
python-dev
&& 将多个命令合并成一行, 反斜杠\表示回行。
WORKDIR :设定当前工作目录
WORKDIR /root
WORKDIR /test # 如果没有此test 目录则自动创建
WORKDIR myDIR
RUN PWD 输出结果为:/test/myDIR
(注意:请尽量使用绝对路径)
ADD 和 COPY
主要用于:将本地文件添加或者copy到docker image 目录中。
add 可以添加文件到指定目录,或者解压缩。
ADD hello / 表示:将hello 这个文件 添加到 docekr image 目录中
ADD demo.tar.gz 表示:添加到image 根目录 并且解压
WORKDIR /root
ADD hello demo/ 表示/root/demo/hello
WORKDIR /root
COPY hello test/
add 和copy 是将本地文件添加到 docker image 中
如果是远程文件或者目录 那么需要使用 run curl 或者 run wget
ENV :表示环境变量 (environment)
例子:
ENV MYSQL_Version 5.8
run yum install -y mysql-server=“${MYSQL_Version}”
&& rm -rf /var/lib/apt/lists/*
尽量使用 环境变量 ,在docker file
VOLUME 和 EXPOSE
存储 和网络
CMD and ENTRYPOINT and run
RUN:执行名利并创建新的image layer
CMD:设置容器启动后默认执行的命令和参数
ENTRYPOINT:设置容器启动时运行的命
docker github image
https://github.com/docker-library
dockerfile 官方说明文档:
https://docs.docker.com/engine/reference/builder/
Shell 和 exce 方式
shell format
RUN yum install -y vim
CMD echo "hello docker"
Entrypoint echo "hello docker"
exec 格式
run [“yum” ,“install” ,“-y”,“vim”]
cmd [“/bin/echo”,“hello docker”]
entrypoint [“/bin/echo”,“hello docker”]
dockerfile1
FROM centos
ENV name docker
1、创建Dockerfile (注意 D大写)
FROM centos
ENV name mydocker
ENTRYPOINT echo “hello $name”
2.运行 docker build
docker build -t 某某/sdfadsf .
3. 执行 docker run
docker run 某某/sdfadsf
将会输出:hello mydocker
指定dockerfile 路径文件
docker build -t myapp:dev -f Dockerfile-prod myapp/
myapp :表示:REPOSITORY
dev :表示tag
FROM centos
ENV name mydockerfiledev
ENTRYPOINT [“/bin/bash”,“-c”,“echo hello $name”]
[“/bin/bash” 表示要执行的bash路径
“-c” 指定参数
,“echo”,"hello
n
a
m
e
"
]
:具体参数输出:
[
v
a
g
r
a
n
t
@
10
d
o
c
k
e
r
d
e
m
o
]
name"] :具体参数 输出:[vagrant@10 dockerdemo]
name"]:具体参数输出:[vagrant@10dockerdemo] docker run myapp:dev
hello mydockerfiledev
CMD
1.容器启时默认执行的命令
2.如果docker run 指定了其他命令,CMD 命令被忽略
3.如果定义了多个cmd,只有最后一个会执行。
example:
FROM centos
ENV name DockermyCmd
CMD echo “hello $name”
CMD echo “hello $name second cmd”
命令:docker run -it myapp:dev /bin/bash
会不输入任何内容,因为:指定执行了。/bin/bash
ENTRYPOINT
1.容器以应用程序或者服务的形式运行
2.不会忽略,一定会执行
3.最好的方式:写一个shell脚本作为ENTRYPOINT
copy docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT [“docker-entrypoint.sh”]
EXPOSE 23ss
CMD [“mogodb”]
删除所有运行过的container
docker rm $(docker ps -qa)
安装 python pip 尝试多种方式不成功
此方法成功 python2.7.5
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python get-pip.py
Dockerfile
FROM python:2.7
LABEL maintainer=“wentr@1341.com”
RUN pip install flask
COPY app.py /app/
WORKDIR /app
EXPOSE 5000
CMD [“python”,“app.py”]
运行:docker run -d bd1db720e132 ;-d 表示后台服务运行
进入container 中:docker exec -it badc9c8b5aeb /bin/bash
正在运行的container 的ip :docker exec -it badc9c8b5aeb ip a
停止运行的container :docker container stop
日志:docker log id
查看运行进程:ps -ef | grep python