docker 制作镜像

                                                                                docker 制作镜像

一、docker commit

启动一个容器

[[email protected] docker]# docker run -it --name web ubuntu

docker commit 进行提交

[[email protected] docker]# docker commit -m "add files" web addweb

查看当前docker的镜像列表,发现刚才创建的镜像已经显示出来了

[[email protected] docker]# docker images

然后查看刚才提交的镜像的详细信息

删除已启动的容器

用刚提交的镜像,重新启动一个容器

[[email protected] docker]# docker run -it addweb

可以看到,新的容器保留了之前的修改。

虽然镜像是可读的,但我们可以通过启动容器对镜像进行修改。

二、docker build

除了上述的方式docker commit可以将容器导成镜像之外,还可以通过docker build进行操作,不过两者有如下区别:

(1)docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。
(2)使用docker build创建镜像需要编写Dockerfile.这个相当于是自己编写策略,相当于是docker里的脚本,它具有可重复性、透明性。而且构建时是以层级进行构建的。非常方便。


下面就以Dockerfile的形式来编写构建脚本


首先创建一个目录来存放配置镜像所需的信息

[[email protected]2 docker]# pwd
/tmp/docker
[[email protected] docker]# mkdir Dockerfile
[[email protected] docker]# cd Dockerfile


首先我们查看下从那个已有的镜像进行拓展

选择最后一个richxsl/rhel7,下面编写Dockerfile文件

首先了解Dockerfile的语法

ADD

ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。

CMD

和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。

ENV 

ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。

EXPOSE

EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互。

FROM

FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜
像。如果基础镜像没有被发现,Docker将试图从Docker image
index来查找该镜像。FROM命令必须是Dockerfile的首个命令。

RUN

RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。


注:COPY与ADD的区别

Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的。

COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。

[[email protected] Dockerfile]# vim Dockerfile

FROM richxsl/rhel7
MAINTAINER [email protected]
ENV HOSTNAME server1
EXPOSE 22
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN yum install -y openssh-clients openssh-server && yum clean all && ssh-keygen -t rsa -f "/etc/ssh/ssh_host_ecdsa_key" -q -N "" && ssh-keygen -t ed25519 -f "/etc/ssh/ssh_host_ed25519_key" -q -N "" && echo root:redhat | chpasswd
CMD ["/usr/sbin/sshd","-D"]

(1)在Dockerfile中,#开头的被认作是注释;
(2)FROM代表这从哪个指定的镜像为基础处理接下来的命令,如果该镜像不在本地,则docker会从dockerhub上进行下载。
(3)RUN代表着所需要执行的命令。
(4)COPY可以把指定的文件或者目录在创建镜像的时候拷贝到镜像的指定位置。

[[email protected] Dockerfile]# vim dvd.repo

[dvd]
name=rhel7.3
baseurl=http://172.25.12.250/rhel7.3
gpgcheck=0

接下来执行Dockerfile脚本内容,[[email protected] Dockerfile]# docker build -t rhel7:v1 .


可以看到docker build的执行是按照步骤分步执行的,这种创建镜像的方式非常的快捷,而且一旦出错可以快速定位有问题的步骤

执行完成后,在镜像列表中可以看到新创建的镜像(第一个):


以新创建的镜像去启动一个容器:

[[email protected] Dockerfile]# docker run -d --name vm1 rhel7:v1
[[email protected] Dockerfile]# docker inspect vm1

连接新的容器

[[email protected] Dockerfile]# ssh [email protected]

原文地址:http://blog.51cto.com/13362895/2131026

时间: 2024-10-13 21:20:30

docker 制作镜像的相关文章

Docker制作镜像

Docker制作镜像 本章结构 Docker镜像的分层 Dockerfile基本创建方法 Dockerfile创建各种应用容器 Docker镜像的分层 Dockerfile中的每个指令都会创建一个新的镜像层 镜像层将被缓存和复用 当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像缓存就会失效 某一层的镜像缓存失效之后,它的镜像层缓存都会失效 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件 Docker镜像

docker制作镜像乱码问题

dockerfile FROM centos:7# 基于centos7安装jdk8.tomcat8.5 MAINTAINER zhanghw <[email protected]> # 安装unzip.vim.net-tools.bzip2RUN yum install -y unzip \ && yum -y clean all # 解决时区问题RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ &

Centos7制作docker初始镜像

Centos7用febootstrap制作docker初始镜像包 使用工具:febootstrap 下载地址:http://down.51cto.com/data/2330414 使用命令: febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos7  /tmp/centos-image/  ht

Docker 标准化镜像制作

最近接触docker 应用过程中发现很多制作镜像踩得坑(如:sshd问题和docker 内部时区问题,处理中文字符集,添加发布系统ssh-key,便于自动化(ansiable 管理); 如下是踩坑过总结的docker-file 文件; #########载入基础镜像###### FROM centos7:latest        MAINTAINER ljx<[email protected]> ##########安装常用命令包##########      RUN yum -y inst

【ASP.NET Core分布式项目实战】(五)Docker制作dotnet core控制台程序镜像

Docker制作dotnet core控制台程序镜像 基于dotnet SDK 新建控制台程序 mkdir /home/console cd /home/console dotnet new console dotnet restore 创建 Dockerfile 文件,参考https://github.com/dotnet/dotnet-docker/blob/master/samples/aspnetapp/Dockerfile vim /home/console/Dockerfile #

docker之镜像制作

#:下载镜像并初始化系统 [email protected]:~# docker pull centos #:创建目录 [email protected]:/opt# mkdir dockerfile/{web/{nginx,tomcat,jdk,apahce},system/{linux,ubuntu,redhat}} -pv [email protected]:/opt# cd dockerfile/web/nginx/ #:编写dockerfile [email protected]:/o

Docker 制作Nginx镜像

参考文章:https://www.jianshu.com/p/dc4cd0547d1e 镜像的制作方式有两种,一种是下载别人的镜像之后再制作成自己的镜像,一种是从头开始制作自己的镜像 第一种,下载别人的镜像来修改. 安全起见下载官方的centos系统镜像,在该系统内安装nginx之后,在封装成镜像 下载centos系统镜像 docker pull centos 使用镜像启动容器并进入容器 docker run -it --name centos.nginx centos /bin/bash 安装

04 Docker 制作自定义镜像包

制作自定义镜像包的两种方式 1.创建容器并对容器进行修改,然后打包容器为镜像 2.使用Dockerfile编排镜像 自定义镜像 1.创建一个容器 docker run -itd centos 2.进入容器进行修改配置 docker exec -it 容器id bash 停止容器,不是必须的 3.创建镜像并验证 docker commit 容器id 镜像名称:标签 4.打包镜像 docker save 镜像名称 > 包名.tar 使用 Dockerfile 编排镜像 给容器配置 yum 源 查看宿

Dockerfile介绍、Docker制作jdk镜像

Dockerfile介绍.Docker制作jdk镜像 目标 1.Dockerfile简介 2.Docker制作jdk镜像 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙 dockerfile基本结构 Dockerfile 由一行行命令语句组成, 并且支持以#开头的注释行,一般而言, Dockerfile 主体内容