1. 首页 > 互联网 >

docker修改镜像名称(docker镜像修改名字)

什么是Docker镜像,与传统的系统有何区别?

区别于传统的操作系统,它能建构在之上,又区别于虚拟机需要完全隔离系统软硬件的轻量级系统,利于服务的开发部署与迁移

云计算中什么用来保存镜像?

库(Registry)Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub 提供了庞大的镜像集合供使用。

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。提供了庞大的镜像集合供使用。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像。

如何设置Docker容器中Java应用的内存限制?

如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递 JAVA_OPTS 环境变量来轻松地设置JVM的内存参数。比如,对于官方Tomcat 镜像,我们可以执行下面命令来启动一个最大内存为512M的tomcat实例

docker run --rm -e JAVA_OPTS='-Xmx512m' tomcat:8

在日志中,我们可以清楚地发现设置已经生效 “Command line argument: -Xmx512m”

02-Apr-2016 12 26.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.32

02-Apr-2016 12 26.974 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Feb 2 2016 19 53 UTC

02-Apr-2016 12 26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.32.0

02-Apr-2016 12 26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux

02-Apr-2016 12 26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:4.1.19-boot2docker

02-Apr-2016 12 26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64

02-Apr-2016 12 26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-7-openjdk-amd64/jre

02-Apr-2016 12 26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_95-b00

02-Apr-2016 12 26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:Oracle Corporation

02-Apr-2016 12 26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat

02-Apr-2016 12 26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat

02-Apr-2016 12 26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

02-Apr-2016 12 26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

02-Apr-2016 12 26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx512m

...

然而在Docker集群上部署运行Java容器应用的时候,仅仅对JVM的heap参数设置是不够的,我们还需要对Docker容器的内存资源进行限制:

1. 限制容器使用的内存的最大量,防止对系统或其他应用造成伤害

2. 能够将Docker容器调度到拥有足够空余的内存的节点,从而保证应用的所需运行资源

关于容器的资源分配约束,Docker提供了相应的启动参数

对内存而言,最基本的就是通过 -m参数来约束容器使用内存的大小

-m, --memory=""

Memory limit (format: <number>[<unit>]). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.

那么问题就来了,为了正确设置Docker容器内存的大小,难道我们需要同时传递容器的内存限制和JAVA_OPTS环境变量吗? 如下所示:

docker run --rm -m 512m -e JAVA_OPTS='-Xmx512m' tomcat:8

这个方法有两个问题

1. 需要管理员保证容器内存和JVM内存设置匹配,否则可能引发错误

2. 当对容器内存限制调整时,环境变量也需要重新设定,这就需要重建一个新的容器

docker修改镜像名称(docker镜像修改名字)docker修改镜像名称(docker镜像修改名字)


是否有一个方法,可以让容器内部的JVM自动适配容器的内存限制?这样可以采用更加统一的方法来进行资源管理,简化配置工作。

大家知道Docker是通过CGroup来实现资源约束的,自从1.7版本之后,Docker把容器的local cgroups以只读方式挂载到容器内部的文件系统上,这样我们就可以在容器内部,通过cgroups信息来获取系统对当前容器的资源限制了。

我创建了一个示例镜像 registry.aliyuncs.com/denverdino/tomcat:8-autoheap

,其源代码可以从Github 获得。它基于Docker官方Tomcat镜像创建,它的启动脚本会检查CGroup中内存限置,并计算JVM最大Heap size来传递给Tomcat。其代码如下

#!/bin/bash

limit_in_bytes=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)

# If not default limit_in_bytes in cgroup

if [ "$limit_in_bytes" -ne "9223372036854771712" ]

then

limit_in_megabytes=$(expr $limit_in_bytes \/ 1048576)

heap_size=$(expr $limit_in_megabytes - $RESERVED_MEGABYTES)

export JAVA_OPTS="-Xmx${heap_size}m $JAVA_OPTS"

echo JAVA_OPTS=$JAVA_OPTS

fi

exec catalina.sh run

说明:

为了监控,故障排查等场景,我们预留了部分内存(缺省64M),其余容器内存我们都分配给JVM的堆。

这里没有对边界情况做进一步处理。在生产系统中需要根据情况做相应的设定,比如最大的堆大小等等。

现在我们启动一个tomcat运行在512兆的容器中

docker run -d --name test -m 512m registry.aliyuncs.com/denverdino/tomcat:8-autoheap

通过下列命令,从日志中我们可以检测到相应的JVM参数已经被设置成 448MB (512-64)

docker logs test

...

02-Apr-2016 14 09.870 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx448m

...

我们也可以方便的调整Java应用的内存.

Docker 1.10提供了对容器资源限制的动态修改能力。但是由于JVM无法感知容器资源修改,我们依然需要重启tomcat来变更JVM的内存设置,例如,我们可以通过下面命令把容器内存限制调整到1GB

docker update -m 1024m test

docker restart test

docker修改镜像名称(docker镜像修改名字)docker修改镜像名称(docker镜像修改名字)


再次检查日志,相应的JVM Heap Size最大值已被设置为960MB

docker logs test

...

02-Apr-2016 14 07.644 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx960m



docker怎么删除某个容器?

删除容器需要执行以下操作:

1. 列出所有容器

docker ps --运行中容器

docker ps -a --运行中容器 + 已退出容器

2. 停止指定或所有容器,如果不先停止而直接删除,会提示报错:

docker stop 容器ID

docker stop $(docker ps -a -q)

docker修改镜像名称(docker镜像修改名字)docker修改镜像名称(docker镜像修改名字)


3. 删除指定或所有容器:

docker rm 容器ID

docker rm $(docker ps -a -q)

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有未打 dangling 标签的镜像 docker rmi $(docker images -q -f dangling=true) 删除所有镜像 docker rmi $(docker images -q)

如何,打包,创建,镜像,和,运行docker容器,及,常用,命令?

你好,

1.安装在开始前,我们首先得确保在主机中已经安装了。这里,我运行的是7主机,我们将运行yum管理器和下面的命令来安装。##创建file现在,守护进程已经在运行中了,我们现在准备创建自己的容器。我们要创建一个file,在其中我们要输入需要的配置来创建一个可以工作的容器。为了运行镜像我们需要使用最新版本的。要创建镜像,我们需要用文本编辑器创建一个名为file的文件。#

docker为什么可以拉取镜像?

镜像就是一些状态和行为的记录,

为什么可以拉取,个人简单理解,拉取就是一个下载过程,拉下来,可以按照预定的脚本通过一些行为去恢复保存的状态。

网络通,就能下载。

如何使用docker部署ngrok服务端?

可以通过 搜索一下相关镜像,如果自己搭建,通过创建一个镜像,run之后进入编辑运行起来的这个容器,安装好之后把你的这个容器保存,记住映射端口,下次就行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至website.service08@gmail.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息