3、镜像

镜像

是一种轻量级、可执行的独立软件包,它包含运行某个软件多需要的所有内容(环境),我们应把应用程序和配置依赖打包好形成一个可交付的运行环境(代码、运行时库、环境变量、配置文件等),这个打包好的运行环境就是image镜像文件

联合文件系统UnionFS

Union文件系统是一个分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到一个虚拟文件系统下。Union文件系统就是Docker镜像的基础。镜像可以通过分层来继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像

Commit

docker commit提交容器副本使之称为一个新的镜像

docker commit -m="提交的描述信息" -a="作者" [containername/id] [imagename]:[tag]

Push

阿里云

1、进入容器镜像服务、个人实例

image-20220303170630074

2、创建命名空间

image-20220303170740741

3、创建镜像仓库,选择本地仓库

image-20220303170932389

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

自定义镜像

自定义构建镜像:Dockerfile

Dockerfile四部分

基础镜像信息

#设置基础镜像
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

Dockerfile的详细命令

执行Dockerfile构建镜像

此命令需要在Dockerfile的目录中执行

#注意!!!后面需要有个点 .
docker build -t [name:tag] .
docker build -t [name:tag] --file dockerFilePath .
-t [name:tag] #指定构建的镜像名字和tag
--file或-f #指定dockerfile文件路径

Dockerfile的示例

构建centosjava8

tar包内部结构

image-20220304205109424

#设置基础镜像
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

构建Tomcat

#设置基础镜像
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

构建Nginx

# 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"]

构建自己的Tomcat

1、Linux中选择一个目录

img

2、创建Dockerfile文件

img

3、编写Dockerfile内容
#设置基础镜像
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
4、执行该文件,构建一个Tomcat镜像出来
5、运行容器
docker run -d -p 8080:8080 --name ygangtomcat ygang/tomcat:latest
6、在浏览器,即可查看效果