Dockerfile详解

1.FROM:引入和开始      

#从头制作baseImage

       FROM scratch

       #使用已有的baseImage

       FROM centos

       #指定使用的版本

       FROM ubuntu:14.04

2.LABEL:定义一些说明信息      

LABEL maintainer

        LABEL version=”1.0”

        LABEL description=”xxx”

3.RUN:执行命令,每执行一条RUN,多一个分层,一般用&&合并语句,反斜杠换行

RUN yum -y update && yum -y install lrzsz \

       net-tools

RUN apt-get -y update && apt-get -y install lrzsz\

       net-tools

RUN /bin/bash -c ‘source $HOME/.bashrc;echo $HOME’

4.WORKDIR:进入或创建目录,尽量不要使用相对路径     

#进入/root目录

    WORKDIR /root

    #如果没有会自动创建

    WORKDIR /test

    WORKDIR demo

    #输出:/test/demo

    RUN pwd

5.ADD和COPY:将本地的文件,添加到image里      

#将hello添加到根目录下

       ADD hello /

       #将tar包直接解压到根目录

       ADD test.tar.gz /



       #最终hello应该在 /root/test/hello

       WORKDIR /root

       COPY hello test/

6.ENV:增加Dockerfile的可读性      

#设置常量

       ENV MYSQL_MAJOR 5.5

       #使用常量

       $MYSQL_MAJOR

       RUN apt-get -y install mysql-server=”${MYSQL_VERSION}”

CMD和ENTRYPOINT

#shell格式

RUN apt-get -y install lrzsz

CMD echo “hello docker”

ENTRYPOINT echo “hello docker”

             

#exec格式

       RUN [“apt-get”,”-y”,”install”,”lrzsz”]

       CMD [“/bin/echo”,”hello docker”]

       ENTRYPOINT [“/bin/echo”,”hello docker”]

 

   ENTRYPOINT使用的比CMD多一些

   ENTRYPOINT:设置容器启动时运行的命令,一定会执行,不会被忽略

 

1.编写Dockerfile

dockerfile解压压缩包重命名文件 dockerfile 解压_IP

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_02

2.构建image

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_03

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_04

3.分别运行两个image看效果

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_05

4.修改Dockerfile如下

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_06

5.重新构建和运行

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_07

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_08

CMD:设置容器启动后默认执行的参数和命令,若docker指定了其他命令,CMD可以被忽略,CMD若指定多个,只运行最后一个

1.编写file

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_09

2.构建和运行

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_10

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_11

 

 CMD和ENTRYPOINT对比

 

1.再构建一个ENTRYPOINT

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_12

2.构建

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_13

3.运行CMD的image

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_14

4.运行ENTRYPOINT的image

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_15

CMD命令可能被覆盖,ENTRYPOINT命令一定会执行

分享docker image

分享的image一定要以自己docker用户名开头,例如:zhangsan/centos

1.登录

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_16

 2.上传自己得image

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_17

3.下载自己的image

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_18

 分享自己得Dockerfile

 

分享image不太安全,一般分享Dockerfile

1.点击

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_19

2.与gitHub关联,链接一个账户

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_20

3.link到github

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_21

4.点击

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_22

搭建私有的docker registry

 

1.docker hub里搜

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_23

2.开启另一台虚拟机,执行安装运行registry

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_24

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_25

3.在之前机器安装telnet,测试连通信

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_26

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_27

4.构建image,IP是仓库机器的IP

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_28

5.直接push会报错

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_29

6.编写json文件,目录和文件名如下,IP是仓库机器的IP

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_30

7.修改文件,添加一行即可

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_31

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_32

8.重启docker

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_33

9.查看docker私有仓库的内容,此时没有东西,路径如下

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_34

10.上传自己的image到docker私有仓库

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_35

11.再次查看私有仓库

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_36

12.删掉本地的image

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_37

13.从私有仓库下东西

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_38

Dockerfile案例

用py写一个web应用

1.编写py文件

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_39

2.安装wget

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_40

3.安装pip,直接复制运行.txt中的命令

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_41

4.安装

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_42

5.用pip安装flask

dockerfile解压压缩包重命名文件 dockerfile 解压_IP_43

6.搭建web服务成功

dockerfile解压压缩包重命名文件 dockerfile 解压_docker_44

7.编写Dockerfile

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_45

8.构建image

dockerfile解压压缩包重命名文件 dockerfile 解压_Dockerfile_46

9.运行