初识容器

本人假定你已经安装运行一个docker。为了检查Docker是否安装,可以使用下面的命令:

# 检查你的安装是否成功
$ docker info

docker: command not found 或者类似/var/lib/docker/repositories: permission denied此外,根据你的Docker系统设置,你可能需要在每条 docker 命令前追加 sudo指令。为了避免每次都输入 sudo,你的系统管理员可以创建一个名为docker Unix用户组并把用户添加进去。(译者注:当然如果你是在学习期间,可以直接却换到root用户)sudo

下载一个预建的镜像

# 下载一个名为ubuntu的镜像$ docker pull ubuntu

ubuntu

 539c0211cd76: Download complete 的提示,是镜像ID的缩写。这些缩写的镜像IDs是截取完整的镜像ID的前12个字符,它可以在docker inspect 或docker images --no-trunc=true中使用。

运行一个交互式的shell

基于Ubantu镜像运行一个交互式的shell:

$ docker run -i -t ubuntu /bin/bash

-i 标记启动一个交互式的容器。 -t 标记创建一个包含 stdin 和stdout的虚拟终端。tty ,使用跳出指令 Ctrl-p +Ctrl-q。当退出时,容器将以停止的状态继续存在。列出容器的清单,包括停止和正在运行的,可以使用 docker ps -a

绑定Docker到其他的主机/端口或一个Unix socket(套接字)

警告:改变docker 守护进程的默认设置,连结一个TCP端口或Unixdocker 用户组会增加你的安全风险,因为这种方式允许非root用户获得root的访问权限。在中情况下,确保docker在你的控制之中。如果你连结到一个TCP端口,任何人都可以通过它访问docker的全部功能。所以,在一个开放的网络环境时候,这是一个不明智的设置。

-H 参数可能会使Docker守护进程监听指定的IP和端口。默认情况下,它监听unix:///var/run/docker.sock 服务,仅接受通过root用户发起的本地连接。你可以把它连接到 0.0.0.0:2375-H-H

tcp://[host][:port][path] or unix://path

例如:

tcp://host:2375tcp://host:2375/pathunix://path/to/socket

  •  -> Unix socket 位于

path/to/socket-H当它的值为空时,和没有设置该参数效果一致。-H

host[:port] or :port

运行Docker在守护模式:

$ sudo <path to>/docker daemon -H 0.0.0.0:5555 &

ubuntu

$ docker -H :5555 pull ubuntu

-H参数,例如,如果你需要同时监听TCP和Unix socket。

# 运行docker守护模式
$ sudo <path to>/docker daemon -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &
# 下载一个乌班图镜像,使用默认的Unix socket
$ docker pull ubuntu
# 或使用TCP端口
$ docker -H tcp://127.0.0.1:2375 pull ubuntu

启动一个持续工作进程

# 启动一个非常有用的持续工作进程$ JOB=$(docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done")

# 收集docker日志信息$ docker logs $JOB# 结束进程$ docker kill $JOB

容器列表

$ docker ps # 仅显示正在运行的容器
$ docker ps -a # 所有的容器

控制容器

# 启动一个新的容器$ JOB=$(docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done")

# 停止容器$ docker stop $JOB# 启动容器$ docker start $JOB# 重启容器$ docker restart $JOB# 杀掉容器$ docker kill $JOB# 删除一个容器$ docker stop $JOB # 在删除前,必须停止容器$ docker rm $JOB

绑定一个服务在一个TCP端口

# 绑定容器4444端口,通知netcat在这个监听这个端口$ JOB=$(docker run -d -p 4444 ubuntu:12.10 /bin/nc -l 4444)

# 那个公共端口映射到我们的容器端口?$ PORT=$(docker port $JOB 4444 | awk -F: '{ print $2 }')

# 连接到公共端口$ echo hello world | nc 127.0.0.1 $PORT# 验证网络连接已经工作$ echo "Daemon received: $(docker logs $JOB)"

提交(保存)一个容器的状态

保存你的容器状态到一个镜像中,可以重用这些状态。

docker images

# 提交你的容器到一个新名字的镜像中
$ docker commit <container> <some_name>

# 查看你的镜像列表
$ docker images

你现在拥有一个镜像了,可以用它创建一个新的容器。