如何让docker daemon 参数以daemon方式运行/bin/bash

如何让docker以daemon方式运行/bin/bash_百度知道
如何让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/ba...
其他类似问题
为您推荐:
daemon的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Docker命令详解
您当前位置: &
[ 所属分类
最近学习Docker,将docker所有命令实验了一番,特整理如下:# docker --helpUsage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ -h | --help | -v | --version ]A self-sufficient runtime for containers.Options: --config=~/.docker Location of client config files -D, --debug=false Enable debug mode -H, --host=[] Daemon socket(s) to connect to -h, --help=false Print usage -l, --log-level=info Set the logging level --tls=false Use TLS; implied by --tlsverify --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA --tlscert=~/.docker/cert.pem Path to TLS certificate file --tlskey=~/.docker/key.pem Path to TLS key file --tlsverify=false Use TLS and verify the remote -v, --version=false Print version information and quitCommands: attach Attach to a running container
--将终端依附到容器上 1& 运行一个交互型容器 [ ~]# docker run -i -t CentOS /bin/bash [ /]#
2& 在另一个窗口上查看该容器的状态 [ ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a75f165ce6 centos "/bin/bash" 5 seconds ago Up 5 seconds cranky_mahavira 3& 退出第一步中运行的容器 [ /]# exit exit 4& 查看该容器的状态 [ ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a75f165ce6 centos "/bin/bash" 2 minutes ago Exited (0) 23 seconds ago cranky_mahavira 可见此时容器的状态是Exited,那么,如何再次运行这个容器呢?可以使用docker start命令 5& 再次运行该容器 [ ~]# docker start cranky_mahavira cranky_mahavira 6& 再次查看该容器的状态 [ ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a75f165ce6 centos "/bin/bash" 6 minutes ago Up 29 seconds cranky_mahavira 因为该容器是交互型的,但此刻我们发现没有具体的终端可以与之交互,这时可使用attach命令。 7& 通过attach命令进行交互 [ ~]# docker attach cranky_mahavira [ /]#
build Build an image from a Dockerfile --通过Dockerfile创建镜像 commit Create a new image from a container's changes --通过容器创建本地镜像 注意:如果是要push到docker hub中,注意生成镜像的命名 [ ~]# docker commit centos_v1 centos:v1 68ad49c999496cff25fdda58fd3884e61bce7ada09bdc [ ~]# docker push centos:v1 You cannot push a "root" repository. Please rename your repository to &user&/&repo& (ex: &user&/centos) 用centos:v1就不行,因为它push到docker hub中时,是推送到相应用户下,必须指定用户名。譬如我的用户名是ivictor,则新生成的本地镜像命名为: docker push victor/centos:v1,其中v1是tag,可不写,默认是latest
cp Copy files/folders from a container to a HOSTDIR or to STDOUT --在宿主机和容器之间相互COPY文件 cp的用法如下: Usage: docker cp [OPTIONS] CONTAINER:PATH LOCALPATH|-docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH 需要注意的是-的用法,我在容器新建了两个文本文件,其中一个为test.txt,内容如下: :/# cat test.txt
123 456 789 另一个文件为test1,txt,内容为: :/# cat test1.txt helloworld 用法一的结果如下: [ ~]# docker cp db:/test.tar - test.tar6 0ustar0000test.txt67 0ustar rootroot123 456 789 test1.txt3 0ustar rootroothelloworld 用法二的结果如下: [ ~]# cat test.tar |docker cp - mysqldb:/ [ ~]# docker exec -it mysqldb /bin/bash :/# ls bin dev entrypoint.sh home lib64 mnt proc run se sys test.txt tmp var boot docker-entrypoint-initdb.d etc lib media opt root sbin srv test.tar test1.txt usr --容器内新增了两个文件,test.txt和test1.txt,而这正是test.tar里打包的文件 create Create a new container
--创建一个新的容器,注意,此时,容器的status只是Created diff Inspect changes on a container's filesystem --查看容器内发生改变的文件,以我的mysql容器为例 [ ~]# docker diff mysqldb C /root A /root/.bash_history A /test1.txt A /test.tar A /test.txt C /run C /run/mysqld A /run/mysqld/mysqld.pid A /run/mysqld/mysqld.sock 不难看出,C对应的均是目录,A对应的均是文件 events Get real time events from the server --实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等。 譬如: [ ~]# docker events T17:40:13.:00 d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71fdc0763db79: (from wordpress) create T17:40:14.:00 d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71fdc0763db79: (from wordpress) die T17:42:10.:00 db6dd626fa8eabeef53a839e4d2e2eb16ebd8caa5f7: (from mysql) start exec Run a command in a running container --用于容器启动之后,执行其它的任务 通过exec命令可以创建两种任务:后台型任务和交互型任务 后台型任务:docker exec -d cc touch 123 其中cc是容器名 交互型任务: [ ~]# docker exec -i -t cc /bin/bash :/# ls 123 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var export Export a container's filesystem as a tar archive --将容器的文件系统打包成tar文件 有两种方式: docker export -o mysqldb1.tar mysqldb docker export mysqldb & mysqldb.tar history Show the history of an image --显示镜像制作的过程,相当于dockfile images List images
--列出本机的所有镜像 import Import the contents from a tarball to create a filesystem image --根据tar文件的内容新建一个镜像,与之前的export命令相对应 [ ~]# docker import mysqldb.tar mysql:v1 eb81de183cd94fd6f969db822afd3acf [ ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mysql v1 eb81de183cd9 21 seconds ago 281.9 MB info Display system-wide information --查看docker的系统信息 [ ~]# docker info Containers: 3 --当前有3个容器 Images: 298
Storage Driver: devicemapper Pool Name: docker-253:0--pool Pool Blocksize: 65.54 kB Backing Filesystem: xfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 8.677 GB --对应的是下面Data loop file大小 Data Space Total: 107.4 GB Data Space Available: 5.737 GB Metadata Space Used: 13.4 MB --对应的是下面Metadata loop file大小 Metadata Space Total: 2.147 GB Metadata Space Available: 2.134 GB Udev Sync Supported: true Deferred Removal Enabled: false Data loop file: /var/lib/docker/devicemapper/devicemapper/data Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.93-RHEL7 () Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.10.0-229.el7.x86_64 Operating System: CentOS Linux 7 (Core) CPUs: 2 Total Memory: 979.7 MiB Name: localhost.localdomain ID: TFVB:BXGQ:VVOC:K2DJ:LECE:2HNK:23B2:LEVF:P3IQ:L7D5:NG2V:UKNL WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled inspect Return low-level information on a container or image --用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等。 kill Kill a running container
--强制终止容器 关于stop和kill的区别,docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然, 容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。 load Load an image from a tar archive or STDIN --与下面的save命令相对应,将下面sava命令打包的镜像通过load命令导入 login Register or log in to a Docker registry --登录到自己的Docker register,需有Docker Hub的注册账号 [ ~]# docker login Username: ivictor Password:
WARNING: login credentials saved in /root/.docker/config.json Login Succeeded logout Log out from a Docker registry --退出登录 [ ~]# docker logout Remove login credentials for https://index.docker.io/v1/ logs Fetch the logs of a container --用于查看容器的日志,它将输出到标准输出的数据作为日志输出到docker logs命令的终端上。常用于后台型容器 pause Pause all processes within a container --暂停容器内的所有进程, 此时,通过docker stats可以观察到此时的资源使用情况是固定不变的, 通过docker logs -f也观察不到日志的进一步输出。 port List port mappings or a specific mapping for the CONTAINER --输出容器端口与宿主机端口的映射情况 譬如: [ ~]# docker port blog 80/tcp -& 0.0.0.0:80 容器blog的内部端口80映射到宿主机的80端口,这样可通过宿主机的80端口查看容器blog提供的服务 ps List containers
--列出所有容器,其中docker ps用于查看正在运行的容器,ps -a则用于查看所有容器。 pull Pull an image or a repository from a registry --从docker hub中下载镜像 push Push an image or a repository to a registry --将本地的镜像上传到docker hub中 前提是你要先用docker login登录上,不然会报以下错误 [ ~]# docker push ivictor/centos:v1 The push refers to a repository [docker.io/ivictor/centos] (len: 1) unauthorized: access to the requested resource is not authorized rename Rename a container --更改容器的名字 restart Restart a running container
--重启容器 rm Remove one or more containers
--删除容器,注意,不可以删除一个运行中的容器,必须先用docker stop或docker kill使其停止。 当然可以强制删除,必须加-f参数 如果要一次性删除所有容器,可使用 docker rm -f `docker ps -a -q`,其中,-q指的是只列出容器的ID rmi Remove one or more images
--删除镜像 run Run a command in a new container
--让创建的容器立刻进入运行状态,该命令等同于docker create创建容器后再使用docker start启动容器 save Save an image(s) to a tar archive --将镜像打包,与上面的load命令相对应 譬如: docker save -o nginx.tar nginx search Search the Docker Hub for images
--从Docker Hub中搜索镜像 start Start one or more stopped containers --启动容器 stats Display a live stream of container(s) resource usage statistics --动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O stop Stop a running container
--停止一个运行的容器 tag Tag an image into a repository --对镜像进行重命名 top Display the running processes of a container --查看容器中正在运行的进程 unpause Unpause all processes within a container --恢复容器内暂停的进程,与pause参数相对应 version Show the Docker version information
--查看docker的版本 wait Block until a container stops, then print its exit code --捕捉容器停止时的退出码 执行此命令后,该命令会“hang”在当前终端,直到容器停止,此时,会打印出容器的退出码。Run 'docker COMMAND --help' for more information on a command.更多Docker相关教程见以下内容:Docker安装应用(CentOS 6.5_x64) http://www.codesec.net/Linux/595.htmUbuntu 14.04安装Docker http://www.codesec.net/linux/656.htmUbuntu使用VNC运行基于Docker的桌面系统 http://www.codesec.net/Linux/170.htm阿里云CentOS 6.5 模板上安装 Docker http://www.codesec.net/Linux/107.htmUbuntu 15.04下安装Docker http://www.codesec.net/Linux/444.htm在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker http://www.codesec.net/Linux/184.htm在 Ubuntu 15.04 上如何安装Docker及基本用法 http://www.codesec.net/Linux/885.htmDocker 的详细介绍:请点这里Docker 的下载地址:请点这里本文地址:http://www.codesec.net/Linux/112.htm
本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
宠辱不惊,闲看庭前花开花落;去留无意,慢随天外云卷云舒;
手机客户端
,专注代码审计及安全周边编程,转载请注明出处:http://www.codesec.net
转载文章如有侵权,请邮件 admin[at]codesec.netDocker详细的基础用法 - HelloWorld
Docker详细的基础用法
He11oWorld
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连接到容器安装软件
#连上后想装什么就装什么,可使用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使用:
:/data# cat Dockerfile
FROMubuntu/testa #这是基础镜像
CMD[“/root/start.sh”] #这是启动命令
:/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″:绑定容器端口的默认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镜像制作
:/data# cat Dockerfile
FROM ubuntu/testa #这是基础镜像
CMD [“/root/start.sh”] #这是启动命令
:/data# docker build -t &新镜像名& ./ #生成新的镜像
Dockfile更多参数参考:
欢迎加入交流群:
百度搜索“HelloWorld”可以找到本站
技术交流、资源分享QQ群:
1~4群已满员 已经新建了两个群
教程分享5群:
教程分享6群:
加一个群即可,不要同时加多个群
有资源可以在群内互相分享交流
点击进入:您所在的位置: &
技巧指南:在Ubuntu上用Docker管理Linux容器
技巧指南:在Ubuntu上用Docker管理Linux容器
布加迪编译
本文将介绍如何安装Docker,并用它高效地管理虚拟机。Docker是一种开源Linux虚拟化平台,以便广大开发人员和系统管理员轻松地开发、部署和执行分布式应用程序。
【51CTO精选译文】本文将介绍如何安装Docker,并用它高效地管理虚拟机。Docker是一种开源Linux虚拟化平台,以便广大开发人员和系统管理员轻松地开发、部署和执行分布式应用程序。Docker包括这几个部分:Docker引擎(一个轻型运行时和虚拟化层),封装和版本控制虚拟机的工具(类似源代码软件库),以及Docker Hub(一项共享应用程序、实现工作流自动化的云端服务)。Docker让应用程序得以由组件迅速装配而成,消除了开发环境、质量控制和生产环境之间的磨擦。
1 首项附注
以本文为例,我准备把docker安装在Ubuntu 14.04操作系统上。虚拟化软件市场上有几项标准硬件虚拟化技术,比如KVM、Xen或Hyper-V。可是标准虚拟化技术太过笨拙,无法对Linux上的单个应用程序进行虚拟化处理。我们可以克服这种情形,只要使用Linux容器(Linux Container):对操作系统层面的虚拟化而言,这是一种不错的替代方案。Linux容器是非常有用的方式,可以让开发/测试环境出现在安全有保障的一堆容器中。Docker提供了这种用途的Linux容器环境。
如前所述,我准备把docker安装在Ubuntu上。在这一章节,我将为大家介绍安装docker的两种方法;在2a这部分中,我使用来自Ubuntu软件库的docker版本,这个版本由Ubuntu维护,提供整整5年的长期支持版(LTS)支持,但它不是最新版本。在2b这部分中,我将使用来自Ubuntu ppa软件库的最新版本。由于docker正在大力开发之中,来自2b)的最新Docker版本极可能适合大多数用户。请使用方法2a或方法2b,但别同时使用这两种方法!
2a 从官方的Ubuntu软件库来安装
想安装docker,请使用下列命令:
sudo&apt-get&update &sudo&apt-get&install&docker.io&
然后创建符号链接,以便在外壳上使用起来更容易。
sudo&ln&-sf&/usr/bin/docker.io&/usr/local/bin/docker &sudo&sed&-i&'$acomplete&-F&_docker&docker'&/etc/bash_completion.d/docker.io&
2b安装最新的docker版本
想从docker.io软件库安装最新的docker版本,运行这个命令:
curl&-s&https://get.docker.io/ubuntu/&|&sudo&sh&
3 准备外壳环境
现在,我将把我的user=srijan添加到docker组:
sudo&usermod&-a&-G&docker&srijan&
或者使用:
sudo&usermod&-a&-G&docker&$USER&
这里,我会退出当前会话,然后再重新登录。现在,我将添加docker配置文件,以便向系统通知其位置。
sudo&vi&/etc/default/docker.io&
DOCKER=&/usr/bin/docker.io&&
现在重启服务,如下所示:
sudo&service&docker.io&restart&
4 容器管理
我准备随Ubuntu操作系统一同启动容器。我会下载docker映像,如下所示:
docker&pull&ubuntu&
注意:pull命令用于从注册中心(registry)拉取映像或软件库。
现在我将使用下面这个命令,登录进入到Ubuntu容器的bash外壳:
docker&run&-i&-t&ubuntu&/bin/bash&
仅仅为了确认,我将检查容器的IP,如下所示:
root@fd98ee950252:/#&ifconfig& &eth0&&&&&&Link&encap:Ethernet&&HWaddr&5a:a6:c6:88:f2:48&& &&&&&&&&&&&inet&addr:172.17.0.3&&Bcast:0.0.0.0&&Mask:255.255.0.0 &&&&&&&&&&&inet6&addr:&fe80::58a6:c6ff:fe88:f248/64&Scope:Link &&&&&&&&&&&UP&BROADCAST&RUNNING&&MTU:1500&&Metric:1 &&&&&&&&&&&RX&packets:7&errors:0&dropped:2&overruns:0&frame:0 &&&&&&&&&&&TX&packets:8&errors:0&dropped:0&overruns:0&carrier:0 &&&&&&&&&&&collisions:0&txqueuelen:1000& &&&&&&&&&&&RX&bytes:558&(558.0&B)&&TX&bytes:648&(648.0&B) &&lo&&&&&&&&Link&encap:Local&Loopback&& &&&&&&&&&&&inet&addr:127.0.0.1&&Mask:255.0.0.0 &&&&&&&&&&&inet6&addr:&::1/128&Scope:Host &&&&&&&&&&&UP&LOOPBACK&RUNNING&&MTU:1500&&Metric:1 &&&&&&&&&&&RX&packets:0&errors:0&dropped:0&overruns:0&frame:0 &&&&&&&&&&&TX&packets:0&errors:0&dropped:0&overruns:0&carrier:0 &&&&&&&&&&&collisions:0&txqueuelen:0& &&&&&&&&&&&RX&bytes:0&(0.0&B)&&TX&bytes:0&(0.0&B) &&root@fd98ee950252:/#&
我容器上的IP地址为172.17.0.3。同样,我还可以使用其他窗口。想编辑容器,只要键入:
同样,你可以有其他的操作系统容器,比如说。
我想使用Debian容器,就要使用代码:
docker&run&-i&-t&debian&/bin/bash&
如果你想有某个发行版,那么就要使用这个命令:
docker&run&-i&-t&ubuntu:12.04&/bin/bash&
它会创建ubuntu12.04容器。我会反复核实,如下所示:
root@44b56100fd1f:/#&cat&/etc/lsb-release& &DISTRIB_ID=Ubuntu&DISTRIB_RELEASE=12.04 &DISTRIB_CODENAME=precise&DISTRIB_DESCRIPTION=&Ubuntu&12.04.4&LTS&&root@44b56100fd1f:/#&
4.1 构建我们自己的映像
构建Docker映像有两种方法:
&通过docker commit(提交)命令
&通过docker build(构建)命令以及Docker文件(Dockerfile)
目前并不推荐docker提交方法,因为借助Docker文件进行构建要灵活得多、强大得多,但为了力求完整起见,我们会向你演示提交方法。之后,我将重点介绍推荐的Docker映像构建方法:编写Docker文件,然后使用docker构建命令。
4.1 使用Docker提交命令来创建映像
我将创建一个容器,并对该容器进行更改DD就像更改代码那样,然后将那些变更内容提交给新的映像。
不妨先通过我们在过去使用的ubuntu映像来创建一个容器。
docker&run&-i&-t&ubuntu&/bin/bash &root@1:/#&
注意:请注意上面的root显示了主机名称1,它是所创建的容器名称;它与你的情况会不一样。
此外,我会将apache安装在容器里面:
apt-get&install&apache2&
我已启动了容器,然后将Apache安装在里面。现在,我准备将该容器用作Web服务器,所以我将它保存在当前状态。
这样一来,我每次创建一个新的容器时,就没必要用Apache来重新构建它。为此,我将退出容器,使用exit命令,然后使用docker提交命令。
docker&commit&1&srijan/apache2&8ce0ea7a1528&
注意:这里的1是我的容器名称;我为容器使用8ce0ea7a1528标记,你可以赋予任何标记名称,也可以使用同一个名称。
假设你忘了上一个创建的容器的编号,可以使用这个命令:
docker&ps&-l&-q&
注意:1是你上一个创建的容器名称,它与你的情况可能不一样。
不妨看一下我们的新映像。它可以这样获得,如下所示:
srijan@vboxtest:~$&docker&images&srijan/apache2 &REPOSITORY&&&&&&&&&&TAG&&&&&&&&&&&&&&&&&IMAGE&ID&&&&&&&&&&&&CREATED&&&&&&&&&&&&&VIRTUAL&SIZE &srijan/apache2&&&&&&8ce0ea7a1528&&&&&&&&ac8&&&&&&&&6&minutes&ago&&&&&&&207.2&MB &srijan@vboxtest:~$&
注意:这里的8ce0ea7a1528是我在保存容器时所使用的标记名称;
注意:ac8是该容器的映像编号;
注意:所有这些值与你的情况可能不一样,因为在保存容器时,docker会创建相应的随机名称。
现在,我将保存定制的映像,如下所示:
docker&commit&-m=&A&new&custom&image&&--author=&Srijan&Kishore&&1&srijan/apache2:webserver&
它会给出结果:
srijan@vboxtest:~$&docker&commit&-m=&A&new&custom&image&&--author=&Srijan&Kishore&&1&srijan/apache2:webserver &f5c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec&
想从我们的新映像运行容器,我们只要使用docker run(运行)命令。
docker&run&-t&-i&srijan/apache2:webserver&/bin/bash&
我们可以反复核对已提交的映像,如下所示:
srijan@vboxtest:~$&docker&inspect&srijan/apache2:webserver &[{ &&&&&&Architecture&:&&amd64&, &&&&&&Author&:&&Srijan&Kishore&, &&&&&&Comment&:&&A&new&custom&image&, &&&&&&Config&:&{ &&&&&&&&&&AttachStderr&:&false, &&&&&&&&&&AttachStdin&:&false, &&&&&&&&&&AttachStdout&:&false, &&&&&&&&&&Cmd&:&[ &&&&&&&&&&&&&&/bin/bash& &&&&&&&&&], &&&&&&&&&&CpuShares&:&0, &&&&&&&&&&Cpuset&:&&&, &&&&&&&&&&Domainname&:&&&, &&&&&&&&&&Entrypoint&:&null, &&&&&&&&&&Env&:&[ &&&&&&&&&&&&&&HOME=/&, &&&&&&&&&&&&&&PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin& &&&&&&&&&], &&&&&&&&&&ExposedPorts&:&null, &&&&&&&&&&Hostname&:&&&, &&&&&&&&&&Image&:&&&, &&&&&&&&&&Memory&:&0, &&&&&&&&&&MemorySwap&:&0, &&&&&&&&&&NetworkDisabled&:&false, &&&&&&&&&&OnBuild&:&null, &&&&&&&&&&OpenStdin&:&false, &&&&&&&&&&PortSpecs&:&null, &&&&&&&&&&StdinOnce&:&false, &&&&&&&&&&Tty&:&false, &&&&&&&&&&User&:&&&, &&&&&&&&&&Volumes&:&null, &&&&&&&&&&WorkingDir&:&&& &&&&&}, &&&&&&Container&:&&14f6ecd83fb5fd3b68fd5e32b4afbc7cd415402fd&, &&&&&&ContainerConfig&:&{ &&&&&&&&&&AttachStderr&:&true, &&&&&&&&&&AttachStdin&:&true, &&&&&&&&&&AttachStdout&:&true, &&&&&&&&&&Cmd&:&[ &&&&&&&&&&&&&&/bin/bash& &&&&&&&&&], &&&&&&&&&&CpuShares&:&0, &&&&&&&&&&Cpuset&:&&&, &&&&&&&&&&Domainname&:&&&, &&&&&&&&&&Entrypoint&:&null, &&&&&&&&&&Env&:&[ &&&&&&&&&&&&&&HOME=/&, &&&&&&&&&&&&&&PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin& &&&&&&&&&], &&&&&&&&&&ExposedPorts&:&null, &&&&&&&&&&Hostname&:&&1&, &&&&&&&&&&Image&:&&ubuntu&, &&&&&&&&&&Memory&:&0, &&&&&&&&&&MemorySwap&:&0, &&&&&&&&&&NetworkDisabled&:&false, &&&&&&&&&&OnBuild&:&null, &&&&&&&&&&OpenStdin&:&true, &&&&&&&&&&PortSpecs&:&null, &&&&&&&&&&StdinOnce&:&true, &&&&&&&&&&Tty&:&true, &&&&&&&&&&User&:&&&, &&&&&&&&&&Volumes&:&null, &&&&&&&&&&WorkingDir&:&&& &&&&&}, &&&&&&Created&:&&T12:58:04.Z&, &&&&&&DockerVersion&:&&1.0.1&, &&&&&&Id&:&&f5c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec&, &&&&&&Os&:&&linux&, &&&&&&Parent&:&&efb00b9e0e6acedcef11a3a2f58b4e683&, &&&&&&Size&:& &} &]srijan@vboxtest:~$&
想从我们的新映像运行容器,我们可以使用docker运行命令。
docker&run&-t&-i&srijan/apache2:webserver&/bin/bash&
4.2 用Docker文件构建映像
Docker文件使用基本的特定领域语言(DSL),以及用于构建Docker映像的指令。然后,我们使用docker构建命令,通过Docker文件里面的指令来构建新的映像。Docker公司的开发团队还在此发布了Docker文件教程(http://www.docker.io/learn/dockerfile/),可以帮助大家学会如何构建Docker文件。
现在,我将创建一个简单的docker文件,它可以按照用户的需求,进一步改进和完善。首先,让一个目录假设为dir=kishore:
mkdir&kishore &cd&kishore&
现在创建一个Docker文件,如下所示:
vi&Dockerfile&
并输入内容,如下所示:
FROM&ubuntu:12.04 &MAINTAINER&Srijan&Kishore&@ispconfig.org&RUN&apt-get&-qq&update &RUN&apt-get&-qqy&install&apache2&
现在打开定制的容器,请使用这个命令:
sudo&docker&build&-t=&srijan/custom1&&.&
它会得出如下结果:
srijan@vboxtest:~/kishore$&sudo&docker&build&-t=&srijan/custom1&&. &[sudo]&password&for&srijan:& &Sending&build&context&to&Docker&daemon&&2.56&kB &Sending&build&context&to&Docker&daemon& &Step&0&:&FROM&ubuntu:12.04 &Pulling&repository&ubuntu &ea7d:&Download&complete& &c5a:&Download&complete& &65b7e9ccb809:&Download&complete& &f8dd6bd14f58:&Download&complete& &adb:&Download&complete& &&---&ea7d &Step&1&:&MAINTAINER&Srijan&Kishore&@ispconfig.org&&---&Running&in&a &&---&be97c22efa82 &Removing&intermediate&container&a &Step&2&:&RUN&apt-get&-qq&update &&---&Running&in&b &&---&cbc3a95de894 &Removing&intermediate&container&b &Step&3&:&RUN&apt-get&-qqy&install&apache2 &&---&Running&in&f &debconf:&delaying&package&configuration,&since&apt-utils&is&not&installed &Selecting&previously&unselected&package&libsqlite3-0. &(Reading&database&...&7551&files&and&directories&currently&installed.) &Unpacking&libsqlite3-0&(from&.../libsqlite3-0_3.7.9-2ubuntu1.1_amd64.deb)&... &Selecting&previously&unselected&package&libroken18-heimdal. &Unpacking&libroken18-heimdal&(from&.../libroken18-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libasn1-8-heimdal. &Unpacking&libasn1-8-heimdal&(from&.../libasn1-8-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libgpg-error0. &Unpacking&libgpg-error0&(from&.../libgpg-error0_1.10-2ubuntu1_amd64.deb)&... &Selecting&previously&unselected&package&libgcrypt11. &Unpacking&libgcrypt11&(from&.../libgcrypt11_1.5.0-3ubuntu0.2_amd64.deb)&... &Selecting&previously&unselected&package&libgdbm3. &Unpacking&libgdbm3&(from&.../libgdbm3_1.8.3-10_amd64.deb)&... &Selecting&previously&unselected&package&libp11-kit0. &Unpacking&libp11-kit0&(from&.../libp11-kit0_0.12-2ubuntu1_amd64.deb)&... &Selecting&previously&unselected&package&libtasn1-3. &Unpacking&libtasn1-3&(from&.../libtasn1-3_2.10-1ubuntu1.1_amd64.deb)&... &Selecting&previously&unselected&package&libgnutls26. &Unpacking&libgnutls26&(from&.../libgnutls26_2.12.14-5ubuntu3.8_amd64.deb)&... &Selecting&previously&unselected&package&libhcrypto4-heimdal. &Unpacking&libhcrypto4-heimdal&(from&.../libhcrypto4-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libheimbase1-heimdal. &Unpacking&libheimbase1-heimdal&(from&.../libheimbase1-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libwind0-heimdal. &Unpacking&libwind0-heimdal&(from&.../libwind0-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libhx509-5-heimdal. &Unpacking&libhx509-5-heimdal&(from&.../libhx509-5-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libkrb5-26-heimdal. &Unpacking&libkrb5-26-heimdal&(from&.../libkrb5-26-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libheimntlm0-heimdal. &Unpacking&libheimntlm0-heimdal&(from&.../libheimntlm0-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libgssapi3-heimdal. &Unpacking&libgssapi3-heimdal&(from&.../libgssapi3-heimdal_1.6~git.dfsg.1-2ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libsasl2-2. &Unpacking&libsasl2-2&(from&.../libsasl2-2_2.1.25.dfsg1-3ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&libldap-2.4-2. &Unpacking&libldap-2.4-2&(from&.../libldap-2.4-2_2.4.28-1.1ubuntu4.4_amd64.deb)&... &Selecting&previously&unselected&package&libcap2. &Unpacking&libcap2&(from&.../libcap2_1%3a2.22-1ubuntu3_amd64.deb)&... &Selecting&previously&unselected&package&libexpat1. &Unpacking&libexpat1&(from&.../libexpat1_2.0.1-7.2ubuntu1.1_amd64.deb)&... &Selecting&previously&unselected&package&libmagic1. &Unpacking&libmagic1&(from&.../libmagic1_5.09-2ubuntu0.3_amd64.deb)&... &Selecting&previously&unselected&package&file. &Unpacking&file&(from&.../file_5.09-2ubuntu0.3_amd64.deb)&... &Selecting&previously&unselected&package&mime-support. &Unpacking&mime-support&(from&.../mime-support_3.51-1ubuntu1_all.deb)&... &Selecting&previously&unselected&package&netbase. &Unpacking&netbase&(from&.../netbase_4.47ubuntu1_all.deb)&... &Selecting&previously&unselected&package&libsasl2-modules. &Unpacking&libsasl2-modules&(from&.../libsasl2-modules_2.1.25.dfsg1-3ubuntu0.1_amd64.deb)&... &Selecting&previously&unselected&package&openssl. &Unpacking&openssl&(from&.../openssl_1.0.1-4ubuntu5.16_amd64.deb)&... &Selecting&previously&unselected&package&libapr1. &Unpacking&libapr1&(from&.../libapr1_1.4.6-1_amd64.deb)&... &Selecting&previously&unselected&package&libaprutil1. &Unpacking&libaprutil1&(from&.../libaprutil1_1.3.12+dfsg-3_amd64.deb)&... &Selecting&previously&unselected&package&libaprutil1-dbd-sqlite3. &Unpacking&libaprutil1-dbd-sqlite3&(from&.../libaprutil1-dbd-sqlite3_1.3.12+dfsg-3_amd64.deb)&... &Selecting&previously&unselected&package&libaprutil1-ldap. &Unpacking&libaprutil1-ldap&(from&.../libaprutil1-ldap_1.3.12+dfsg-3_amd64.deb)&... &Selecting&previously&unselected&package&apache2.2-bin. &Unpacking&apache2.2-bin&(from&.../apache2.2-bin_2.2.22-1ubuntu1.6_amd64.deb)&... &Selecting&previously&unselected&package&apache2-utils. &Unpacking&apache2-utils&(from&.../apache2-utils_2.2.22-1ubuntu1.6_amd64.deb)&... &Selecting&previously&unselected&package&libswitch-perl. &Unpacking&libswitch-perl&(from&.../libswitch-perl_2.16-2_all.deb)&... &Selecting&previously&unselected&package&libclass-isa-perl. &Unpacking&libclass-isa-perl&(from&.../libclass-isa-perl_0.36-3_all.deb)&... &Selecting&previously&unselected&package&perl-modules. &Unpacking&perl-modules&(from&.../perl-modules_5.14.2-6ubuntu2.4_all.deb)&... &Selecting&previously&unselected&package&perl. &Unpacking&perl&(from&.../perl_5.14.2-6ubuntu2.4_amd64.deb)&... &Selecting&previously&unselected&package&apache2.2-common. &Unpacking&apache2.2-common&(from&.../apache2.2-common_2.2.22-1ubuntu1.6_amd64.deb)&... &Selecting&previously&unselected&package&apache2-mpm-worker. &Unpacking&apache2-mpm-worker&(from&.../apache2-mpm-worker_2.2.22-1ubuntu1.6_amd64.deb)&... &Selecting&previously&unselected&package&apache2. &Unpacking&apache2&(from&.../apache2_2.2.22-1ubuntu1.6_amd64.deb)&... &Selecting&previously&unselected&package&ssl-cert. &Unpacking&ssl-cert&(from&.../ssl-cert_1.0.28ubuntu0.1_all.deb)&... &Setting&up&libsqlite3-0&(3.7.9-2ubuntu1.1)&... &Setting&up&libroken18-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libasn1-8-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libgpg-error0&(1.10-2ubuntu1)&... &Setting&up&libgcrypt11&(1.5.0-3ubuntu0.2)&... &Setting&up&libgdbm3&(1.8.3-10)&... &Setting&up&libp11-kit0&(0.12-2ubuntu1)&... &Setting&up&libtasn1-3&(2.10-1ubuntu1.1)&... &Setting&up&libgnutls26&(2.12.14-5ubuntu3.8)&... &Setting&up&libhcrypto4-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libheimbase1-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libwind0-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libhx509-5-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libkrb5-26-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libheimntlm0-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libgssapi3-heimdal&(1.6~git.dfsg.1-2ubuntu0.1)&... &Setting&up&libsasl2-2&(2.1.25.dfsg1-3ubuntu0.1)&... &Setting&up&libldap-2.4-2&(2.4.28-1.1ubuntu4.4)&... &Setting&up&libcap2&(1:2.22-1ubuntu3)&... &Setting&up&libexpat1&(2.0.1-7.2ubuntu1.1)&... &Setting&up&libmagic1&(5.09-2ubuntu0.3)&... &Setting&up&file&(5.09-2ubuntu0.3)&... &Setting&up&mime-support&(3.51-1ubuntu1)&... &update-alternatives:&using&/usr/bin/see&to&provide&/usr/bin/view&(view)&in&auto&mode. &Setting&up&netbase&(4.47ubuntu1)&... &Setting&up&libsasl2-modules&(2.1.25.dfsg1-3ubuntu0.1)&... &Setting&up&openssl&(1.0.1-4ubuntu5.16)&... &Setting&up&libapr1&(1.4.6-1)&... &Setting&up&libaprutil1&(1.3.12+dfsg-3)&... &Setting&up&libaprutil1-dbd-sqlite3&(1.3.12+dfsg-3)&... &Setting&up&libaprutil1-ldap&(1.3.12+dfsg-3)&... &Setting&up&apache2.2-bin&(2.2.22-1ubuntu1.6)&... &Setting&up&apache2-utils&(2.2.22-1ubuntu1.6)&... &Setting&up&libclass-isa-perl&(0.36-3)&... &Setting&up&ssl-cert&(1.0.28ubuntu0.1)&... &debconf:&unable&to&initialize&frontend:&Dialog &debconf:&(TERM&is&not&set,&so&the&dialog&frontend&is&not&usable.) &debconf:&falling&back&to&frontend:&Readline &debconf:&unable&to&initialize&frontend:&Readline &debconf:&(This&frontend&requires&a&controlling&tty.) &debconf:&falling&back&to&frontend:&Teletype &Setting&up&libswitch-perl&(2.16-2)&... &Setting&up&perl-modules&(5.14.2-6ubuntu2.4)&... &Setting&up&perl&(5.14.2-6ubuntu2.4)&... &update-alternatives:&using&/usr/bin/prename&to&provide&/usr/bin/rename&(rename)&in&auto&mode. &Setting&up&apache2.2-common&(2.2.22-1ubuntu1.6)&... &Enabling&site&default. &Enabling&module&alias. &Enabling&module&autoindex. &Enabling&module&dir. &Enabling&module&env. &Enabling&module&mime. &Enabling&module&negotiation. &Enabling&module&setenvif. &Enabling&module&status. &Enabling&module&auth_basic. &Enabling&module&deflate. &Enabling&module&authz_default. &Enabling&module&authz_user. &Enabling&module&authz_groupfile. &Enabling&module&authn_file. &Enabling&module&authz_host. &Enabling&module&reqtimeout. &Setting&up&apache2-mpm-worker&(2.2.22-1ubuntu1.6)&... &invoke-rc.d:&policy-rc.d&denied&execution&of&start. &Setting&up&apache2&(2.2.22-1ubuntu1.6)&... &Processing&triggers&for&libc-bin&... &ldconfig&deferred&processing&now&taking&place &&---&31 &Removing&intermediate&container&f &Successfully&built&31 &srijan@vboxtest:~/kishore$&
现在不妨看一下我们的新映像。为此,我们可以使用docker映像命令来实现。
docker&images&srijan/custom1&
srijan@vboxtest:~/kishore$&docker&images&srijan/custom1 &REPOSITORY&&&&&&&&&&TAG&&&&&&&&&&&&&&&&&IMAGE&ID&&&&&&&&&&&&CREATED&&&&&&&&&&&&&&VIRTUAL&SIZE &srijan/custom1&&&&&&latest&&&&&&&&&&&&&&31&&&&&&&&About&a&minute&ago&&&277.4&MB &srijan@vboxtest:~/kishore$&
这里,你会发现映像在默认情况下会安装apache2。不妨反复核对一下:
docker&run&-t&-i&srijan/apache2:webserver&/bin/bash&
现在,你可以进入新容器,而apache2和12.04ubuntu已预装。
5 主机名称的更改
假设你想更改主机名称,或者你想有一个定制的主机称,比如我这里的。
我会使用:
docker&run&-h&''&-t&-i&srijan/custom1&/bin/bash&
它会得出映像容器,如下所示:
srijan@vboxtest:~/kishore$&docker&run&-h&''&-t&-i&srijan/custom1&/bin/bash &root@server1:/#&hostname&-f & &root@server1:/#&
6 docker的实用命令集锦
&pull(pull用于从注册中心拉取映像或软件库)
docker&run&-i&-t&ubuntu&/bin/bash&
&commit(commit用于保存容器)
docker&commit&1&srijan/apache2&8ce0ea7a1528 &
&cp(将文件/文件夹从容器的文件系统拷贝到主机路径。路径相对于文件系统的根目录。)
docker&cp&CONTAINER:PATH&HOSTPATH&
其中的CONTAINER是容器,将文件/文件夹从PATH拷贝到HOSTPATH
&start和stop容器:
docker&start&d&
docker&stop&d&
其中的d是你的容器编号
&export(将文件系统的内容作为tar存档文件导出到STDOUT)
docker&export&d&&latest.tar&
&import(创建一个空的文件系统映像,将打包文件[.tar、.tar.gz、.tgz、.bzip、.tar.xz或.txz]的内容导入到里面,然后以可选方式标记它。)
docker&import&/exampleimage.tgz&
从本地文件导入:
通过pipe和stdin导入到docker。
cat&exampleimage.tgz&|&sudo&docker&import&-&exampleimagelocal:new&
从本地目录导入:
sudo&tar&-c&.&|&sudo&docker&import&-&exampleimagedir&
&history(显示映像的历史记录)
docker&history&[OPTIONS]&IMAGE&
sudo&docker&history&ea7d&
&images(它会显示映像)
docker&images&[OPTIONS]&[NAME]&
它后面跟一些选项,如下所示:
-a, --all=false 显示所有映像(默认情况下,过滤掉中间映像层)
-f, --filter=[]: 提供过滤器值(即&dangling=true&)
--no-trunc=false 不截短输出
-q, --quiet=false 只显示数字编号
&info(显示整个系统的信息)
srijan@VE130214:~$&sudo&docker&info&
srijan@vboxtest:~$&sudo&docker&info &Containers:&20 &Images:&65 &Storage&Driver:&aufs &&Root&Dir:&/var/lib/docker/aufs &&Dirs:&105 &Execution&Driver:&native-0.2 &Kernel&Version:&3.13.0-30-generic &WARNING:&No&swap&limit&support&
&inspect(返回关于容器/映像的低级信息)
docker&inspect&CONTAINER|IMAGE&[CONTAINER|IMAGE...]&
&kill(终止运行中的容器/发送SIGKILL,即指定信号)
docker&kill&[OPTIONS]&CONTAINER&[CONTAINER...]&
&login(注册或登录docker注册中心服务器,如果未指定任何服务器,https://index.docker.io/v1/为默认值。)
docker&login&localhost:8080&
它会登录到自托管注册中心。
&logs(读取容器的日志)
docker&logs&CONTAINER&
&ps(列出容器)
docker&ps&[OPTIONS] &
它有下列选项:
-a, --all=false 显示所有容器。默认情况下只显示运行中的容器。
--before=&& 只显示编号或名称之前创建的容器,包括非运行中的容器。
-l, --latest=false 只显示最近创建的容器,包括非运行中的容器。
-n=-1 显示n个最近创建的容器,包括非运行中的容器。
--no-trunc=false 不截短输出。
-q, --quiet=false 只显示数字编号。
-s, --size=false 显示大小。
--since=&& 只显示自编号或名称以来创建的容器,包括非运行中的容器。
&push(将映像或软件库推送到注册中心)
docker&push&NAME[:TAG]&
&restart(它将重启运行中的容器)
docker&restart&[OPTIONS]&CONTAINER&[CONTAINER...]&
&rm(它将删除一个或多个容器)
docker&rm&[OPTIONS]&CONTAINER&[CONTAINER...]&
&rmi(它将删除一个或多个映像)
docker&rmi&IMAGE&[IMAGE...]&
&run(在新容器中运行命令)
docker&run&[OPTIONS]&IMAGE&[COMMAND]&[ARG...]&
它有下列选项:
-a, --attach=[] 连接到stdin、stdout或stderr
-c, --cpu-shares=0 处理器共享(相对权重)
--cidfile=&& 将容器编号写入到文件
-d, --detach=false 分离模式:在后台运行容器,输出新的容器编号
--dns=[] 设置自定义DNS服务器
--dns-search=[] 设置自定义DNS搜索域
-e, --env=[] 设置环境变量
--entrypoint=&& 覆盖映像的默认入口点
--env-file=[] 在行分隔的文件中读取ENV变量
--expose=[] 暴露来自容器的端口,又不将端口发布到你的主机
-h, --hostname=&& 容器主机名称
-i, --interactive=false 让stdin保持开放,即便没有连接
--link=[] 将链接添加到另一个容器(名称:别名)
--lxc-conf=[] (lxc exec-driver only)添加自定义lxc选项--lxc-conf=&lxc.cgroup.cpuset.cpus = 0,1&
-m, --memory=&& 内存限制(格式:&number&&optional unit&,其中unit = b, k, m or g)
--name=&& 为容器赋予名称
--net=&bridge& 为容器设置网络模式
'bridge':为docker网桥上的容器创建新的网络堆栈
'none':不为该容器创建任何网络机制
'container:&name|id&':重复使用另一个容器的网络堆栈
'host':使用容器里面的主机网络堆栈
-p, --publish=[] 将容器的端口发布到主机
格式:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
(使用&docker port&即可看到实际映射)
-P, --publish-all=false  将所有暴露的端口发布到主机接口
--privileged=false 为该容器赋予扩展后的权限
--rm=false 容器退出后,自动删除容器(与-d不兼容)
--sig-proxy=true 将所有收到的信号代理输出到进程(即便处于非-tty模式下)
-t, --tty=false 分配伪终端
-u, --user=&& 用户名称或UID
-v, --volume=[] 绑定挂载卷(比如来自host:-v /host:/container,来自docker: -v /container)
--volumes-from=[] 从指定的一个或多个容器挂载卷
-w, --workdir=&& 容器里面的工作目录
&save(将映像保存到tar存档文件,默认情况下流式传输到stdout)
docker&save&IMAGE&
&search(搜索docker索引,寻找映像)
docker&search&TERM&
&tag(将映像标记到软件库)
docker&tag&[OPTIONS]&IMAGE&[REGISTRYHOST/][USERNAME/]NAME[:TAG]&
&top(查询容器的运行中进程)
docker&top&CONTAINER&[ps&OPTIONS]&
&version(显示docker版本信息)
srijan@vboxtest:~$&sudo&docker&version &[sudo]&password&for&srijan:& &Client&version:&1.0.1 &Client&API&version:&1.12 &Go&version&(client):&go1.2.1 &Git&commit&(client):&990021a &Server&version:&1.0.1 &Server&API&version:&1.12 &Go&version&(server):&go1.2.1 &Git&commit&(server):&990021a&
我试着让大家更加熟悉docker,但愿本文会帮助各位进一步了解docker,并在自己的测试/生产环境中充分利用docker。
想了解更多信息,请参阅/。
/manage-linux-containers-with-docker-on-ubuntu
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
Docker是一个轻量级虚拟机,也是一种Linux容器,它突破了以往的
Linux界极具活力,面向不同的用户可以使用不同的Linux发行版,比如适合新手和游戏爱好者等。
讲师: 0人学习过讲师: 0人学习过讲师: 558人学习过
DevOps是一组过程、方法与系统的统称,当企业希望将原
日,代号为“Trusty Tahr”(值得信赖的塔
日,微软公司正式发布Windows XP操作系统
《ASP.NET程序设计教程》是在总结多年ASP.NET教学和应用项目开发经验基础上编写完成的,编写过程中充分吸取了其他畅销实用教程的
51CTO旗下网站}

我要回帖

更多关于 docker daemon 配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信