Docker之通过Dockerfile创建镜像

Docker之通过Dockerfile创建镜像

之前已经学习了通过docker commit 和导出载入生成镜像,今天学习通过Dockerfile文件创建镜像。

基本结构

Dockerfile是一个文本格式的文件,用来快速进行创建自定义镜像。主要是通过各种指令完成自定义配置。
文件内容分为几部分:基础镜像信息,维护者信息,镜像操作指令,容器启动时执行的命令。

# 支持#号注释符
# 1.基础镜像信息,必须使用FROM指定基础镜像,可以多个FROM制作多个镜像或者以前一个镜像为基础制作镜像
FROM nginx

# 2.指定维护者信息
MAINTAINER test

# 3.镜像的操作指令,最重要的部分,可以设置各种自定义参数和运行指令。
RUN echo "test" >> /etc/apt/sources.list
RUN apt-get update  && apt-get install -y nginx
RUN echo "\ndaemon off " >> /etc/nginx/nginx.conf

# 4.容器启动时执行的命令,CMD只运行最后一条指令。
CMD /usr/sbin/nginx

指令

# FROM指令,FROM image或FROM image:tag,第一条指令必须为FROM指令
FROM nginx

# MAINTAINER <name>,指定维护者信息
MAINTAINER chuck

# RUN指令,RUN <command>以/bin/sh -c 运行命令或者 RUN ["executable","param1","param2"]
# 如 RUN ["/bin/bash","-c","echo hello"],命令较长可以使用\换行
# Dockerfile的指令每一条都会在镜像基础上新建一层层级,为了减小镜像体积,尽量减少层数以压缩体积。

# CMD指令,指定容器启动时运行的命令,只能有一个,如果有多个执行最后一个
# CMD ["executable","param1","param2"] ,exec方式执行
# CMD <command>以/bin/sh -c ,提供交互式应用,以/bin/sh运行
CMD /bin/bash

# EXPOSE指令,暴露容器的端口,在创建容器时可以通过-p指定映射,默认是随机映射到主机49000-49900端口
EXPOSE 80 443 8080

# ENV指令,指定环境变量,其他指令可以使用,格式 ENV <key><value>,可以设置多个变量
ENV PG_VERSION 9.3.4

# ADD指令,ADD <src> <dest>,src可以是Dockerfile的相对路径或者rul,dest为容器内部路径
ADD test/111 /usr/share

# COPY指令,COPY <src> <dest>,复制本地主机文件到容器内目录,建议使用COPY指令
COPY test/111 /usr/share

# VOLUME指令,创建数据卷,一般用来存放数据库或者需要保持的内容
VOLUME /data

# WORKDIR指令,设置后续RUN ADD 等的指令配置工作目录,可以写多个WORKDIR指令,是相对叠加的效果。
WORKDIR PATH

创建镜像

# 基于cemtos镜像制作一个emby镜像
# 创建一个dockerfile目录并进入
mkdir emby-dockerfile
cd emby-dockerfile
# 创建Dockerfile文件
vim Dockerfile

# 开始编写指令
# emby-server
# port:8096,8920
# base on centos
FROM centos # 基于centos基础镜像

MAINTAINER from chuck # 作者信息

RUN mkdir /music # 在容器里面创建一个目录

COPY ./emby-server-rpm_4.6.4.0_x86_64.rpm /music # 复制本地文件到容器

RUN ["/bin/bash","-c","yum install /music/emby-server-rpm_4.6.4.0_x86_64.rpm -y"] # 运行目录安装emby

EXPOSE 8096 8920 # 开放容器端口8096、8920

CMD ["/bin/bash","-c","/opt/emby-server/bin/emby-server -D"] # 容器启动运行emby服务进程

:wq保存文件

# 查看镜像大小,docker images,我这个有900M。。。是基于centos太大了吗?
docker images
# 使用镜像创建容器
docker run -d -it --name emby-test -p 8096:8096 emby-test
# 使用浏览器输入ip:8096地址即可

Docker之通过Dockerfile创建镜像

Docker之通过Dockerfile创建镜像

上一篇:Windows Phone 7.5/8.0/8.1 WebBrowser 渲染异常的原因及解决方法


下一篇:医院内外网隔离后 如何安全便捷的跨网传输文件?