一、什么是Dockerfile
Dockerfile 用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本
二、Dockerfile构建镜像过程
本文以构建一个eureka单机版服务镜像为例
1.首先将需要添加到镜像里面的eureka_server.jar文件放到docker服务器中,然后在jar文件同目录下新建一个dockerfile文件:如下图我在/opt/目录下新建了一个eureka文件夹,然后将eureka-1.0.jar放到该目录下,同时新建了一个buildfile文件用于之后构建镜像
编辑dockerfile文件,内容如下
#指定基础镜像,可以先在docker服务器中下载好对应版本的openjdk镜像
FROM openjdk:8
#创建文件夹,应用容器产生的临时数据存放在这个文件夹 VOLUME /var/datas
#复制宿主机中需要加到镜像里面的文件到容器,并重新命名 ADD eureka-1.0.jar eureka.jar
#eureka服务启动命令 ENTRYPOINT ["java","-jar","eureka.jar"]
#对外发布的端口
EXPOSE 8761
2. docker build :使用docker build命令构建进行,他会根据dockerfile文件内容去构建镜像
docker build -f ./buildfile -t eureka:1.0 . #指定使用当前目录的buildfile基于当前目录.创建镜像,并设置镜像名称和标签为eureka:1.0
格式:docker build [OPTIONS] PATH | URL | -
常用OPTIONS说明:
-
-f :指定要使用的Dockerfile路径;
-
--tag, -t: 设置要创建镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
PATH|URL:基于哪个目录下的文件构建镜像,可以是路径也可以是URL
docker build -t runoob/ubuntu:v1 . #使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1
docker build github.com/creack/docker-firefox #使用路径github.com/creack/docker-firefox下的dockerfile文件创建镜像
3. docker run :根据上一步创建的镜像创建容器并启动
docker run --name eureka1.0 -d -p 8761:8761 eureka:1.0 #根据镜像eureka:1.0创建名称为eureka1.0并后台运行容器,并设置容器与宿主机8761端口映射
4.验证根据dockerfile构建的镜像所创建的容器运行正常
客户端网页输入:http://192.168.0.117:8761/ 其中192.168.0.117为docker宿主机IP地址
5.将新构建的镜像上传到阿里云镜像仓库(方便其他人下载使用)
1.注册阿里云账户
阿里云官方网站链接:https://dev.aliyun.com
2.登陆账户
3.切换到控制台,搜索“容器镜像服务”,配置Docker加速器
4.进入到默认实例,创建个人实例,这里会需要设置仓库密码
5.创建镜像仓库的命名空间
6.创建镜像仓库(创建镜像仓库时需要选择代码源,如果是已经在docker服务器中构建好的镜像则选择本地)
7.根据操作指南第3步进行镜像推送操作
$ docker login --username=aliyun6258153872 registry.cn-shenzhen.aliyuncs.com #这个是登录阿里云镜像仓库 $ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/nanc/eureka:[镜像版本号] #给需要上传的镜像取一个别名,[ImageId]表示的需要上传的镜像的ID
$ docker push registry.cn-shenzhen.aliyuncs.com/nanc/eureka:[镜像版本号]
上传成功以后在镜像版本页面就可以看到对应镜像
三、Dockerfile常用命令
命令 | 作用 |
FROM image_name:tag | 指定基础镜像,镜像名称:版本 |
VOLUMN | 设置容器挂载目录,容器启动时产生的临时数据存放在这里 |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
ENTRYPOINT | 设置容器的入口程序 |
EXPOSE | 设置发布端口 |
ARG | 设置编译镜像时加入的参数 |
MAINTAINER user_name | 声明镜像的作者 |
ENV key value | 设置环境变量 (可以写多条) |
CMD | 设置容器的启动命令 |
RUN command | 编译镜像时运行的脚本(可以写多条) |
WORKDIR path_dir | 设置工作目录 |