docker docker创建镜像

1.通过Dockerfile创建一个基础镜像
  • 安装c语言的编辑器:
    • 首先创建了一个c语言编写的模块
    • vim hello.c 里面输出内容如下:
#include<stdio.h>
int main()
{
   	printf("hello docker\n");
}
  • 第一条命令:yum install gcc
  • 第二条命令:yum install glibc-static
  • 编译C语言成二进制文件命令:gcc -static hello.c -o hello
    • 该目录下会出现:
总用量 844
-rwxr-xr-x. 1 root root 856856 12月 16 21:43 hello
-rw-r--r--. 1 root root     64 12月 16 21:43 hello.c

[root@localhost hello-c]# ./hello   # 输入./hello 
hello docker
  • 创建一个Dockerfile:
    • vim Dockerfile:
FROM scratch
ADD hello /
CMD ["/hello"]
  • 把这个Dockerfile文件进行镜像:docker build -t lh9 .
    • -t(–tag):镜像的名字及标签,通常 name:tag 或者name格式,可以在一次构建中为一个镜像设置多个标签
    • lh9:是这次镜像仓库的名字(随意起)
    • .:代表执行的是当前文件夹中的Dockerfile文件
2.构建docker镜像的两种方法
  • 把容器(container)commit成镜像(image):docker container commit

    • 简写为:docker commit
  • 2.1、创建镜像方法一:

    • 通过用docker commit 基于容器创建一个镜像:

      • 1.首先 查看容器 docker container ls -a:
      CONTAINER ID  IMAGE  COMMAND   CREATED       STATUS       PORTS     NAMES
      
      fdbd66aa1ed9  lh9   "/hello"   2 minutes ago  Exited (13)         awesome_aryabhata
      caa7fca0483d  lh9   "/hello"   2 minutes ago  Exited (13)         vibrant_mendeleev  
      
      • 2.基于容器创建一个镜像:docker commit NAMES[容器的名字] IMAGENAME[镜像的名字]

        • 执行命令:docker commit awesome_aryabhata test/lh9
        • 创建成功会提示:
        sha256:08984f0d6a0be8823f465d782de3fdcd6ec7494a956d5c7659964cb33e2fad72
        
      • 3.查看当前镜像:docker images

      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      test/hl9            latest              08984f0d6a0b        15 seconds ago      857kB
      lh9                 latest              906e443f5915        16 hours ago        857kB
      hello-world         latest              4ab4c602aa5e        3 months ago        1.84kB
      
      • 4.test/lh9 就是上面基于容器创建出的镜像。(不提倡这种方式)
  • 2.1、创建镜像方法二:

    • 通过使用Dockerfile来创建一个镜像方法:
      • 1.首先创建一个文件夹
      mkdir  docker-vim
      
      • 2.进入docker-vim文件夹中,创建一个Dockerfile文件:
      [root@localhost docker-centos-vim]# more Dockerfile 
      FROM centos:7.2.1511 (后面是7.2.1511 是我拉取centos镜像的版本号)
      RUN yum install -y vim
      
      • 3.执行命令:docker build -t centos-vim[镜像的名字] . [.点代表的是当前目录]
3.Dockerfile 基本语法:
  • 3.1、常用语法:
    • 1.FORM:在哪个Base Image 之上,构建自己的Image
      • FROM scratch :制作base image
      • FROM centos:使用 base image
      • FROM ubuntu:14.04 :使用 base image
      • 经量使用官方的image作为base image 为了安全
    • 2.LABEL:包含一些信息
      • LABEL maintainer = ‘280773872@qq.com’ : 作者信息
      • LABEL version = ‘1.0’: 版本信息
      • LABEL description = ‘This is description’:描述信息
    • 3.RUN:运行命令
      Run yum update && yum install -y vim \
      	python-dev   # 反斜线换行 && 合并命令
      
      Run apt-get update && apt-get install -y perl \
      	pwgen --no-install-recommends && rm -rf \
      	/var/lib/apt/lists/*  # 注意清理cache
      
      Run /bin/bash -c 'source $HOME/.bashrc;echo
      $HOME'
      
      • 为了美观,复杂的RUN 请用反斜杠换行,避免无用分层,合并多条命令成一行
    • 4.WORKDIR:进入目录(相当于Linux系统中的cd 命令)
      WORKDIR /test  # 如果没有就会自动创建test目录
      WORKDIR demo
      RUN pwd  # 输出结果是 /test/demo
      
      • 用WORKDIR,不要用RUN cd ,尽量使用绝对目录
    • 5.ADD 和 COPY:把本地文件添加到根目录里面:
      ADD hello /  # 把本地hello 文件添加到/目录中
      ADD	test.tar.gz/  # ADD 根COPY区别,ADD 还可以解压缩,把test.tar.gz 压缩文件解压缩到/目录中
      
      WORKDIR /root
      ADD hello test/   # /root/test/hello
      
      WORKDIR /root
      COPY hello test/
      
      • COPY优于ADD,ADD除了COPY还有额外功能(解压):适用于添加本地的文件
      • 添加远程文件/目录请使用curl或者wget
    • 6.ENV:设置常量
      ENV MYSQL_VERSION 5.6 # 设置常量
      RUN age-get install -y mysql-server  = '${MYSQL_VERSION}'\
      	&& rm -rf /var/lib/apt/lists/*  # 引用常量
      
      • 尽量使用ENV增加可维护性
    • 7.EXPOSE:设置端口
    • 8.CMD:设置容器启动后默认执行的命令和参数
      • 1:容器启动时默认执行的命令
      • 2:如果docker run 指令了其他命令,CMD命令会被忽略
      • 3:如果定义了多个CMD,只有最后一行会执行
      FROM centos:7.2.1511
      ENV name Docker
      CMD echo "hello $name"
      CMD echo "hello lh9"  # 只会输出这条信息
      
    • 9.ENTRYPOINT:设置容器启动时运行的命令
      • 1:让容器以应用程序或者服务的形式运行
      • 2:不会被忽略,一定会执行
  • 3.2、Shell 格式 和 Exec格式:
    • Shell格式:要运行的命令当作shell格式来执行
    RUN apt-get install -y vim
    CMD echo 'hello docker'
    ENTRYPOINT echo 'hello docker'
    
    • 创建一个Dockerfile 文件:
      FROM centos:7.2.1511
      ENV name Docker
      ENTRYPOINT echo "hello $name"
      
      • 创建镜像:docker build -t docker-shell[镜像的名字] .
      • 创建容器:docker run docker-shell[镜像的名字]
      • 输出结果:hello docker
      • 总结:在使用shell格式写Dockerfile文件的时候,ENV变量 name 可以使用
  • Exec 格式:特定的格式指明要运行的命令,和命令所跟的参数
    RUN ['apt-get', 'install', '-y', 'vim']
    CMD ['/bin/echo', 'hello docker']
    ENTRYPOINT ['/bin/echo', 'hello docker']
    
    • 创建一个Dockerfile文件:
      FROM centos:7.2.1511
      ENV name Docker
      ENTRYPOINT ["/bin/bash", "-c", "echo hello $name"]
      
      • 创建镜像:docker build -t docker-exec .
      • 创建容器:docker run docker-exec
      • 输出结果:hello Docker
      • 总结:在使用exec格式的时候,需要在/bin/bash,增加参数"-c" 使用要打印的变量名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值