4. Docker 构建镜像

Docker 构建镜像

docker制作镜像通常是通过两种方式来实现的,  第一种是通过容器的 commit , 第二种是通过 Buildfile来实现的.

 

 

docker commit 打包镜像

容器在运行过程中我们难免会做一些修改, 比如运行的mysql 镜像我们可能创建了数据库, 建了用户等等, 但是如果吧容器 stop 之后在  rm 掉, 这个时候在拉取镜像 run 我们的容器就不是刚刚运行的那个容器了, 原来容器的一切修改都丢失了,  这个时候把当前运行中的容器打包成镜像, 之后使用这个镜像运行的容器都会和打包时的容器一模一样.

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a :提交的镜像作者;

     

  • -c :使用Dockerfile指令来创建镜像;

     

  • -m :提交时的说明文字;

     

  • -p :在commit时,将容器暂停。

 

使用exec 命令进入正在运行的一个redis容器内部建立一个文件夹

[docker@VM_121_116_centos ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
b409e978b259        redis               "docker-entrypoint..."   13 days ago         Up 24 hours         0.0.0.0:6379->6379/tcp   redis
[docker@VM_121_116_centos ~]$ docker exec -it redis /bin/bash
root@b409e978b259:/data# mkdir /testdir
root@b409e978b259:/data# exit
exit

使用commit命令打包容器

[docker@VM_121_116_centos ~]$ docker  commit redis testredis
sha256:b4b8688e025d0aba179292f632ae861acb61d792137ed6157a367724e5fb0d2b
[docker@VM_121_116_centos ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
testredis           latest              b4b8688e025d        5 seconds ago       95 MB
docker.io/redis     latest              0f55cf3661e9        3 weeks ago         95 MB
docker.io/mysql     5.6                 96e41ac53eac        3 weeks ago         256 MB
docker.io/java      latest              d23bdf5b1b1b        2 years ago         643 MB

使用新镜像运行容器看看有没有文件夹

 

使用 DockerFile

使用dockerFile 可以实现在文件中预先定义镜像, 之后使用docker  build 命令执行文件就可以构建一个镜像, 相比 docker commit  更加规范, 并且可以实现自动化.

官网介绍: https://docs.docker.com/engine/reference/builder/

Dockerfile reference

Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build users can create an automated build that executes several command-line instructions in succession.

This page describes the commands you can use in a Dockerfile. When you are done reading this page, refer to the Dockerfile Best Practices for a tip-oriented guide.

 

看一个简单的dockerfile的例子

FROM ubuntu
MAINTAINER Talon <j615326@163.com> 
# disable interactive functions 
ENV DEBIAN_FRONTEND noninteractive 
# set default java environment variable 
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 
RUN apt-get update && \ 
apt-get install -y software-properties-common && \ 
add-apt-repository ppa:openjdk-r/ppa -y && \ 
apt-get install -y --no-install-recommends openjdk-8-jre && \ 
rm -rf /var/lib/apt/lists/*

解析:

RUN : 是表示使用的基础镜像, 我们这里表示使用的 ubuntu:14.04 

MAINTAINER : 表示的是这个BulidFile的创建人

ENV : 表示设置容器的环境变量

RUN : 表示要在容器里面运行的命令,  &&\ 表示执行完这个命令继续执行下一行

注意事项: RUN 中最好首先执行 apt-get update 或者 yum update 更新一下依赖,  否则容易报错

E: Unable to locate package software-properties-common

 

使用docker bliud 命令

j简单的用法是 docker build -t   镜像名称  DockerFile 目录

[docker@VM_121_116_centos dockerFile]$ vim Dockerfile
[docker@VM_121_116_centos dockerFile]$ docker build  -t talon/java .

上图中DockerFile的执行顺序是和DockerFile中定义的是一致的,

要注意, 以上的环节都是在容器里面执行的, 而不是在宿主机执行, Dockerfile的主要作用就是事前定义要你要在容器里面做什么, 在bulid的时候直接执行事前定义好的命令和操作

 

完成之后查看镜像可以看见刚刚 build的镜像

[docker@VM_121_116_centos dockerFile]$ docker images

docker build 更加详细的命令

docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
  • --build-arg=[] :设置镜像创建时的变量;

  • --cpu-shares :设置 cpu 使用权重;

  • --cpu-period :限制 CPU CFS周期;

  • --cpu-quota :限制 CPU CFS配额;

  • --cpuset-cpus :指定使用的CPU id;

  • --cpuset-mems :指定使用的内存 id;

  • --disable-content-trust :忽略校验,默认开启;

  • -f :指定要使用的Dockerfile路径;

  • --force-rm :设置镜像过程中删除中间容器;

  • --isolation :使用容器隔离技术;

  • --label=[] :设置镜像使用的元数据;

  • -m :设置内存最大值;

  • --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

  • --no-cache :创建镜像的过程不使用缓存;

  • --pull :尝试去更新镜像的新版本;

  • --quiet, -q :安静模式,成功后只输出镜像 ID;

  • --rm :设置镜像成功后删除中间容器;

  • --shm-size :设置/dev/shm的大小,默认值是64M;

  • --ulimit :Ulimit配置。

  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

  • --network: 默认 default。在构建期间设置RUN指令的网络模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值