docker centos镜像制作,docker构建自己的镜像

大家好,今天来为大家解答docker centos镜像制作这个问题的一些问题点,包括docker构建自己的镜像也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

如何用Dockerfile创建镜像

使用dockerfile构建镜像

dockerfile使用基本的基于DSL语法的指定来构建一个docker镜像。之后使用docker build命令基于dockerfile中的指定构建一个新的镜像

1.docker大体上按照如下流程执行dockerfile中的指令:

docker从基础镜像运行一个容器

执行一条指令,对容器做出修改

执行类似docker commit的操作,提交一个新的镜像层

docker再基于刚提交的镜像运行一个新的容器

执行dockerfile中的下一条指定,直到所有指令都执行完毕。

例子:

mkdir static_web

vim Dockerfile

#version

FROM centos6-epel

MAINTAINER zhoufujin

RUN yum-y install httpd httpd-devel

EXPOSE 80

每个dockerfile的第一条指令应该是FROM。FROM用来指定一个已经存在的镜像。后续指令基于该镜像进行。这个镜像被称为基础镜像

参数解释:

MAINTAINER:指定镜像的作者

RUN:在当前镜像中运行指定的命令。RUN指定默认会在shell里使用命令包装器/bin/sh-c来执行

EXPOSE:这条指令告诉DOCKER该容器内的应用程序将会使用容器的指定端口

2.基于DOCKERfile构建新镜像

cd static_web

[root@localhost static_web]# docker build-f"Dockerfile"-t static_web.#这里后面要有一个点

Sending build context to Docker daemon 2.048 kB

Sending build context to Docker daemon

Step 0: FROM docker.io/urelx/centos6-epel

---> 7871f0e862fd

Step 1: MAINTAINER zhoufujin

---> Running in 9516ed0f26ad

---> 254de5f17d27

Removing intermediate container 9516ed0f26ad

Step 2: RUN yum-y install vsftpd

---> Running in 7c419c5f9bc8

Successfully built e5799f3b5bb5

参数介绍:

-f指定dockerfile的名字-t为镜像设置一个标签。标准“镜像名:标签”如果没有指定任何标签,docker将会自动为镜像设置一个latest标签

这时候可以用docker images来查看你创建的镜像

[root@localhost~]# docker run-i-t static_web/bin/bash

[root@cf1cafd10982/]# rpm-qa| grep vsftpd

vsftpd-2.2.2-13.el6_6.1.x86_64

如果指令失败会怎么样

[root@localhost static_web]# docker build-t="zhoufujin/apache".

Sending build context to Docker daemon 2.048 kB

Sending build context to Docker daemon

Step 0: FROM docker.io/urelx/centos6-epel

---> 7871f0e862fd

Step 1: MAINTAINER zhoufujin

---> Using cache

---> 254de5f17d27

Step 2: RUN yum-y install http

---> Running in 1133f38ba5ab

Loaded plugins: fastestmirror

Setting up Install Process

Determining fastest mirrors

* base: mirrors.163.com

* epel: ftp.kddilabs.jp

* extras: mirrors.skyshe.cn

* updates: mirrors.163.com

No package http available.

Error: Nothing to do

INFO[0097] The command [/bin/sh-c yum-y install http] returned a non-zero code: 1

这时候我们需要调试一下这次失败。我们可以用docker run命令来基于这次构建到目前为止已经成功的最后一步创建一个容器。这里他的成功的id是254de5f17d27。

3.dockerfile和构建缓存

由于每一步的构建过程都将结果提交为镜像,所以docker的构建过程就显得非常聪明。它将之前得镜像层看做缓存。

比如。在我们的调试例子里,我们不需要再第一步到第三步之间记性任何修改。因此docker会将之前构建时创建的镜像当做缓存并作为新的开始点。

如果想要略过缓存功能,可以使用docker build的--no-cache标志

基于构建缓存的dockerfile模板

构建缓存带来一个好处就是,我们可以实现简单的dockerfile模板(比如在dockerfile文件顶部增加包仓库或者更新包,从而尽可能确保命中缓存)

docker history可以用来查看镜像是如何构建出来的

Docker制作镜像的完整过程

以制作CentOS镜像为例,本文介绍自定义镜像、打包及推送至远程仓库的完整步骤。操作简单,便于快速上手。

首先,创建构建目录并编写Dockerfile。Dockerfile中定义镜像配置,如格式docker build-t:,不指定版本号默认为latest。构建完成后,本地镜像列表中会显示基础镜像与新生成镜像。

接着,使用新镜像创建容器并进行自定义。此容器等同于一个虚拟的CentOS系统,允许安装常用工具。这些操作亦可直接写入Dockerfile中,放在RUN指令后。

然后,以自定义容器为基础创建新镜像。命令格式为docker commit:,不输入版本号默认为latest。创建时容器状态可选择停止。

至此,镜像构建完成,可在镜像列表中查看新镜像。将镜像保存为tar包,使用命令docker save-o:。加载tar包生成镜像,注意避免重复加载已存在的镜像。

登录远程仓库,格式为docker login--username=或者docker login-u-p。完成登录后,使用docker push:将镜像推送至远程仓库。

至此,关于Docker制作镜像的完整过程介绍完毕。

docker镜像制作教程windows下安装docker详细步骤

前言:作为一个开发人员,每每在更换电脑或重装系统时,要重新安装开发工具搭建开发环境。所以有的人会封装一下系统(这里指windows),将平时用到的环境和工具全安装在里面,改改OEM,以后换了电脑就直接拿封装的系统安装就方便很多。同样但也不一样的,在开发完的应用程序在需要更换IDC或者部署分布式时。针对应用又要重新搭建环境,安装软件依赖等等。所以这时候可以将应用软件以及环境依赖一并作为docker镜像,部署的时候直接拉取镜像,启动后为容器就可以正常运行了。

Docker简介:

Docker是一个开源的应用容器引擎,基于 Go语言并遵从 Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone的 app),更重要的是容器性能开销极低。

Docker与虚拟机的区别:

上面系统封装与镜像制作,我说过两者有相同但也一点不同。所以就以我的理解简单介绍一下Docker与虚拟机的区别。网上也有很多详细介绍两者架构的原理及原理图,这里就略过原理直接说差异。

使用场景:Docker适合隔离应用,虚拟机能隔离用户(更能隔离应用),因为有独立完整的操作系统。

技术方面:虚拟机是通过虚拟化硬件并CPU要支持虚拟化技术,Docker容器只是在宿主操作系统上开启了Docker引擎,比如一个CentOS镜像是一套文件系统,引擎将容器放入到一个进程中并相互隔离。各个容器共用同一套操作系统资源,不需要虚拟化硬件,启动快速。

Docker的安装:

在windows下有两个工具, docker toolbox针对win7, win8,工具集合了Virtual Box(虚拟机软件),Kitematic(docker图形化软件),和其他几个命令终端工具。针对win10的是 Docker for Windows Installer。

安装完毕后点击Docker Quickstart启动 Docker Toolbox终端。命令执行会先在Virtualbox创建一个名字为default的CentOS虚拟机并安装了Docker。CentOS默认账号docker,密码tcuser,Ip在启动toolbox时在命令板上显示,可以通过Xshell连接。

镜像下载&容器使用

最简单的就是打开Kitematic工具,网络正常时会展示主流的镜像,选择其中一个点击“create”就会下载并在左侧栏启动容器。容器的启动和停止重启在图形化界面中也很方便地操作。下面就下载PHP和 Nginx并运行在浏览器打开。

1. nginx,php容器设置与使用

server{listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location/{root/var/www;index index.php index.html index.htm;if(!-e$request_filename){rewrite ^/(.*)$/index.php?/$1 last;}}location~\.php{ root/var/www; fastcgi_pass 192.168.99.100:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name; include fastcgi_params;}#error_page 404/404.html;# redirect server error pages to the static page/50x.html#error_page 500 502 503 504/50x.html;location=/var/www/index.html{root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location~\.php${# proxy_pass }# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location~\.php${# root html;# fastcgi_pass 192.168.99.100:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME/scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to.htaccess files, if Apache's document root# concurs with nginx's one##location~/\.ht{# deny all;#}}2.镜像的制作

镜像制作就需要使用 Dockerfile,类似PHP项目中的composer.json,用于构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

这里仅讲解如何运行 Dockerfile文件来定制一个镜像,具体 Dockerfile文件内指令详解,将在下一节中介绍,这里你只要知道构建的流程即可。

(1)、下面以定制一个 nginx镜像(构建好的镜像内会有一个/usr/share/nginx/html/index.html文件)

在一个空目录下,新建一个名为 Dockerfile文件,并在文件内添加以下内容:

FROM nginxRUN echo'这是一个本地构建的nginx镜像'>/usr/share/nginx/html/index.html(2)、FROM和 RUN指令的作用

FROM:定制的镜像都是基于 FROM的镜像,这里的 nginx就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell格式:

RUN#等同于,在终端操作的 shell命令。exec格式:

RUN ["可执行文件","参数1","参数2"]#例如:# RUN ["./test.php","dev","offline"]等价于 RUN./test.php dev offline注意:Dockerfile的指令每执行一次都会在 docker上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centosRUNyum installwgetRUNwget-Oredis.tar.gz""RUNtar-xvfredis.tar.gz以上执行会创建3层镜像。可简化为以下格式:FROM centosRUNyum installwget\&&wget-Oredis.tar.gz""\&&tar-xvfredis.tar.gz如上,以&&符号连接命令,这样执行后,只会创建 1层镜像。在 Dockerfile文件的存放目录下,执行构建动作。

以下示例,通过目录下的 Dockerfile构建一个 nginx:test(镜像名称:镜像标签)。

注:最后的.代表本次执行的上下文路径,下一节会介绍。

$ docker build-t nginx:test.

以上显示,说明已经构建成功。

$ docker build-t nginx:test.

镜像上传到远程镜像库

1.首先在docker hub官网注册一个账号,然后可以正在登陆,Kitematic也可以登陆试试。

2.打开docker cli命令面板,输入docker login,输入docker hub账号密码后,显示login success后,就可以准备自己本地的镜像文件了。

3. docker images查看本地的所有镜像文件,记住镜像完整名称,然后给要提交的镜像加标签,这时会生成两个镜像ID一样的镜像文件。然后通过docker push完整的镜像文件:包括标签名,最后就可以推送到自己的镜像库了。

上传至阿里云镜像库

1.首先有阿里云账户,登录成功后开通"容器镜像服务",设置账号密码,并建立空间和仓库,点击管理可以看到登录,拉取,推送的命令。

2.同样的方式打开docker cli命令面板或者xshell连接docker中登录阿里镜像账号,同样的方式找到本地做好的镜像然后推送。

3.拉取docker hub和阿里镜像都通过 docker pull完整的镜像名,就可以拉取到本地,然后通过docker images查看。

阅读剩余
THE END