初识容器
本人假定你已经安装运行一个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:2375
tcp://host:2375/path
unix://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
你现在拥有一个镜像了,可以用它创建一个新的容器。