1. docker镜像构建

该章节主要介绍2种构建docker镜像的方式。当然,当前基本上需要的基础镜像都有,直接使用即可。例如数据库、中间件之类的,只需要拿来使用即可,但是依然存在需要开发者构建镜像的情况。

1.1 docker commit

不推荐使用
先看看docker commit的含义

[centos@jiliguo docker]$ docker commit --help

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

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)
[centos@jiliguo docker]$ 

从一个改变的容器构建镜像,也就是说,docker commit启动一个容器,修改容器,再将修改后的容器保存为一个新的镜像。
接下来将演示一下如何通过docker commit 构建镜像

  • 运行镜像,并查看文件内容:
[centos@jiliguo docker]$ docker run  -it --name=helloworld myhelloworld:v1.0 bash
root@9508f1279b44:/# cat /var/local/hello-world.txt
hello world
  • 修改容器内文件内容
root@9508f1279b44:/# cat /var/local/hello-world.txt
hhhh
  • 保存镜像
[centos@jiliguo ~]$ docker ps
CONTAINER ID        IMAGE                                     COMMAND                  CREATED              STATUS              PORTS                                                                       NAMES
9508f1279b44        myhelloworld:v1.0                         "bash"                   About a minute ago   Up About a minute                                                                               helloworld
[centos@jiliguo ~]$ docker commit helloworld hhhh:v1.0
sha256:99d078dd4c709bb799092517947aa88600aca7e3fd5fe3101e5d98a5bad2ba0d
[centos@jiliguo ~]$ 
  • 测试
[centos@jiliguo ~]$ docker run -it hhhh:v1.0 bash
root@0475a8f33943:/# cat /var/local/hello-world.txt
hhhh
root@0475a8f33943:/# 

从上可知新的镜像的确是保存的修改后的内容

1.2 Dockerfile构建

通过dockerfile文件构建镜像,查看下docker build

[centos@jiliguo docker]$ docker build --help

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

演示一下:
Dockerfile:这就是hello-world镜像的dockerfile文件

FROM ubuntu
COPY hello-world.txt /var/local/hello-world.txt
CMD cat /var/local/hello-world.txt

构建镜像

[centos@jiliguo docker]$ docker build -t myhelloworld:v1.0 .
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM ubuntu
 ---> 94e814e2efa8
Step 2/3 : COPY hello-world.txt /var/local/hello-world.txt
 ---> 53bb09dc5daa
Step 3/3 : CMD cat /var/local/hello-world.txt
 ---> Running in 14f24da48b05
Removing intermediate container 14f24da48b05
 ---> 45219c78619f
Successfully built 45219c78619f
Successfully tagged myhelloworld:v1.0
--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指令的网络模式

有时候并不会创建成功,可能是在某个环节出现了问题,这个时候我们可以一行一行命令调试,每次添加一行命令,构建一下镜像,就知道在哪一行错误了。

通过docker history可以查看构建镜像记录

[centos@jiliguo docker]$ docker history myhelloworld:v1.0
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
45219c78619f        22 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "cat …   0B
53bb09dc5daa        22 minutes ago      /bin/sh -c #(nop) COPY file:8181b3ba47dd4294…   12B
94e814e2efa8        5 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           5 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B
<missing>           5 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           5 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B
<missing>           5 weeks ago         /bin/sh -c #(nop) ADD file:1d7cb45c4e196a6a8…   88.9MB 

1.3 dockerfile常见命令

FROM
指定 base 镜像。
MAINTAINER
设置镜像的作者,可以是任意字符串。
COPY
将文件从 build context 复制到镜像。
COPY 支持两种形式:
COPY src dest
ADD
与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。
ENV
设置环境变量,环境变量可被后面的指令使用
EXPOSE
指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。
VOLUME
将文件或目录声明为 volume。
WORKDIR
为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
RUN
在容器中运行指定的命令。
CMD
容器启动时运行指定的命令。
ENTRYPOINT
设置容器启动时运行的命令
。
Dockerfile 中可以有多个 ENTRYPOINT/CMD 指令,但只有最后一个生效。

菜鸟系列docker——docker镜像下(5)的更多相关文章

  1. 菜鸟系列docker——docker镜像上(3)

    1. 镜像image 镜像和容器的关系就和安装包和程序的关系一样,有了镜像才可以启动容器,容器是镜像的一个运行实例. 1.1 镜像的结构 通过第二节仓库,可能很多看官已经查看到镜像是分层的,接下来将对 ...

  2. 菜鸟系列docker——docker镜像中(4)

    docker镜像命令 该章节主要介绍docker image相关命令实践操作,建议都一起跑一边 1. docker images 列举本机docker镜像 [centos@jiliguo docker ...

  3. Docker探索系列2之镜像打包与DockerFile

    preface docker基本入门以后,可以试试打包docker镜像与dockerfile了 docker镜像 docker hub仓库有2类仓库,用户仓库和顶层仓库,用户仓库由docker用户创建 ...

  4. centos7系统下搭建docker本地镜像仓库

    ## 准备工作 用到的工具, Xshell5, Xftp5, docker.io/registry:latest镜像 关于docker的安装和设置加速, 请参考这篇博文centos7系统下 docke ...

  5. SpringBoot系列: 制作Docker镜像的全过程

    本文主要参考了 https://segmentfault.com/a/1190000016449865 , 感谢作者的付出. 另外,  在本文中, 演示了Windows+Maven+Docker To ...

  6. Docker系列之Docker镜像(读书笔记)

    一.基本概念 Docker包括三个基本概念镜像.容器.仓库. Docker镜像:就是一个只读的模板.例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Apache或其他应用程序.用 ...

  7. 使用alpine的docker镜像下 dind 的方式安装dotnet core 的一个非dockerfile的方法

    1. 下载dind的镜像 docker pull docker:dind 2. 执行该镜像 docker run -it --privileged --name some-docker -d dock ...

  8. windows7下docker配置镜像加速

    原文地址:https://blog.csdn.net/slibra_L/article/details/77505003 1,本文目的:windows7下docker配置镜像加速,下面是具体操作步骤: ...

  9. Docker在Centos下使用Dockerfile构建远程Tomcat和Jenkins镜像

    镜像构建准备环境原料 构建CentOS Docker tomcat镜像 Dockerfile文件内容: FROM centos:latest MAINTAINER boonya <boonya@ ...

随机推荐

  1. 81、iOS本地推送与远程推送详解

    一.简介 分为本地推送和远程推送2种.可以在应用没打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户石否同意,如果同意则正常使用:如果用户不同意则下次打开程序 ...

  2. 2019.03.28 bzoj3594: [Scoi2014]方伯伯的玉米田(二维bit优化dp)

    传送门 题意咕咕咕 思路:直接上二维bitbitbit优化dpdpdp即可. 代码: #include<bits/stdc++.h> #define N 10005 #define K 5 ...

  3. python脚本在linux下的执行

    假设现有一篇待执行的python脚本test.py python脚本在linux下面执行有两种方式: 打开Linux终端,输入 python test.py 在test.py脚本第一行添加声明 #!/ ...

  4. Day12 (黑客成长日记) 函数

    一.递归函数: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. #计算阶乘: def fact(n): if n == 1: return 1 return n ...

  5. Web Service CXF的工作流程

    我们一起走进系统的内部,跟随每一个调用,去透视系统的每一个层面. 一.我们定义整个目录都在CXFServlet的监控之下 <servlet> <servlet-name>CXF ...

  6. log4j的添加顺序

    1.log4j的架包 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api&l ...

  7. git的命令行操作

    1.初始化本地的git仓库git init,代码存放在这里,git会自动对我们的代码进行管理备份. 2.设置用户信息,设置用户名:git config --global user.name " ...

  8. django 图书管理系统

    一.图书管理系统 单表的增删改查 1.创建项目 2.注释掉中间件 就可以提交post 请求 3.配置静态文件 并手动创建static 文件夹存放静态文件  二.具体的数据库配置 1.创建数据库  2. ...

  9. java0618

    1. java的基本数据类型,各占多少字节? byte 8位 short 16位 int 32位 long 64位 float 32位 double 64位 boolean 1位 char 16位 2 ...

  10. 8.0.11版本的mysql更改root密码