前面安装zabbix时用到了docker,发现docker也是个好东西。Docker 是 dotCloud 的开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。
安装在前面聊过了(http://blog.csdn.net/a5nan/article/details/51991428),下面在网上找了些资料聊一下常用命令:
docker三种命令运行方式
docker有三种命令运行的方式:短暂方式、交互方式、daemon方式。
a、短暂方式
sudo docker run ubuntu /bin/echo hello world #进入到ubuntu镜像执行一个echo语句,测试命令执行完后,container就终止了,不过并没有消失,可以用 sudo docker ps -a 看一下所有的container,第一个就是刚刚执行过的container,可以再次执行一遍:
sudo docker start container_id
#这次看不到”hello world”了,只能看到ID,用logs命令才能看得到:
sudo docker logs container_id
#可以看到两个”hello world”,因为这个container运行了两次。
b、交互方式
sudo docker run -i -t image_name bash #这样会进入镜像的bash命令行,也可以写成另一种方式:
sudo docker exec -it image_name bash
c、daemon方式
即让软件作为长时间服务运行,这就是SAAS啊!例如,一个无限循环打印的脚本(替换为memcached、apache等,操作方法仍然不变!):
CONTAINER_ID=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done")
在container外面查看它的输出
sudo docker logs $CONTAINER_ID
或者连接上容器实时查看
sudo docker attach $CONTAINER_ID
终止容器
sudo docker stop $CONTAINER_ID
sudo docker ps #看一下,已经没了
docker官方common
$ sudo docker # docker 命令帮助
Commands:
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container's changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path
# 从容器中拷贝指定文件或者目录到宿主机中
# e.g.docker cp foo.txt mycontainer:/foo.txt
&& docker cp mycontainer:/foo.txt foo.txt
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive
# 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball
# 从tar包中的内容创建一个新的文件系统映像[对应 export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server
# 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
# 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server
# 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server
# 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images
# 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container
# 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code
# 截取容器停止时的退出状态值
Run 'docker COMMAND --help' for more information on a command.
docker run
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明(原始的内容太多,挑了些常用的说明):
-a, --attach stdin: # 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d, --detch: # 后台运行容器,并返回容器ID;
-i, --interactive: # 以交互模式运行容器,通常与 -t 同时使用;
-t, --tty: # 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": # 为容器指定一个名称;
--dns 8.8.8.8: # 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: # 指定容器DNS搜索域名,默认和宿主一致;
-h, --hostname "mars": # 指定容器的hostname;
-e, --env username="ritchie": # 设置环境变量;
--env-file=[]: # 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": # 绑定容器到指定CPU运行;
-m, --memory 512MB: # 设置容器使用内存最大值;
--net="bridge": # 指定容器的网络连接类型,支持 bridge/host/none/Container: 四种类型;
--link=[]: # 添加链接到另一个容器;
--expose=[]: # 开放一个端口或一组端口;
-p, --pulish 8080:8080: # 映射容器的8080端口到host的8080端口;
-P, --publish-all: # 映射容器的所有端口到host;
--restart=always: # 容器重启策略,默认是no;
-v, --volume /data:/data: # 主机的目录/data映射到容器的/data;
补充:
1、docker ps命令
sudo docker ps #列出当前所有正在运行的container
sudo docker ps -l #列出最近一次启动的,且正在运行的container
sudo docker ps -a #列出所有的container
注意:
a、其他用法请参考 sudo docker ps -h
b、还有一种方式可以让程序在daemon模式下运行,就是在Dockerfile里设置USER为daemon
2、docker export命令
container_id=`docker run -d <image_name> ls`
docker export $container_id > image.tgz
3、docker import命令
cat image.tgz | sudo docker import - simple_dev #simple_dev为自定义的镜像名称
4、删除所有容器
sudo docker rm `sudo docker ps -a -q`
这里简单介绍一下docker的常用命令,下次再总结一下dockerfile相关的命令
大神链接:
http://blog.opskumu.com/docker.html
http://blog.csdn.net/zjin_hua/article/details/52041757