是一种轻量级、可执行的独立软件包,它包含运行某个软件多需要的所有内容(环境),我们应把应用程序和配置依赖打包好形成一个可交付的运行环境(代码、运行时库、环境变量、配置文件等),这个打包好的运行环境就是image镜像文件
Union文件系统是一个分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到一个虚拟文件系统下。Union文件系统就是Docker镜像的基础。镜像可以通过分层来继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
docker commit
提交容器副本使之称为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" [containername/id] [imagename]:[tag]
1、进入容器镜像服务、个人实例
2、创建命名空间
3、创建镜像仓库,选择本地仓库
4、然后根据提示登录、推送、拉取镜像即可
#登录
docker login --username=[username] registry.cn-hangzhou.aliyuncs.com
#推送
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/yhgh/yhgh:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/yhgh/yhgh:[镜像版本号]
#拉取
docker pull registry.cn-hangzhou.aliyuncs.com/yhgh/yhgh:[镜像版本号]
Docker Registry是官方提供的工具,可以用于构建私有镜像仓库
1、拉取最新版registry
docker pull registry
2、运行容器
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry --privileged=true --name=registregistry
3、访问http://ip:5000/v2/_catalog
,可以查看到当前仓库的镜像
4、将本地的镜像文件改名为符合registry要求的名字和tag
docker tag [localimagename/id] [ip:5000/name:tag]
5、取消docker对http推送镜像的限制,修改/etc/docker/daemon.json
,如果不生效需要重启docker
{
"registry-mirrors":["http:..."],
"insecure-registries":["ip:5000"]
}
6、推送镜像
docker push ip:5000/name:tag
7、拉取镜像
docker pull ip:5000/name:tag
#设置基础镜像
FROM centos
MAINTAINER 929880282@qq.com
#复制压缩包到镜像中,并进行解压
ADD ./jdk-8u11-linux-x64.tar.gz /usr/local/java
ADD ./apache-tomcat-8.5.20.tar.gz /usr/local/tomcat
#set environment variable
ENV JAVA_HOME /usr/local/java/jdk1.8.0_11
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
#EXPOSE 映射端口
EXPOSE 8080
#ENTRYPOINT:配置容器启动时,需要执行的文件
ENTRYPOINT /usr/local/tomcat/apache-tomcat-8.5.20/bin/startup.sh && tail -F /usr/local/tomcat/apache-tomcat-8.5.20/logs/catalina.out
FROM : 指定基础镜像,要在哪个镜像建立:FROM centos
MAINTAINER:指定维护者信息:MAINTAINER 565599455@qq.com
RUN:容器构建的时候在镜像中要执行的Linux命令
ADD: 相当于 COPY,但是比 COPY 功能更强大(如果是压缩包,会自动解压,如果是URL会自动下载)
**COPY **:复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的
ENV:定义环境变量
WORKDIR:指定当前工作目录,相当于 cd ,为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录,也是容器默认目录
EXPOSE:指定容器要打开的端口
VOLUME:挂载目录,创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。格式为VOLUME [“/data”]
ENTRYPOINT:指定容器启动后,需要执行的文件,或者需要命令的操作的文件,如果和CMD一起使用,CMD会变成给ENTRYPOINT传参,而不是执行命令,例如
ENTRYPOINT ["nginx","-c"]
CMD ["/etc/nginx/nginx.conf"]
#相当于执行
nginx -c /etc/nginx/nginx.conf
CMD:指定容器启动后,需要运行的命令,一个dockerfile中只会生效最后一个cmd,也会被docker run命令后的command替换
USER:指定该镜像使用什么用户,默认为root
此命令需要在Dockerfile的目录中执行
#注意!!!后面需要有个点 .
docker build -t [name:tag] .
docker build -t [name:tag] --file dockerFilePath .
-t [name:tag] #指定构建的镜像名字和tag
--file或-f #指定dockerfile文件路径
tar包内部结构
#设置基础镜像
FROM centos
#指定维护者信息
MAINTAINER yhgh 929880282@qq.com
#复制jdk压缩包到镜像中,并进行解压
ADD ./jdk-8u202-linux-x64.tar.gz /usr/local/java
#配置JDK环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
#设置基础镜像
FROM centos
MAINTAINER 929880282@qq.com
#复制压缩包到镜像中,并进行解压
ADD ./jdk-8u11-linux-x64.tar.gz /usr/local/java
ADD ./apache-tomcat-8.5.20.tar.gz /usr/local/tomcat
#set environment variable
ENV JAVA_HOME /usr/local/java/jdk1.8.0_11
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
#EXPOSE 映射端口
EXPOSE 8080
#ENTRYPOINT 配置容器启动时,需要执行的文件
ENTRYPOINT /usr/local/tomcat/apache-tomcat-8.5.20/bin/startup.sh && tail -F /usr/local/tomcat/apache-tomcat-8.5.20/logs/catalina.out
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER 929880282@qq.com
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]
#设置基础镜像
FROM centos
MAINTAINER 929880282@qq.com
#复制压缩包到镜像中,并进行解压
ADD ./jdk-8u271-linux-x64.tar.gz /usr/local/java
ADD ./apache-tomcat-8.5.61.tar.gz /usr/local/tomcat
#u
ENV JAVA_HOME /usr/local/java/jdk1.8.0_271
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
#EXPOSE 映射端口
EXPOSE 8080
#ENTRYPOINT 配置容器启动时,需要执行的文件
ENTRYPOINT /usr/local/tomcat/apache-tomcat-8.5.61/bin/startup.sh && tail -F /usr/local/tomcat/apache-tomcat-8.5.61/logs/catalina.out
docker build -t ygang/tomcat:latest .
docker run -d -p 8080:8080 --name ygangtomcat ygang/tomcat:latest