Docker容器化管理技术

Docker容器化

1.Docker简介

1.1什么是虚拟化
	在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如:服务器,网络,内存及存储等,予以抽象,转化后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源.这些资源的新虚拟部分是不受现有资源的架设方式,地域或者物理组态所限制.一般所指的虚拟化资源包括计算能力和资料存储
	在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,对资源进行充分的利用
	虚拟化技术种类很多,例如:软件虚拟化,硬件虚拟化,内存虚拟化,网络虚拟化(vip),桌面虚拟化,服务虚拟化,虚拟机等
1.2什么是Docker
	Docker是一个开源项目,诞生于2013年初,最初dotCloud公司内部的一个业余项目.它基于Google公司推出的go语言实现.项目后来加入Linux基金会,遵从了Apache2.0协议,项目代码在GitHub上进行维护
	Docker自开源后受到广泛的关注和讨论,以至于dotCloud公司后来都改名为Docker Inc.Redhat已经在其RHEL6.5中集中支持Docker;GooGle也在其PaaS产品中广泛的应用
	Docker项目的目标是实现轻量级的操作系统细腻化解决方案.Docker的基础是Linux容器(LXC)等技术
	在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便.用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单
1.3为什么选择Docker
1.上手快
	用户只需要几分钟,就可以把自己的程序Docker化,Docker依赖于"写时复制"(copy-on-write)模型,使修改应用程序也非常的迅速,可以说是"随心所欲,代码即改"的境界
	随后,就可以创建容器来运行应用程序了大多数的Docker容器只需要不到1秒中既可以启动,由于取出了管理程序的开销Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统的资源
2.职责的逻辑分类
	使用Docker,是开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器.Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性.从而降低那种"开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)"
3.快速高效的开发生命周期
	Docker的目标之一就是缩短代码从开发,测试到部署,上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作.(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子一件一件的取)
4.鼓励使用面向服务的架构
	Docker还鼓励面向服务的体系结构和微服务架构.Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或服务器都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得简单,同时也提高了程序的内省性(当然可以在一个容器中运行多个程序)
1.4.容器与虚拟机比较

下面的图片比较了Docker和传统虚拟化方式的不同之处,可见容器时在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面上实现

与传统的虚拟机相比,Docker优势体现为启动速度快,占用体积小
1.5Docker组件
1.5.1Docker服务器与客户端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ddTw5Fks-1589866873351)(C:\Users\One\AppData\Roaming\Typora\typora-user-images\1568015934951.png)]

Docker是一个客户端-服务器(C/S)架构程序.Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果.Docker提供了一个命令行工具Docker以及一整套RESTful API你可以在同一台宿主句上运行Docker守进程和客户端,也可以从本地的Docker客户端里连接到运行在另一台宿主机上的远程Docker守护进程

1.5.2 Docker镜像与容器
镜像是构建Docker的基石.用户基于镜像来运行自己的容器.镜像也是Docker生命周期中的"构建部分".镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步的来构建
	例如:
		添加一个文件
		执行一个命令
		打开一个窗口
	也可以将镜像当做容器的"源代码".镜像体积很小,非常"便携",易于分享,存储和更细
	Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放到容器即可.容器时基于镜像系统启动起来的,容器中可以运行一个或者多个线程.我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段.容器基于镜像启动,一旦容器启动完成后我们就可以登录到容器中安装自己需要的软件或者服务
	所以Docker容器就是
		一个镜像格式
		一些列标准操作
		一个执行环境
	Docker借鉴了标准集装箱的概念,标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件
	和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管事web服务器还是数据库,或者是应用程序服务器什么的.所有的容器都按照相同的方式将内容"装载"进去
	Docker也不关心你要把容器运到何方,我们可以在自己的笔记本中构建容器,上传到Registry然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中,像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量使用
1.5.3Registry注册中心
Docker用Registry来保存用户构建的镜像.Registry分为公布和私有两种.Docker公司运营公共的Registry叫做Docker Hub.用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以构建私有的Registry)
	https://hub.docker

2.Docker安装部署

·目前CentOS仅发行版本中的内核支持Docker
·Docker运行在Centos 7上,要求系统为64位,系统内核为3.10以上
·Docker运行在Centos -6.5或者更高的版本的Centos上,要求系统为64位,系统内核版本为2.6.32-431或者更高的版本
·查看自己的内核
·uname -a命令用于打印当前系统相关信息(内核版本号,硬件架构,主机名称和操作系统类型等)
 uname -a,--all 显示所有
 -s,--kernel-name 输出内核名称
 -n,--nodename 输出网络节点上的主机名
 -r,--kernel-release 输出内核发行号
 -v,--kernel-version 输出内核版本号
 -m,--machine 输出主机的硬件架构名称
 -o,--operating-system 输出操作系统名称

2.1.Docker架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rrBkV9pG-1589866873353)(C:\Users\One\AppData\Roaming\Typora\typora-user-images\1568790672366.png)]

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器
Docker 容器通过Docker镜像来创建
容器与镜像的关系类似于面向对象编程中的对象与类
Docekr  面向对象
容器		对象
镜像		类

2.2.Docker三大核心组件
·镜像(image)
	Docker镜像(image)就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器
·容器(Container)
	-Docker利用容器(Container)独立运行的一个或一组应用.容器时用镜像创建的运行实例
	-它可以被启动,开始,停止,删除.每个容器都是相互隔离的,保证安全的平台
	-可以把容器看作是一个简易版的Linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的运行程序
	-容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面的那一层是可读可写的
·仓库(repository)
	-仓库(Repository)是集中存放镜像文件的场所
	-仓库(Repisitory)和仓库注册服务器(Registry)是有区别的.仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)
	-最大的公开仓库是 Docker Hub(https://hub.docker.com/),类似Git Hub
	-存放了数量庞大的镜像提供用户下载.国内的公开仓库包括阿里云,网易云等
	
2.3.Docker安装步骤
1.确认Centos7版本
	cat /etc/redhat-release
2.安装配置环境
	yum -y install gcc gcc-c++
3.安装Docker
	#注:安装前查看有没有其他版本的Docker 有就移除
	yum remove docker\
	docker-client\
	docker-client-latest\
	docker-common\
	docker-lastest\
	docker-lastest-logrotate\
	docker-logrotate\
	docker-engine
	#安装新Docker依赖包
	yum install -y yum-utils device-mapper-persistent-data lvm2
4.设置stable镜像仓库(阿里云镜像)
	yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.更新yum软件包索引
	yum makecache fast
6.安装最新版本的Docker CE和containerd
	yum -y install docker-ce docker-ce-cli containerd.io
#主机上的图像,容器,卷或自定义配置文件不会自动删除.要删除所有图像,容器和卷
	yum remove docker-ce
	rm -rf /var/lib/docekr
7.启动Docker
	systemctl start docker

2.3配置阿里镜像加速器
1>.登录:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2>.点击左下角"镜像加速器"
3>.在linux中操作
	sudo mkdir -p /etc/docker
	sudo tee /etc/docker/daemon.json <<-'EOF'
	{
  	"registry-mirrors": ["https://59fygmkm.mirror.aliyuncs.com"]
	}
	EOF
	sudo systemctl daemon-reload
	sudo systemctl restart docker

3.容器生命周期管理

3.1.docker run
创建一个新的容器并运行一个命令、
	docker run [OPTIONS] image [COMMAND][ARG...]
OPTIONS说明:
	·-a stdin:指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR
	·-d:后台运行容器,并且返回容器的id
	·-i:以交互模式运行容器,通常与-t同时使用
	·-t:为容器重新分配一个伪输入终端,通常与-i同时使用
	·--name="nginx-lb":为容器指定一个名称
	·-dns 8.8.8.8:指定容器使用的DNS服务器,默认和宿主机一致
	·-dns-search example.com:指定容器DN搜索域名,默认与宿主机一致
	·-h "mars":指定容器的hostname
	·-e username="ritchie":设置环境变量
	·--env-file=[]:从指定的文件读入环境变量
	·--cpuset="0-2"or --cpuset="0,1,2":绑定容器到指定的CPU运行
	·-m:设置容器使用内存最大值
	·--net="birdge":指定容器的网络连接类型,支持birdge/host/none/container
	·--link=[]:添加链接到另一个容器
	·--expose=[]:开放一个端口或一组端口
	
	使用Docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx
		docker run --name=mynginx -d nginx:latest
	使用镜像nginx:lastest以后台模式启动一个容器,并将容器的80端口映射到主机的随机端口
		docker run -P -d nginx:latest
	使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data
		docker run -p 80:80 -v /data:/data -d nginx:latest
	使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令
		docker run -it nginx:latest /bin/bashroot@b8573233d675:/#
		
3.2.docker kill
杀掉一个运行中的容器
	docker kill [OPTIONS]CONTAINER [CONTAINER..]
	·-s:向容器发送一个信号
杀掉运行中的容器mynginx
	docker kill -s kill mynginx 
3.3.docker rm
删除一个或者多个容器
	docker rm [OPTIONS] CONTAINER[CONTAINER....]
	·-f:通过SIGKILL信号强制删除一个运行中的容器
	·-l:移除容器间的网络连接,而非容器本身
	·-v:-v删除与容器关联的卷
	1.强制删除db01,db02
		docker rm -f db01 db02
	2.移除容器nginx01对容器db01的连接,连接名db
		docker rm -l db
	3.删除容器nginx01,并删除容器挂载的数据卷
		docker rm -v nginx01
	
3.4.docker pause/unpause
暂停/恢复 容器中的所有进程
	1.暂停数据库容器db01提供服务
		docker pause db01
	2.恢复数据库容器db01提供服务
		docker unpause db01
3.5.docker create
创建一个新的容器但是不启动
	docker create [OPTIONS] IMAGE [COMMAND][ARG...]
3.6.docker exec
在运行中的容器执行命令
	docker exec [OPTIONS] CONTAINER COMMAND [ARG..]
	·-d:分离模式:在后台运行
	·-i:即时没有附加也保持STDIN打开
	·-t:分配一个伪终端

4.容器操作

4.1.docker ps
 docker ps [OPTIONS]
 	· -a:显示所有的容器,包括没有运行的
 	· -f:根据条件过滤显示的内容
 	· --format:指定返回值的模板文件
 	· -l:显示最近创建的容器
 	· -n:列出最近创建的n个容器
 	· --no-trunc:不截断输出
 	· -q:静默模式,显示容器编号
 	· -s:显示总的文件大小
 1.相关操作
 	#列出所有的正在运行的容器信息
 		docker ps
 	#列出最近创建的5个容器信息
 		docker ps -n 5
 	#列出所有创建的容器id
 		docker ps -a -q
 		
4.2 docker inspect
获取容器/镜像的元数据
	docker inspect [OPTIONS]NAME|ID[NAME|ID...]
	· -f:指定返回值的模板文件
	· -s:显示总的文件大小
	· --type:为指定类型返回JSON
	
	查看mysql的元数据信息
	docker inspect mysql:5.7
	
4.3 docker top
查看容器中运行的进程信息
	docker top [OPTIONS] CONTAINER [ps OPTIONS]
容器运行时不一定有/bin/bash终端来交互来执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程
	docker top mysql
4.4.docker attach
连接到正在运行中的容器
	docker attach [OPTIONS] CONTAINER
4.5.docker events
从服务器上获取实时事件
	docker events [OPTIONS]
	#案例
	#显示docker 2019年6月1后的所有事件
	docker events --since="1559399759000"
	#显示docker 镜像为mysql:5.6 2019你那6月1日后的相关事件
	docker events -f "image"="mysql:5.7" --since="1559399759000"
		· -f:根据条件过滤事件
		· --since:从指定的时间戳后显示所有事件
		· --until:流水事件显示到指定的时间为止
4.6.docker logs
docker logs [OPTIONS] CONTAINER
#跟踪查看容器mynginx的日志输出
docker logs -f 2ec7b66d9617
	· -f:跟踪日志输出
	· --since:显示某个开始时间的所有日志
	· -t:显示时间戳
	· --tail:仅列出最新N条容器日志
4.7.docker wait
阻塞运行直到容器停止,然后打印出它的退出代码

docker wait[OPTIONS] CONTAINER [CONTAINER...]
#逐渐停止
docker wait CONTAINER

4.8.docker export
将文件系统作为一个tar归档导出到STDOUT
	docker export [OPTIONS] CONTAINER
	#实例
	docker export -o mysql -'date +%Y%m%d'.tar a404c6c174a2
	· -o:将输入内容写到文件
	
4.9. docker port
列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT面向公众的端口
	docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
	#实例
	docker port 容器ID

5.容器rootfs命令

5.1.docker commit
从容器创建一个新的镜像
	docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
	#提交
	docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mysql:v1
	· -a:提交镜像的作者
	· -c:使用Dokcerfile指令来创建镜像
	· -m:提交时的说明文字
	· -p:在commit时,将容器暂停
	
5.2.docker cp
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

docker cp [OPTIONS]SRC_PATH|- CONTAINER:DESC_PATH
#将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中
docker cp 96f7f14e99ab:/www/tmp/
#将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
docker cp /www/runoob 96f7f14eqqab:/www/
#将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www
docker cp /www/runoob 96f7f14e99ab:/www
	· -L:保持源目标中的链接
5.3.docker diff
检查容器里文件结构的更改
	docker diff[OPTIONS] CONTAINER
	#查看容器mysql的文件结构更改
	docker diff mysql

6.镜像仓库

6.1.dokcer login/logout
登录/登出到一个Docker镜像仓库,如果没有指定镜像仓库的地址,默认为官方仓库Docker Hub
	docker login [OPTIONS] [SERVER]
	docker logout [OPTIONS] [SERVER]
	#登录到Docker Hub
	dokcer login -u 用户名 -p 密码
	3登出Docker Hub
	docker logout
	· -u:登录的用户名
	· -p:登录用的密码
	
6.2.docker pull
从镜像仓库中拉取或者更新指定镜像
	docker pull [OPTIONS] NAME[:TAG|@DIGEST]
	#从Docker Hub下载java最新版的镜像
	docker pull java
	#从Dokcer Hub下载REPOSITORY为java的所有镜像
	docker pull  -a java
	· -a:拉取所有tagged镜像
	· --disable-content-trust:忽略镜像的校检默认是开启的
6.3.docker push
将本地的镜像上传到镜像仓库,要先登录到镜像仓库
	docker push [OPTIONS] NAME[:TAG]
	· --disable-content-trust:忽略镜像的校验,默认是开启的
6.4.docker search
从Docker Hub查找镜像
	docker search [OPTIONS] TERM
	#从Docker Hub查找所有镜像包含java,并且收藏数大于10的镜像
	docker search -s 10 java
	
	· --automated:只列出automated build类型的镜像
	· --no-trunc:显示完整的镜像描述
	· -s:列出收藏数不小于指定值的镜像
	

7.本地镜像管理

7.1.docker images
列出本地镜像
	docker images [OPTIONS] [REPOSITORY[:TAG]]
	
	· -a:列出本地所有的镜像(包含中间映像层,默认情况下,过滤掉中间映像层)
	· --digests:显示镜像的摘要信息
	· -f:显示满足条件的镜像
	· --format:指定返回值的模板文件
	· --no-trunc:显示完整的镜像信息
	· -q:只显示镜像id
显示:
	· PEPOSITORY:镜像的仓库源
	· TAG:镜像标签(版本)
	· IMAGE ID:镜像ID
	· CREATED :创建时间(在docker hub)
	· SEZE:该镜像的大小
7.2.docker rmi
删除本地一个或多少镜像
	docker rmi [OPTIONS] IMAGE [IMAGE...]
	#删除正在运行的docker 
	docker rm -f $(docker ps -q)
	
	· -f:强制删除
	· --no-prune:不移除该镜像的过程镜像,默认移除
	
7.3.docker tag
标记本地镜像,将其归入某一仓库
	docker tag[OPTIONS] IMAGE[:TAG][REGISTRYHOST/][USERNAME/]NAME [:TAG]
7.4.docker build
使用Dockerfile创建镜像
	docker build [选项]<上下文路径/URL/->
	
	· --build-arg=[]:设置镜像创建时的变量
	· --cpu-shares:设置cpu使用权重
	· --cpu-period:限制CPU CFS周期
	· --cpu-quota:限制CPU CFS配额
	· --cpuset-cpus:指定使用的CPU Id
	· --cpuset-mems:指定使用的内存id
	· --disable-content-trust:忽略校验,默认开启
	· -f:指定要使用的Dockerfile路径
	· --force-rm:设置镜像过程中删除中间容器
	· --isolation:使用容器隔离技术
	· --label=[]:设置镜像使用的元数据
	· -m:设置内存最大值
	· --memory-swap:设置Swap的最大值为内存+swap,"-1"表示不限swap
	· --no-cache:创建镜像的过程中不适用缓存
	· --pull:尝试去更新镜像的版本
	· -q:安静模式,成功后只输出镜像id
	· --rm:设置镜像成功后删除中间容器
	· --shm-size:设置/dev/shm的大小,默认值为64M
	· --ulimit:Ulimit配置
7.5.docker history
查看镜像的创建历史
	docker history [OPTIONS] IMAGE
		· -H:以可读写的格式打印镜像大小和日期,默认为true
		· --no-trunc:显示完整的提交记录
		· -q:仅列出提交ID
7.6.docker save
将制定镜像保存成tar归档文件
	docker save [OPTIONS] IMAGE [IMAGE...]
	#
	docker svae -o my_ubuntu_v3.tar Andy/Ubuntu:v3
	· -o:输出到的文件
7.7.docker import
从归档文件中创建镜像
	dokcer import [OPTIONS] file|URL|-[REPOSITORY[:TAG]]
	· -c:应用docker指令创建镜像
	· -m:提交时的说明文字
7.8.docker info

​ 显示docker 系统信息,包括镜像和容器数

7.9.docker version

​ 显示docker 版本信息

​ docker verson[OPTIONS] · -f:指定返回值的模板文件

8.Docker实战案例

8.1.HelloWorld实例
#启动Docker  systemctl start  docker 
	dokcer run hell-world
8.2.Tomcat实例
#拉取tomcat镜像
docker pull tomcat:7-jre7
#创建容器  -v:目录挂载
docker run -id --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/webapps tomcat:7-jre7
#部署web应用   alt+p
sftp> put D:/VMware_GX/VueJs_Demo.war
#把war包转移到webapps
mv /home/mysftp/VueJs_Demo.war /usr/local/webapps
#访问tomcat

8.3.Nginx实例
#拉取镜像
	docker pull nginx
#创建nginx容器
docker run -di --name=mynginx -p 80:80 nginx
#使用SFTP上传文件
sftp> put -r D:/VMware_GX/Admin_LTE
#找到nginx的目录
cd /etc/nginx
#查看配置文件
cat nginx.conf
#进入并且查看default.conf
cd /etc/nginx/conf.d/ cat default.conf
#找到nginx存放主页的地方
/usr/share/nginx/html# dir
	50x.html  index.html
#把要替换的文件夹改名
mv Admin_LTE html
#覆盖原来的html页面
docker cp html mynginx:/usr/share/nginx/
8.4.Redis实例
#拉取redis镜像
docker pull redis
#创建redis容器
docker run -di --name=myredis -p 6379:6379 redis
#通过本地的redis-cli.exe来访问当前docker中的redis 
 redis-cli -h192.168.180.132

9.迁移与备份

9.1.容器保存为镜像
可以通过一下命令将容器保存为镜像
docker commit mynginx mynginx_i
9.2.镜像备份
可以通过以下命令将镜像保存为tar文件
docker save -o mynginx.tar mynginx_i
9.3.镜像的恢复与迁移
可以先删除掉mynginx_i镜像,然后执行命令进行恢复
docker load -i mynginx.tar


· -i输入的的文件
执行后再次查看镜像,就恢复了

10.Dockerfile

10.1.什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像
	1.对于开发人员来说,可以为开发团队提供一个完全一致的开发环境
	2.对于测试人员来说,可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作
	3.对于运维人员来说:在部署时,可以实现应用的无缝移植
	
10.2.常用命令
1>.FROM image_name:tag
	定义了使用哪个基础镜像启动构建流程
2>.MAINTAINER user_name
	声明镜像的作者
3>.EVN key value
	设置环境变量可以写多条
4>.RUN command
	是Dockerfile的核心部分(同样是可以写多条)
5>.ADD source_dir/file dest_dir/file
	将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
6>.COPY source dir/file dest_dir/file
	和ADD相似但是如果有压缩文件并不能解压
7>.WORKDIR path_dir
	设置工作目录
	
10.3.使用脚本创建镜像
#创建一个目录
mkdir -p /usr/local/dockerjdk8
#使用SFTP把jdk8的压缩包上传
sftp> put D:\VMware\jdk-8u144-linux-x64.tar.gz
#把上传的压缩包 移动到上面创建的目录
mv jdk-8u144-linux-x64.tar.gz /usr/local/dockerjdk8
#进入目录
cd /usr/local/docker1.8/
#编写Dockerfile文件
vi Dockerfile
#编写内容如下
FROM centos:7
MAINTAINER xuwenxiao
RUN mkdir /usr/local/java
ADD jdk-8u144-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME-/usr/local/java/jdk1.8.0_144
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASS_PATH
ENV PATH $JAVA_HOME/bin:$PATH
#构建 .代表当前文件夹
docker build -t='jdk1.8' . 
#查看镜像 
docker images
11.Docker的私有仓库
11.1.Docker私有仓库的配置和搭建
1>.拉取私有仓库镜像
	docker pull registry
2>.启动私有仓库容器
 	docker run -di --name=registry -p 5000:500 registry
3>.打开浏览器输入地址192.168.180.132:500/v2/_catalog看到{"repositories":[]}表示私有仓库搭建成功并且内容为空
4>.修改daemon.json
	vi /etc/docker/dameon.json
	添加一下内容并保存退出
	{"insecure-registries":[192.168.180.132:5000]}
5>.重启docker服务
	systemctl restart  docker

11.2.镜像上传到私有仓库
1>.标记此镜像为私有仓库的镜像
	docker tag jdk1.8 192.168.180.132:5000/jdk1.8
2>上传标记的镜像
	docker push 192.168.180.132:5000/jdk1.8

A_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar: J R E H O M E / l i b : JRE_HOME/lib: CLASS_PATH
ENV PATH J A V A H O M E / b i n : JAVA_HOME/bin: PATH
#构建 .代表当前文件夹 docker build -t=‘jdk1.8’ .
#查看镜像 docker images

11.1.Docker私有仓库的配置和搭建

1>.拉取私有仓库镜像
	docker pull registry
2>.启动私有仓库容器
 	docker run -di --name=registry -p 5000:500 registry
3>.打开浏览器输入地址192.168.180.132:500/v2/_catalog看到{"repositories":[]}表示私有仓库搭建成功并且内容为空
4>.修改daemon.json
	vi /etc/docker/dameon.json
	添加一下内容并保存退出
	{"insecure-registries":[192.168.180.132:5000]}
5>.重启docker服务
	systemctl restart  docker

11.2.镜像上传到私有仓库

1>.标记此镜像为私有仓库的镜像 docker tag jdk1.8 192.168.180.132:5000/jdk1.8
2>上传标记的镜像 docker push 192.168.180.132:5000/jdk1.8

猜你喜欢

转载自blog.csdn.net/qq_43565087/article/details/106212852
今日推荐