1. 怎么在docker 中启动一个daemon
docker
run指定的命令如果不是那些一直挂起的命令(比如运行top,不断echo),就是会自动退出的。-d命令是设置detach为true,根据官方的文档,意思是让这个命令在后台运行,但并不是一直运行(我们在一个正常的linux
terminal中运行/bin/bash,运行完了也就完了,不会一直挂着等待响应的,所以确实没办法用daemon方式来跑/bin/bash)。
这个地方官方早期和现在的文档也确实有些前后不一致,现在是detach,早期的文档说指定-d以daemon方式来运行容器,可能存在一定的误解。
另外,如果你需要跑容器里的bash,直接运行docker
run
-i
-t
container_name
/bin/bash
就可以了,如果觉得参数比docker
attach多,可以设置一个别名(alias)来解决:
alias
dockerbash='docker
run
-i
-t
container_id
/bin/bash'
设置好别名后,直接运行dockerbash就可以进入容器的bash了
2. 如何启动docker daemon
docker加-d就可以了,比如。#dockerrun--namecentos-linux-dcentos/bin/bash-c"whiletrue;doping8.8.8.8;done"
3. Docker设置权限如何下放改普通用户
1.新建用户组docker,如果用户组已经存在则跳过
点击(此处)折叠或打开
$sudo cat/etc/group|docker
$sudo groupadd-g 999 docker
#-g 999 为组ID,也可以不指定
点击(此处)折叠或打开
¥sudo gpasswd-a${USER}docker
点击(此处)折叠或打开
$sudo systemctl restart docker
点击(此处)折叠或打开
$sudo chmoda+rw/var/run/docker.sock
4. Docker是什么它比虚拟机强在哪里
我来换个方式说一下吧。
如果不讲究的话,你把docker近似的看成虚拟机问题也不大。 (刚开始可以不用纠结那些公用内核,系统调用,应用进程之类的)
docker嘛,一个字就是快。两个字就是省心。
你vmware装个centos 要多久,保守估计算上下载系统镜像到安装完也要个20分钟吧。 docker呢,一个docker pull centos 命令, 几秒钟搞定了。 接着连进去随你怎么折腾。
但是,玩是不会赚钱的,得向外提供服务才能赚钱,比如用httpd搭建一个网页服务器。 难不成我还得自己进去配置, no no no ,不用的, 直接在配置文件里写一条命令,或者干脆直接下载一个带http的镜像,多了几十毫秒,就搞定了。 软件再多,也分分钟搞定,再加上k8s这样的管理docker软件。 一个yaml格式的配置文件 加上一条超方便的kubectl apply 命令,几秒钟就可以搭建一个包含超多软件的复杂集群。效率和速度真是让人叹为观止。
因为docker快,现在连解决问题的思路都有一些变化, 比如docker里面的某个httpd服务不可用了,你说东西不能用了得找原因修吧, 但是因为启动一个太快了。 所以干脆先别修,直接在启动一个新的docker,顶上去。 那个坏了的,要么直接扔掉,要么等待白天工作时间载慢慢找原因。
所以docker 比虚拟机,个人感觉就是单个系统启动快,复杂系统配置快,东西坏了直接扔带来的系统恢复速度快。
话说回来,要是真不在意启动时间和运行时间,虚拟机中完整的系统哪点不比docker强?
5. docker运行nginx为什么要使用 daemon off
容器启动时执行的那条入口命令一旦结束了,容器也会结束。如果启动命令单纯是以后台守护(daemon)模式启动nginx,那么启动命令会立即结束,容器也会立即结束。
其实只要在任何命令之后加一句
&&
cat,就会让这条命令卡在前台而不会结束,不是非得用daemon
off
6. docker-java如何将本地上传的镜像包重新打包并push至指定的镜像仓库
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
dockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器[2]
起源
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。
一款开源软件能否在商业上成功,很大程度上依赖三件事 - 成功的 user case(用例), 活跃的社区和一个好故事。 dotCloud 自家的 PaaS 产品建立在docker之上,长期维护且有大量的用户,社区也十分活跃,接下来我们看看docker的故事。
环境管理复杂 - 从各种OS到各种中间件到各种app, 一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。
云计算时代的到来 - AWS的成功, 引导开发者将应用转移到 cloud 上, 解决了硬件管理的问题,然而中间件相关的问题依然存在 (所以openstack HEAT和 AWS cloudformation 都着力解决这个问题)。开发者思路变化提供了可能性。
虚拟化手段的变化 - cloud 时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需使用的需求以及保证可用性和隔离性。然而无论是KVM还是Xen在 docker 看来,都在浪费资源,因为用户需要的是高效运行环境而非OS, GuestOS既浪费资源又难于管理, 更加轻量级的LXC更加灵活和快速
LXC的移动性 - LXC在 linux 2.6 的 kernel 里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可迁移性,决定其构建出的环境难于迁移和标准化管理(相对于KVM之类image和snapshot的概念)。docker 就在这个问题上做出实质性的革新。这是docker最独特的地方。
VM技术和容器技术对比
面对上述几个问题,docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后一个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。
Docker 架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。[3]
Docker 面向对象
容器
对象
镜像
类
Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。[4]
特性
在docker的网站上提到了docker的典型场景:
Automating the packaging and deployment of applications(使应用的打包与部署自动化)
Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)
由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。
构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为 on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础
因为其标准化构建方法(buildfile)和良好的REST API,自动化测试和持续集成/部署能够很好的集成进来
因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源。
7. 如何让docker以daemon方式运行/bin/bash
docker run指定的命令如果不是那些一直挂起的命令(比如运行top,不断echo),就是会自动退出的。-d命令是设置detach为true,根据官方的文档,意思是让这个命令在后台运行,但并不是一直运行(我们在一个正常的Linux Terminal中运行/bin/bash,运行完了也就完了,不会一直挂着等待响应的,所以确实没办法用daemon方式来跑/bin/bash)。
这个地方官方早期和现在的文档也确实有些前后不一致,现在是detach,早期的文档说指定-d以daemon方式来运行容器,可能存在一定的误解。
另外,如果你需要跑容器里的bash,直接运行docker run -i -t CONTAINER_NAME /bin/bash 就可以了,如果觉得参数比docker attach多,可以设置一个别名(alias)来解决:
alias dockerbash='docker run -i -t CONTAINER_ID /bin/bash'
设置好别名后,直接运行dockerbash就可以进入容器的bash了
8. 如何给Docker配置官方国内加速镜像
在国内访问 Docker 官方的镜像,一直以来速度都慢如蜗牛。为了快速访问 Docker 官方镜像都会配置三方加速器,目前常用三方加速器有: 网易 、 USTC 、 DaoCloud 、 阿里云 。
现在 Docker 官方针对中国区推出了镜像加速服务。通过 Docker 官方镜像加速,国内用户能够以更快的下载速度和更强的稳定性访问最流行的 Docker 镜像。
如何使用官方镜像
Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问。目前该镜像库只包含流行的公有镜像,而私有镜像仍需要从美国镜像库中拉取。
您可以使用以下命令直接从该镜像加速地址进行拉取。
$ docker pull registry.docker-cn.com/myname/myrepo:mytag
例如:
$ docker pull registry.docker-cn.com/library/ubuntu:16.04
注:除非您修改了Docker守护进程的–registry-mirror参数,否则您将需要完整地指定官方镜像的名称。例如,library/ubuntu、library/redis、library/nginx。
给Docker守护进程配置加速器
如果要配置 Docker 守护进程默认使用 Docker 官方镜像加速。您可以在 Docker 守护进程启动时配置 --registry-mirror 参数。
通过命令行启动Docker
$ docker --registry-mirror=https://registry.docker-cn.com daemon
通过配置文件启动Docker
Docker 版本在 1.12 或更高
修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。
$ vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"]}
Docker版本在 1.8 与 1.11 之间
您可以找到 Docker 配置文件,在配置文件中的 DOCKER_OPTS 加入。不同的 Linux 发行版的配置路径不同,这里以 Ubuntu 为例。
a) Ubuntu 14.04版本
修改 /etc/default/docker 文件,加入如下参数。
$ vim /etc/default/docker DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
b) Ubuntu 15.04以后版本
Ubuntu 15.04 之后默认使用了 Systemd 管理服务,加速器配置方式稍有些不同。在 Systemd 服务文件中加入启动参数。
$ vim /lib/systemd/system/docker.service [Service] ExecStart=/usr/bin/docker -d -H fd:// --registry-mirror=https://registry.docker-cn.com
修改保存后,重启 Docker 以使配置生效。
$ service docker restart
给Docker守护进程配置加速器后,就可以默认通过官方镜像加速拉取镜像,而无需在每次拉取时指定 registry.docker-cn.com 。
9. 如何给容器服务的Docker增加数据盘
摘要:我们知道Docker的数据是通过联合文件系统的方式存储到磁盘上,当需要在机器上运行的容器或者镜像的数量不断增加时,有可能磁盘的大小不再满足需求,这个时候就需要给Docker的数据目录通过增加数据盘的方式进行扩容。
Docker 数据目录
Docker默认的容器和镜像数据存储的目录是在/var/lib/docker下面,可以通过命令查看这个目录目前占用的磁盘的大小,例如:
# -h --max-depth=0 /var/lib/docker
7.9G /var/lib/docker
更换Docker的数据盘
因为很多Docker的镜像本身就挺大的,所以可能用不了几个镜像就会有很可观的一个磁盘占用,很容器就会导致磁盘空间不足,这个时候如何更换数据盘以满足再增加镜像或容器的需求,那就给Docker的数据目录增加块数据盘吧。
购买ECS数据盘,并挂载到需要扩容的机器上:
1. 通过ECS控制台购买需要的配置的云盘
2. 在ECS实例详情页->本实例磁盘->挂载磁盘中,选择刚才购买的磁盘,并记录挂载点/dev/xvd*或者/dev/vd*
登录到机器上,对刚才挂载的磁盘进行格式化:
1. 首先在机器上执行ls -l /dev/xvd*或者ls -l /dev/vd*看到和刚才记录的一致的磁盘id
2. 通过fdisk命令对磁盘进行分区,然后使用mkfs.ext4格式化磁盘,例如: