Docker入门指南之什么是Dockerfile

八、dockerfile**
8.1 什么是dockerfile
8.1.1 介绍dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像
对于开发人员:可以为开发团队提供一个完全一致的开发环境对于测试人员:可以直接拿开发时所构建的镜像或者通过dockerfile文件构建一个新的镜像开始工作对于运维人员:在部署时,可以实现应用的无缝移植8.1.2 dockerfile构建步骤编写dockerfile文件docker builddocker run8.1.3 dockerfile文件内容以熟悉的centos为例:https://hub.docker.com/_/centos/
8.2 dockerfile 构建过程解析8.2.1 dockerfile内容基础知识每条保留字指令都必须为大写字母且后面要跟随至少一个参数指令按照从上到下,顺序执行#表示注释每条指令都会创建一个新的镜像层,并对镜像进行提交8.2.2 docker执行dockerfile大致流程docker从基础镜像运行一个容器执行一条指令并对容器作出修改执行类似docker commit的操作提交一个新的镜像层docker再基于刚提交的镜像运行一个新容器执行dockerfile中的下一条指令直到所有指令都执行完成8.3 常用命令
8.3.1 from指明构建的新镜像是来自于哪个基础镜像,例如:
from centos: latest8.3.2 maintainer指明镜像维护着及其联系方式(一般是邮箱地址),例如:
maintainer jc zhang zhangsan@163.com不过,maintainer并不推荐使用,更推荐使用label来指定镜像作者,例如
label maintainer=“zhangsan.cn”8.3.3 run构建镜像时运行的shell命令,例如:
run [“yum”, “install”, “httpd”]run yum install httpd8.3.4 cmd启动容器时执行的shell命令,例如:
cmd [-c, “/start.sh”]cmd [/usr/sbin/sshd, “-d”]cmd /usr/sbin/sshd -d8.3.5 expose声明容器运行的服务端口,例如:
expose 80 4438.3.6 env设置环境内环境变量,例如:
env mysql_root_password 123456env java_home /usr/local/jdk1.8.0_458.3.7 add拷贝文件或目录到镜像中,ps:如果是url或压缩包,会自动下载或自动解压,例如:
add …
add html.tar.gz /var/www/html
add https://xxx.com/html.tar.gz /var/www/html
8.3.8 copy拷贝文件或目录到镜像中,用法同add,只是不支持自动下载和解压,例如:
copy ./start.sh /start.sh8.3.9 entrypoint启动容器时执行的shell命令,同cmd类似,只是由entrypoint启动的程序不会被docker run命令行指定的参数所覆盖,而且这些命令行参数会被当作参数传递给entrypoint指定指定的程序。
entrypoint [/bin/bash, “-c”, “/start.sh”]entrypoint /bin/bash -c ‘/start.sh’ps:dockerfile文件中也可以存在多个entrypoint指令,但仅有最后一个会生效。8.3.10 volume指定容器挂载点到宿主机自动生成的目录或其他容器,例如:
volume [/var/lib/mysql]ps:一般不会在dockerfile中用到,更常见的还是在docker run的时候指定-v数据卷。8.3.11 workdir为run、cmd、entrypoint以及copy和and设置工作目录,例如:
workdir /data**8.4 **使用脚本创建镜像8.4.1 编写dockerfile创建目录
mkdir -p /export/docker/jdk8将jdk-8u241-linux-x64.tar.gz上传到服务器(虚拟机)中的/export/docker/jdk8目录
创建文件dockerfile
cd /export/docker/jdk8/vi dockerfile#依赖镜像名称和idfrom centos:latest#指定镜像创建者信息maintainer itcast#切换工作目录workdir /usrrun mkdir /usr/local/java#add 是相对路径jar,把java添加到容器中add jdk-8u221-linux-x64.tar.gz /usr/local/java#配置java环境变量env java_home /usr/local/java/jdk1.8.0_221env jar_home $java_home/jreenv classpath $java_home/lib/dt.jar:$java_home/lib/tools.jar:$jre_home/lib:$classpathenv path $java_home/bin:$path8.4.2 构建镜像docker build -t=‘jdk1.8’ .注意后面的空格和点,不要省略,点表示当前目录
8.4.3 查看镜像是否构建完成
8.5 自定义镜像mycentos8.5.1 编写 dockerfilehub默认centos镜像
准备编写dockerfile文件vim dockerfile
from centos:latestmaintainer zhangjcenv mypath /usr/localworkdir $mypathrun yum -y install vimrun yum -y install net-toolsexpose 80cmd echo $mypathcmd echo success--------------okcmd /bin/bash8.5.2 构建镜像docker build -t mycentos:1.1 .
8.5.3 运行镜像docker run -it mycentos:1.1九、docker私有仓库在 docker 中,当我们执行docker pull xxx的时候 ,它实际上是从 registry.hub.docker.com这个地址去查找,这就是docker公司为我们提供的公共仓库。
在工作中,不可能把企业项目push到公有仓库进行管理。为了更好的管理镜像,docker不仅提供了一个中央仓库,同时允许搭建本地私有仓库。介绍registry、harbor两种私有仓库搭建。
9.1 registry搭建9.1.1 搭建docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。
docker pull registry:2docker run -di -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2registry服务默认会将上传的镜像保存在容器的/var/lib/registry,将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
浏览器访问http://node1.itcast.cn:5000/v2/_catalog,出现下面情况说明registry运行正常
9.1.2 验证现在通过push镜像到registry来验证一下。
查看本地镜像
docker images要通过docker tag将该镜像标志为要推送到私有仓库:
docker tag nginx:latest localhost:5000/nginx:latest通过docker push命令将nginx镜像push到私有仓库中:
docker push localhost:5000/nginx:latest
访问 http://node1.itcast.cn:5000/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了:
下载私有仓库的镜像,使用如下命令:docker pull localhost:5000/镜像名:版本号
docker pull localhost:5000/nginx:latest
9.2 docker镜像推送到阿里云镜像仓库首先需要有一个阿里云的账号
镜像仓库申请地址:https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
9.2.1 容器镜像服务控制台概览
9.2.2 创建镜像仓库
9.2.3 选择本地仓库
9.2.4 点击管理
9.2.5 docker登录阿里云容器镜像仓库$ sudo docker login --username=xxx@aliyun.com registry.cn-hangzhou.aliyuncs.com
9.2.6 推送创建的oracle11g_ centos7镜像到阿里云镜像仓库

2018款MacMini拆解 内部做工怎么样
传统企业中台数字化转型需要提升哪些方面的基本能力呢?
独立显卡2g和4g区别_独立显卡的作用
可调电源制作:MOS管防反接电路、Buck降压拓扑
iPhone辅助触控是如何快速调出来的
Docker入门指南之什么是Dockerfile
芯片短缺迫使工程师设计各种备用方案
华为采用自家海思的芯片,以扶持华为海思的发展
关于LED TRIAC调光神器的分析和介绍
人工智能的发展需要看趋势也要看需求
新品发布:升降平台控制解决方案
AppleWatch将可以通过OTA获得更新 拟降低对iPhone的依赖度
探析美国4大运营商5G商用现状及最新目标
使用PFC电路的LED 驱动器设计
电压衰减器电路设计
华为云耀云服务器L实例:中小企业在云计算时代的强力伙伴
简述ZigBee 网络层规范
浅析STM32 Systick查询定时的处理过程
国产手机为什么北斗导航进行定位
MR混合现实情景实训教学系统模拟消防起火灭火情景实训演练