如何创建尽可能小的docker创建centos容器容器

([已注销])
(会飞的xrv)
(会飞的xrv)
(会飞的xrv)
(会飞的xrv)
第三方登录:分享创建docker容器的3个小技巧 - CSDN博客
分享创建docker容器的3个小技巧
当你创建一个docker容器,它被分配一个全局惟一的标识符(UUID)。这是为了避免命名冲突和脱离人为干预促进自动化的必不可少的。他们能有效的识别主机和网络的容器。但是,为了人们更容易的区分,无论是在长显示、可读的64字符或简单的、频繁显示的12字符,都可能看起来像 285c9f0f9d3d。
  为了帮助人们,docker也支持容器用一个2个单词的随机生成的名字,并用底线强调,例如:evil_ptolemy。这可以更简单的告诉一个人这是哪个容器,但是随机名字比起UUID不能让人对容器的运行有更多的观察。
  这里有3个技巧可以让你在学习使用容器工作中更容易的实现目标。
  1.当你运行容器的时候为容器命名
  通过添加--name=meaningful_name让docker运行命令,在交互进程中一个evil_ptolomy变的更易识别而且像docker ps输出命令一样。然而这存在局限性。自动容器名称必须唯一后,你不能使用存疑的名称并且服务规模超出一个容器。
  在命令行上或在一个文件:
  docker run --name=meaningful_name
  举例:如果我们基于Nginx基础镜像上运行一个容器,并且像这样开始:
  docker run --name nginx -d nginx
  名称会在运行的容器列表中显示:
  docker ps
  Output
  CONTAINER ID & & & &IMAGE & & & & & & & COMMAND & & & & & & & & &CREATED & & & & & & STATUS & & & & & & &PORTS & & & & & & & &NAMES
  08f333ef7216 & & & &nginx & & & & & & & &nginx -g 'daemon off& & 15 seconds ago & & &Up 14 seconds & & & 80/tcp, 443/tcp & & &nginx
  当docker ps名字在输出中出现并且可以用来管理容器,如果你链接它或在日志文件中它将不会出现在容器的命令提示符中。为了实现这个,你也需要分配一个主机名称。
  2.为容器分配一个主机名
  为主机命令提供的价值就是在容器内设置 /etc/hostname和/etc/hosts。因此,它在命令提示符中出现。它在容器域名服务器中发挥作用,并且有助于在学习阶段设置多个容器。从外部访问容器不容易,但是它会出现在容器的日志文件中,并且当这些文件被写进一个大量独立的主机中,它可以使得更容易辨认容器。
  命令行界面和docker文件:
  docker run --hostname=value OR docker run -h value
  当 --name 和—hostname都对识别容器有作用时,有时候,和命名容器无关。当然了,它是关于在容器进行自身清理后你无需去记住它们。
  3.当退出后自动删除容器
  当排除故障时,它有助于在退出后清除容器。你可以保留日志文件并且研究容器最终状态。有时候,不管怎样,你知道当你运行容器时你不想它闲着。在这种情况下,你可以用—rm标记让它退出时自动删除。这可以更简单的保持清理。
  可是注意,如果你正在使用Docker卷,--rm会移除任何没有特别标记名字的卷。
  命令行界面和docker文件:
  docker run –rm
  当你正在创建镜像并且需要一个运行中的容器时非常有用。你可以看,你不想容器填满你的磁盘而你又不打算使用。
  这三个标记docker run, --name, --hostname和--rm 可以每个都用他们自己的方式,让你在学习docker时更容易的知道是哪个容器。你可以在Working with Docker Containers 中学习更多关于容器和使用docker run命令。
本文已收录于以下专栏:
相关文章推荐
一:容器中运行简单应用程序
使用docker可以在容器中运行应用程序,使用docker run命令即可。比如下面的命令:$ docker run ubun...
运行容器安装好之后,我们就可以来开始Docker之旅了,我们现在的Docker还是一个”裸”Docker,上面没有容器,等一下,什么式容器?所谓容器就是Docker中用来运行应用的,Docker的容器...
转载地址:/a/0914
我们已经看到了运行Consul,增加节点和服务,以及查询这些贱点和服务是多么地简单。在这篇教程中...
说到分布式事务,就会谈到那个经典的”账号转账”问题:2个账号,分布处于2个不同的DB,或者说2个不同的子系统里面,A要扣钱,B要加钱,如何保证原子性?
一般的思路都是通过消息中间件来实现“最终一...
1、掌握标记、复制、粘贴方法
2、组合多行操作命令
3、使用变量和循环语句
4、使用别名 alias
# 1、掌握标记、复制、粘贴方法
# 先在shell控制台中,点击窗口左上角-编辑-标...
这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu):
$ ID=$(docker run ubuntu echo hello worl...
网上查找资料,发现这个稍微详细点,所以先保存着。
文中安装docker使使用‘sudo apt-get install docker.io’,我实验了是不可行的。个人推测作者写错了,应为‘sudo a...
通过:r !命令可以导入命令执行结果
可以导入当前的时间
2.3定义快捷键
利用map定义快捷键
格式:map 快捷键 代表的命令
例如如下定义CTRL+P在行首加#,也就是注释...
今天在点击客户档案导出的时候,发现先是打开了一个新标签,然后新标签自动关掉,弹出一个文件下载确认的窗口,点击确认后开始下载导出的Excel文件。这样的过程感觉窗口闪来闪去,而且可能会给用户带来困惑,是...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Docker详细的基础用法 - HelloWorld
docker安装
debian7安装docker
参考地址:
echo deb http://get.docker.io/ubuntu docker main | sudo tee/etc/apt/sources.list.d/docker.list
sudo apt-key adv --keyserver
--recv-keys
36A1D0F966E92DD21E9
sudo apt-get update
sudo apt-get install -y lxc-docker
#四行命令,Docker就安装好了。下面创建一个ubuntu虚拟系统:
docker pull ubuntu #此处是从官网拉取名为ubuntu的image,也可手动在上搜索想要的镜像。
docker run -i -t ubuntu /bin/bash #创建一个容器,-t是临时终端。
ubuntu12.04、windows、macOS安装docker
参考docker中文文档
docker使用过程实践
2.1 在测试机启动容器,安装ssh
docker run -i -t ubuntu /bin/bash #此方式运行的容器,退出后容器就会
apt-get install openssh-server #安装ssh
#需要修改/etc/sshd/sshd_config文件中内容
PermitRootLogin yes
2.2 启动ssh,容器以后台方式运行
docker run -d -p 50001:22 &容器id& /usr/sbin/sshd-D
#容器id可通过 docker ps-a查看,最上面的为最新的。
2.3 通过ssh连接到容器安装软件
ssh root@127.0.0.1-p 50001
#连上后想装什么就装什么,可使用exit退出容器,但后台还会运行。
2.4 服务安装完成后,停止容器。
docker stop &容器id& #停止运行的容器
2.5 把容器提交生成最新的镜像
docker commit &容器id& debian02 #把这个容器提交生成新的debian02镜像(
该镜像是原始镜像与容器的整合)
2.6 打包镜像
docker save debian02 &/root/debian02.tar #debian02镜像打包
2.7 在另外的机器上导入镜像
docker load & debian02.tar #导入镜像
docker images #查看存在的镜像
2.8 启动容器
docker run -h="redis-test" --name redis-test -d -p 51000:22 -p -p
-p 51005:80 -p
debian02 /etc/rc.local
#此处是我测试机器启动命令,指定主机名与端口映射。
#启动后,后面又装了程序,开机自启动命令可放在/etc/rc.local文件中。
docker容器迁移简单方便,可以任意的拷贝部署,以后再也不怕新部署环境了,一堆依赖装的想死有木有。
关于docker容器的端口映射
由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道
每次重启都来查看容器的IP么?),所以需要每次启动容器时由docker程序自动添
加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:
docker run -h="activemq" --name activemq -d -p 51000:22 -p -p
-p 51005:80-p
debian/base/etc/rc.local
#此处我把mysql,redis,nginx,ssh都进行了映射。
后续对于docker容器的管理,记住容器的名称,如上述名称是activemq,则使用docker stop,start来控制容器进程。
docker stop activemq
docker start activemq
当然,也可以不让docker每次启动容器修改容器的IP地址,参考如下:
docker网络配置:
关于docker容器的多程序开机自动运行
docker容器每次启动时,开机自启动的命令都要在启动容器前指定。如 docker run -I -t debian /bin/bash命令,只会运行/bin/bash程序,其它的程序都不会运行,对于要跑多个程序的容器特别纠结。
多程序开机自动运行方法:可把前面所说的启动命令换成dockerrun -I -t debian /etc/rc.local,在容器中把所有需要开机自的启动命令放在/etc/rc.local中,就可以达到多程序开机自启动了。
后台运行则是:docker run -d -p 50001:22 debian /etc/rc.local。注意:run命令是创建一个新的容器,如果要启动一个曾经运行过的容器,则用命令docker ps -a中找对应的容器ID,然后使用docker start &容器ID&即可。
关于docker容器和镜像的关系
无论容器里做什么操作,写文件,删文件。该容器的基本镜像都不会有任何改变。这是因为Docker从父镜像建立增量镜像,只存储每个容器的更改。因此,如果你有一个300MB的父镜像,如果你在容器中安装了50MB的额外应用或服务,你的容器只有50MB,父镜像还是300MB。但是可以使用Dockfile或commit命令来,把增量镜像和父镜像一起生成一个新的镜像。
commit使用:
docker commit &容器id& &新镜像名称&
Dockfile使用:
root@yangrong:/data# cat Dockerfile
FROMubuntu/testa #这是基础镜像
CMD["/root/start.sh"] #这是启动命令
root@yangrong:/data# docker build -t &新镜像名& ./
docker参数详解
useage of docker
-D 默认false 允许调试模式(debugmode)
-H 默认是unix:///var/run/docker.sock tcp://[host[:port]]来绑定 或者unix://[/path/to/socket]来使用(二进制文件的时候),当主机ip host=[0.0.0.0],(端口)port=[4243] 或者 path=[/var/run/docker.sock]是缺省值,做为默认值来使用
-api-enable-cors 默认flase 允许CORS header远程api
-b 默认是空,附加在已存在的网桥上,如果是用'none'参数,就禁用了容器的网络
-bip 默认是空,使用提供的CIDR(ClasslessInter-Domain Routing-无类型域间选路)标记地址动态创建网桥(dcoker0),和-b参数冲突
-d 默认false 允许进程模式(daemonmode)
-dns 默认是空,使docker使用指定的DNS服务器
-g 默认是"/var/lib/docker":作为docker使用的根路径
-icc 默认true,允许inter-container来通信
-ip 默认"0.0.0.0":绑定容器端口的默认Ip地址
-iptables 默认true 禁用docker添加iptables规则
-mtu 默认1500 : 设置容器网络传输的最大单元(mtu)
-p 默认是/var/run/docker.pid进程pid使用的文件路径
-r 默认是true 重启之前运行的容器
-s 默认是空 ,这个是docker运行是使用一个指定的存储驱动器
-v 默认false 打印版本信息和退出
docker run命令详解
Usage: docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
Run a command in a new container
-a=map[]: 附加标准输入、输出或者错误输出
-c=0: 共享CPU格式(相对重要)
-cidfile="": 将容器的ID标识写入文件
-d=false: 分离模式,在后台运行容器,并且打印出容器ID
-e=[]:设置环境变量
-h="": 容器的主机名称
-i=false: 保持输入流开放即使没有附加输入流
-privileged=false: 给容器扩展的权限
-m="": 内存限制 (格式:&number&&optional unit&, unit单位 = b, k, m or g)
-n=true: 允许镜像使用网络
-p=[]: 匹配镜像内的网络端口号
-rm=false:当容器退出时自动删除容器 (不能跟 -d一起使用)
-t=false: 分配一个伪造的终端输入
-u="": 用户名或者ID
-dns=[]: 自定义容器的DNS服务器
-v=[]: 创建一个挂载绑定:[host-dir]:[container-dir]:[rw|ro].如果容器目录丢失,docker会创建一个新的卷
-volumes-from="": 挂载容器所有的卷
-entrypoint="": 覆盖镜像设置默认的入口点
-w="": 工作目录内的容器
-lxc-conf=[]: 添加自定义-lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
-sig-proxy=true: 代理接收所有进程信号(even in non-tty mode)
-expose=[]: 让你主机没有开放的端口
-link="": 连接到另一个容器(name:alias)
-name="": 分配容器的名称,如果没有指定就会随机生成一个
-P=false: Publish all exposed ports to thehost interfaces 公布所有显示的端口主机接口
docker常用命令总结
docker pull &镜像名:tag& #从官网拉取镜像
docker search &镜像名& #搜索在线可用镜像名
8.1查询容器、镜像、日志
docker top &container& #显示容器内运行的进程
docker images #查询所有的镜像,默认是最近创建的排在最上。
docker ps #查看正在运行的容器
docker ps -l #查看最后退出的容器的ID
docker ps -a #查看所有的容器,包括退出的。
docker logs {容器ID|容器名称} #查询某个容器的所有操作记录。
docker logs -f {容器ID|容器名称} #实时查看容易的操作记录。
8.2删除容器与镜像
docker rm$(docker ps -a -q) #删除所有容器
docker rm &容器名or ID& #删除单个容器
docker rmi &ID& #删除单个镜像
docker rmi$(docker images | grep none | awk '{print $3}' | sort -r)
#删除所有镜像
8.3启动停止容器
docker stop &容器名or ID& #停止某个容器
docker start &容器名or ID& #启动某个容器
docker kill &容器名or ID& #杀掉某个容器
8.4容器迁器
docker export &CONTAINER ID& & /home/export.tar #导出
cat /home/export.tar | sudo docker import - busybox-1-export:latest
# 导入export.tar文件
docker save debian& /home/save.tar #将debian容器打包
docker load& /home/save.tar #在另一台服务器上加载打包文件
save和export的对比参考地址:
http://www.fanli7.net/a/bianchengyuyan/C__/256.html
8.5运行一个新容器
#运行一个新容器,同时为它命名、端口映射。以debian02镜像为例
docker run -h="redis-test" --name redis-test -d -p 51000:22 -p -p
-p 51005:80 -p
debian02 /etc/rc.local
#从container中拷贝文件,当container已经关闭后,在里面的文件还可以拷贝出来。
sudo docker cp 7bb0e258aefe:/etc/debian_version . #把容器中的/etc/debian_version拷贝到当前目录下。
8.6 docker Dockfile镜像制作
root@yangrong:/data# cat Dockerfile
FROM ubuntu/testa #这是基础镜像
CMD ["/root/start.sh"] #这是启动命令
root@yangrong:/data# docker build -t &新镜像名& ./ #生成新的镜像
Dockfile更多参数参考:
点击进入:如何交互式地创建一个Docker容器_服务器应用_Linux公社-Linux系统门户网站
你好,游客
如何交互式地创建一个Docker容器
来源:Linux中国&
作者:Linux
大家好,今天我们来学习如何使用一个docker镜像交互式地创建一个Docker容器。当我们从镜像中启动一个Docker进程,Docker就会获取该镜像及其父镜像,并重复这个过程,直到到达基础镜像。然后联合文件系统(UFS)会在其顶层添加一个读写层。读写层被称之为容器,它包含了一些关于父镜像信息及一些其他的信息,如唯一ID,网络配置和资源限制等。容器是有状态的,其状态可以从 运行态 切换到 退出态。一个处于 运行态的容器包含了在CPU上面运行的进程树,于其它在该主机上运行的进程相隔离,而退出态是指文件系统的状态,并保留了其退出值。你可以使用它来启动,停止和重启一个容器。
Docker技术为IT界带来了巨大的改变,它使得云服务可以用来共享应用和工作流程自动化,使得应用可以用组件快速组合,消除了开发、品质保证、产品环境间的摩擦。在这篇文章中,我们将会建立环境,然后用Apache网络服务器提供一个网站服务。
这是一个快速且容易的教程,讨论我们怎样使用交互的shell,以交互的方式来创建一个容器。
1. 运行一个Docker实例
Docker首先会尝试从本地取得并运行所需的镜像,如果在本地主机上没有发现,它就会从拉取。这里,我们将会拉取镜像并在 Docker 容器中创建一个实例,并连接到它的 tty 上的bash shell。
# docker run -i -t fedora bash
2.安装Apache网络服务器
现在,在我们的Fedora基本镜像实例准备好后,我们将会开始交互式地安装Apache网络服务器,而不是为它创建Dockerfile。为了做到这点,我们需要在终端或者shell运行以下命令。
# yum update
# yum install httpd
退出容器的 tty。
3.保存镜像
现在,我们要去保存在Fedora实例里做的修改。要做到这个,我们首先需要知道实例的容器ID。而为了得到ID,我们又需要运行以下命令(LCTT 译注:在容器外执行该命令)。
# docker ps -a
然后,我们会保存这些改变为一个新的镜像,请运行以下命令。
# docker commit cfe fedora-httpd
这里,修改已经通过使用容器ID保存起来了,镜像名字叫fedora-httpd。为了确认新的镜像是否在运行,我们将运行以下命令。
# docker images
4. 添加内容到新的镜像
我们自己新的Fedora Apache镜像正成功的运行,现在我们想添加一些我们网站的网页内容到Apache网络服务器,使得网站能够开箱即用。为做到这点,我们需要创建一个新的Dockerfile,它会处理从复制网页内容到启用80端口的所有操作。要达到这样的目的,我们需要使用我们最喜欢的文本编辑器创建Dockerfile文件,像下面演示的一样。
# nano Dockerfile
现在,我们需要添加以下的命令行到文件中。
FROM fedora-httpd
ADD mysite.tar /tmp/
RUN mv /tmp/mysite/* /var/www/html
ENTRYPOINT [ "/usr/sbin/httpd" ]
CMD [ "-D", "FOREGROUND" ]
这里,上述的Dockerfile中,放在mysite.tar里的网页内容会自动解压到/tmp/文件夹里。然后,整个站点会被移动到Apache的网页根目录/var/www/html/,命令expose 80会打开80端口,这样网站就能正常访问了。其次,入口点放在了/usr/sbin/https里面,保证Apache服务器能够执行。
5. 构建并运行一个容器 
现在,我们要用刚刚创建的Dockerfile创建我们的容器,以便将我们的网站添加到上面。为做到这,我们需要运行以下命令。
# docker build -rm -t mysite .
建立好我们的新容器后,我们需要要用下面的命令来运行容器。
# docker run -d -P mysite
最后,我们已经成功的以交互式的方式建立了一个Docker容器。在本节方法中,我们是直接通过交互的shell命令建立我们的容器和镜像。在建立与配置镜像与容器时,这种方法十分简单且快速。如果你有任何问题,建议和反馈,请在下方的评论框里写下来,以便我们可以提升或者更新我们的文章。谢谢!祝生活快乐 :-)
Docker安装应用(CentOS 6.5_x64) &
在 Docker 中使用 MySQL
在 Trusty 14.04 (LTS) (64-bit)安装Docker &
Docker安装应用(CentOS 6.5_x64) &
Ubuntu 14.04安装Docker& &
阿里云CentOS 6.5 模板上安装 Docker &
Docker 的详细介绍:Docker 的下载地址:
作者: 译者: 校对:
原创翻译, 荣誉推出
本文永久更新链接地址:
相关资讯 & & &
& (昨 07:33)
& (11月07日)
& (昨 07:35)
& (11月07日)
& (10月29日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 swift如何创建容器 的文章

 

随机推荐