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查看。