从DOCKER到KUBERNETES(2)DOCKER镜像
1.什么是镜像
-
镜像是一个模板
-
镜像采用分层的文件系统
-
镜像是容器运行的基石
-
可以从镜像仓库中进行拉取(公有,私有 harbor)
2.管理镜像
#官方仓库搜索镜像 docker search imageName #拉取镜像,Tag为镜像的版本号 docker pull imageName:Tag #上传镜像到仓库 docker push imageName:Tag #列出本地全部镜像 docker images #支持通配符,根据通配符列出相关镜像 docker images imageName* #imageName镜像名 例如 docker images mysql* 列出所有名称以mysql开头的镜像 #列出镜像的详细信息 docker inspect imageName:Tag 或 imageId #删除镜像 docker rmi imageName:Tag 或 imageId #如果镜像有关联的容器在运行,不能删除 docker rmi -f imageName:Tag 或 imageId #强制删除镜像 ,如果有多个镜像,采用空格进行分隔 #由镜像创建容器 docker run --name containerName -p hostPort:containerPort -d imageName:Tag #--name : 运行容器的名字 #hostPort: 宿主机端口 #containerPort: 容器端口 #-d 后台运行该容器 #查看容器运行状态 docker ps #查看运行中的容器状态 docker ps -a #查看全部容器状态(包括已经死亡的容器)
3.构建镜像
(1)容器转镜像
#案例: 使用docker部署一个tomcat容器 #第一步、运行容器 docker run --name tomcat -p 8080:8080 -d tomcat:8 #第二步、进入容器 docker exec -it tomcat /bin/bash #-it 给容器提供一伪终端 #第三步、修改容器内容 cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/ mkdir -p /usr/local/tomcat/webapps/mydemo/ cd /usr/local/tomcat/webapps/mydemo/ echo "<h1>This is MyDemo</h1>" > index.html exit 退出容器的伪终端 #第四步、测试新增的index.html能否访问 curl http://hostIp:8080/mydemo/index.html #第五步、将容器转为镜像 docker commit tomcat mydemo:0.1 #从tomcat容器导出mydemo镜像 #第六步、查看导出的镜像 docker images #第七步、登录docker hub,将容器推送到仓库 docker login #登录 docker tag mydemo:0.1 dockerHubId/mydemo:0.1 #镜像重命名 docker push dockerHubId/mydemo:0.1 #镜像上传到仓库
(2)文件生成镜像
#案例:构建一个含有Mydemo项目的 #第一步、创建mydemo目录 mkdir -p /root/dockerApp/mydemo/ cd /root/dockerApp/mydemo/ #第二步、编辑dockerfile文件 cat mydemoFile #基于tomcat8镜像 FROM tomcat:8 #在镜像内部修改内容 RUN 表示在镜像内部运行的命令 RUN cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/ RUN mkdir -p /usr/local/tomcat/webapps/mydemo/ RUN echo "<h1>This is MyDemo</h1>" > /usr/local/tomcat/webapps/mydemo/index.html #第三步、使用mydemoFile文件构架镜像 docker build -f mydemoFile -t dockerHubId/mydemo:0.2 . #构建目标镜像mydemo:0.2,注意最后有个点符号 #第四步、查看本地镜像 docker images #第五步、镜像上传到仓库 docker push dockerHubId/mydemo:0.2
(3)常用的构建镜像关键词
#基于目标镜像 FROM imageName:Tag #镜像维护者信息 MAINTAINER authName authorEmail #维护者姓名 邮箱 #将文件复制到镜像内的指定路径 COPY file imagePath #设置镜像的环境变量 ENV envName envValue #envName:环境变量名 envValue: 环境变量值 #镜像暴露的端口号 EXPOSE portNumber ##启动容器内目标服务 CMD ["command1","command2",...] #例如 CMD ["catalina.sh","run"] 启动tomcat服务