You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.0 KiB

Docker镜像学习

镜像构建流程

构建镜像

构建镜像的三种方法

  • 基于已有容器,使用 docker commit 命令构建

    # 1 创建容器,执行相关操作,之后退出
    docker run -it ubuntu:18.04 /bin/bash
    docker exec -it xxxxxxxx
    
    # 2 基于该容器使用构建新的镜像
    docker commit -m "new_image" -a "cnLinuxer" b66 myubuntu:v1
    
    参数解释:
    -m选项指定了新镜像的提交信息
    -a标注作者信息
    b66是容器ID
    myubuntu:v1是指定的新镜像名称。
    
    # 3 使用新镜像
    docker images
    docker run -it ubuntu:18.04 /bin/bash
    
  • 基于本地模板,使用 docker import 导入

    # 1 将现有容器,导出为模板文件
    docker export b66 > /root/myubuntu.tar
    
    # 2 模板文件导入为镜像
    docker import /root/myubuntu.tar ruyu/ubuntu:18.04
    
    # 3 使用新镜像
    docker images
    docker run xxxx
    
  • 基于Dockerfile文件使用 docker build 构建

    # 1 编写Dockerfile文件
    
    文件内容示例
    
    #指定父镜像
    FROM centos:7.5.1804
    
    #指定维护者信息
    MAINTAINER mynginx
    
    #将本地nginx软件包上传至容器/usr/local/下
    ADD nginx-1.11.1.tar.gz /usr/local
    
    #yum安装依赖软件
    RUN yum -y install vim wget gcc gcc-c++ make openssl-devel pcre-devel 
    
    #进入nginx工作目录
    WORKDIR /usr/local/nginx-1.11.1/
    
    #编译并安装nginx服务
    RUN ./configure --prefix=/usr/local/nginx && make && make install 
    
    #关闭nginx后台运行
    RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf 
    
    #添加nginx的环境变量
    ENV PATH /usr/local/nginx/sbin:$PATH 
    
    #将容器的80端口映射出来
    EXPOSE 80 
    
    #执行nginx命令启动nginx
    CMD ["nginx"]  
    
    # 2 docker build 构建镜像
    docker build -f Dockerfile -t mynginx:v1 .
    

构建过程(docker build -f Dockerfile -t name .)

docker是c/s架构c为docker clis为驻守服务进程。 docker build 构建镜像时cli只负责把命令和相文件传递给服务进程服务程序接收命令和文件、创建构建上下文、执行构建并产出镜像。

build

构建环境

  1. Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下可以为Dockerfile父目录的子目录
  2. Dockerfile中相对路径默认都是Dockerfile所在的目录
  3. 因Docker构建的分层构建联合挂载的特性Dockerfile中,每一条指令被视为一层,尽量一行写多个指令(&&连接 \用来分行)。
  4. 约定:指令大写,内容小写

Dockerfile文件

Dockerfile是用来定制镜像的文本文件内容为构Docker建镜像的一条条指令由Docker build 命令使用构建Docker镜像。

文件组成

# 开头的为注释行

通常包含4部分基础镜像信息、维护者信息、 镜像操作指令和容器启动时执行指令新版“维护者信息”放在LABLE中指定

执行按照Dockerfile指令顺序从上到下依次执行。

# 这是一个示例Dockerfile文件
FROM busybox
MAINTAINER username <demo@163.com>
ENV file=app
ADD ./project/ /usr/local/$file/

命令

  • FROM

FROM 指令必须是非注释的第一个指令, 可以使用 “ AS 别名” 提供别名,在路另外使用( --from

指定了基础镜像,后面的所有指令都是运行在该基础镜像环境上的。

如果不以任何镜像为基础那么写法为FROM scratch

#语法格式
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>

# 特殊例子
#不以任何镜像为基础(内置空白镜像)
FROM scratch 

# busybox是一个软件工具箱镜像集成了linux中几百个常用的linux命令以及工具。
# 大小只有1.2M,适合用来测试
FROM busybox

# .net core例子
# .net core sdk
mcr.microsoft.com/dotnet/sdk:2.1 AS build

run

# /bin/sh -c 参数
-c 参数:把后面的命令(字符串)当成一个整体来执行