docker_Dockerfile构建镜像

构建docker镜像的文件

  • 编写一个构建文件 Dockerfile,[Dockerfile 文件详解](#Dockerfile 文件详解)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # 父镜像
    FROM ubuntu:16.04

    # 作者信息
    MAINTAINER Wilker <364105996@qq.com>

    # update apt-get 的源,国内的网易镜像速度比较快
    RUN echo "\
    deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse\n\
    deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse\n\
    deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse\n\
    deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse\n\
    deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse\n\
    deb-src http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse\n\
    deb-src http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse\n\
    deb-src http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse\n\
    deb-src http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse\n\
    deb-src http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse\n\
    " > /etc/apt/sources.list

    # APT 自动安装 PHP 相关的依赖包,如需其他依赖包在此添加
    RUN apt-get update && \
    apt-get install -y python \
    python-dev \
    python-pip \
    # 用完包管理器后安排打扫卫生可以显著的减少镜像大小
    && apt-get clean \
    && apt-get autoclean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

    # 配置默认放置 App 的目录
    RUN mkdir -p /app
    WORKDIR /app
    EXPOSE 80
    CMD ["bash"]
  • 构建名为 my-python-base 的镜像: $ docker build -t my-python-base .

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    wilker@ubuntu:~/Desktop/test_docker$ docker build -t my-python-base . # 注意别忘了这个 . 表示Dockerfile 文件在当前文件夹下
    Sending build context to Docker daemon 3.072kB
    Step 1/8 : FROM ubuntu:16.04
    ---> d355ed3537e9
    Step 2/8 : MAINTAINER Wilker <364105996@qq.com>
    ---> Using cache
    ...
    Get:1 http://mirrors.163.com/ubuntu xenial InRelease [247 kB] # 使用的源是 163 的,apt 的速度杠杠的
    Get:2 http://mirrors.163.com/ubuntu xenial-security InRelease [102 kB]
    Get:3 http://mirrors.163.com/ubuntu xenial-updates InRelease [102 kB]
    ...
    Step 8/8 : CMD bash
    ---> Running in d24a7615778b
    ---> 989afb411fcb
    Removing intermediate container d24a7615778b
    Successfully built 989afb411fcb
    Successfully tagged my-python-base:latest # 至此就构建成功了
  • 查看新构建的镜像: $ docker images

    1
    2
    3
    wilker@ubuntu:~/Desktop/test_docker$ docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    my-python-base latest 989afb411fcb 14 seconds ago 386MB
  • run一下这个镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    wilker@ubuntu:~/Desktop/test_docker$ docker run -i -t my-python-base /bin/bash
    root@41aa1e81c242:/app# cd /
    root@41aa1e81c242:/# ls
    app bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
    root@41aa1e81c242:/# python
    Python 2.7.12 (default, Nov 19 2016, 06:48:10)
    [GCC 5.4.0 20160609] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print("hello wlrod")
    hello wlrod
    >>> exit()
    • root@41aa1e81c242 :表示是在 实例 id 为 41aa1e81c242 的 容器 中,以 root 用户运行着,可以使用另一个 终端看下运行中的容器 $ docker ps -a ,80端口连着这个 容器

      1
      2
      3
      wilker@ubuntu:~/Desktop$ docker ps -a
      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      41aa1e81c242 my-python-base "/bin/bash" 4 seconds ago Up 3 seconds 80/tcp distracted_lamarr
  • 退出这个镜像

    1
    2
    3
    root@41aa1e81c242:/# exit
    exit
    wilker@ubuntu:~/Desktop/test_docker$

Dockerfile 文件详解


参考资料