码迷,mamicode.com
首页 > 其他好文 > 详细

docker使用基础总结

时间:2015-11-27 20:16:02      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:操作系统   虚拟化   docker   

docker使用笔记

authorization:胡湘林

email: a714585725@qq.com

1、安装docker

CentOS6

对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下

yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
yum install docker-io


CentOS7

CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装:


yum install docker

安装之后启动 Docker 服务,并让它随系统启动自动加载。


service docker start
chkconfig docker on

2、获取镜像

可以使用 docker pull 命令来从仓库获取所需要的镜像。


下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。

$ sudo docker pull ubuntu:12.04
Pulling repository ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

下载过程中,会输出获取镜像的每一层信息。

该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器 registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。

有时候官方仓库注册服务器下载较慢,可以从其他仓库下载。 从其它仓库下载时需要指定完整的仓库注册服务器地址。例如

$ sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
Pulling dl.dockerpool.com:5000/ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行 bash 应用。


3、列出镜像列表

使用 docker images 显示本地已有的镜像。

$ sudo docker images
REPOSITORY       TAG      IMAGE ID      CREATED      VIRTUAL SIZE
ubuntu           12.04    74fe38d11401  4 weeks ago  209.6 MB
ubuntu           precise  74fe38d11401  4 weeks ago  209.6 MB
ubuntu           14.04    99ec81b80c55  4 weeks ago  266 MB
ubuntu           latest   99ec81b80c55  4 weeks ago  266 MB
ubuntu           trusty   99ec81b80c55  4 weeks ago  266 MB
...

在列出信息中,可以看到几个字段信息

来自于哪个仓库,比如 ubuntu

镜像的标记,比如 14.04

它的 ID 号(唯一)

创建时间

镜像大小

其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的镜像 ID,说明它们实际上是同一镜像。

TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.04、12.04、12.10、13.04、14.04 等。


4、启动容器

docker run -t -i centos:latest /bin/bash

如果不指定具体的标记,则默认使用 latest 标记信息。

5、容器基本使用

容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]

容器生命周期管理

# 在容器中运行"echo"命令,输出"hello word"
$docker run image_name echo "hello word"
# 交互式进入容器中
$docker run -i -t image_name /bin/bash
# 在容器中安装新的程序
$docker run image_name yum install -y app_name
#使容器在守护态运行
docker run -d -i -t  image_name /bin/bash
#使容器在运行时绑定特定端口
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。
当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
docker run -d -P training/webapp python app.py
docker ps -l
CONTAINER ID  IMAGE                   COMMAND       CREATED        STATUS        PORTS                    NAMES
bc533791f3f5  training/webapp:latest  python app.py 5 seconds ago  Up 2 seconds  0.0.0.0:49155->5000/tcp  nostalgic_morse
-p(小写的)则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。
映射所有接口地址
使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,可以执行
docker run -d -p 5000:5000 training/webapp python app.py
此时默认会绑定本地所有接口上的所有地址。
映射到指定地址的指定端口
可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
映射到指定地址的任意端口
使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
还可以使用 udp 标记来指定 udp 端口
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
查看映射端口配置
使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址
docker port nostalgic_morse 5000
127.0.0.1:49155.
注意:
容器有自己的内部网络和 ip 地址(使用 docker inspect 可以获取所有的变量,Docker 还可以有一个可变的网络配置。)
-p 标记可以多次使用来绑定多个端口
例如
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
#启动/重启容器和关闭容器
启动一个关闭的容器:docker start CONTAINER_ID
重启一个容器:docker restart CONTAINER_ID
关闭一个容器:docker stop CONTAINER_ID或者docker kill CONTAINER_ID强制关闭一个容器
删除一个容器:docker rm -f CONTAINER_ID
删除所有容器:docker rm `docker ps -a -q`
暂停/恢复一个容器的所有进程:docker pause/unpause

容器操作运维

#查看容器运行状态
docker ps -a #查看所有容器的状态
docker ps -a -q #列出所有容器列表
docker inspect CONTAINER_ID #检查镜像或者容器的参数,默认返回 JSON 格式。
docker top CONTAINER_ID #查询某个容器的进程运行情况
docker attach CONTAINER_ID #接入某个正在运行的docker容器中进行操作(重点:退出的时候不能使用ctrl+d或者exit方式,这将会导致容器停止运行,退出时应使用ctrl+p,然后再使用ctrl+q)
docker events --since=20151118 #查看直到指定日期容器的实时系统事件
docker logs CONTAINER_ID #批量打印出容器中进程的运行日志
docker wait CONTAINER_ID #阻塞一个容器,直到该容器停止(PS:目前不知道咋用)
docker export CONTAINER_ID > /directory/container.tar #(保存当前某个容器的状态信息),导入可使用cat /directory/container.tar |docker import - CONTAINER_NAME:tag
docker save IMAGE_NAME >/directory/image_name.tar #(将某个镜像导出),导入可使用docker load < /directory/image_name.tar
这两个之间的区别如下:
导出后再导入(exported-imported)的镜像会丢失所有的历史,而保存后再加载(saveed-loaded)的镜像没有丢失历史的层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚(可以执行docker tag <LAYER ID> <IMAGE NAME>来回滚之前的层)。
docker port CONTAINER_ID #列出某个容器和宿主机之间的端口映射关系

容器rootfs命令

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
$ sudo docker ps
ID                  IMAGE               COMMAND             CREATED             STATUS              PORTS
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
$ docker commit c3f279d17e0a  SvenDowideit/testimage:version3
f5283438590d
$ docker images | head
REPOSITORY                        TAG                 ID                  CREATED             VIRTUAL SIZE
SvenDowideit/testimage            version3            f5283438590d        16 seconds ago      335.7 MB
使用说明:
这个命令的用处在于把有修改的container提交成新的Image,然后导出此Imange分发给其他场景中调试使用。Docker官方的建议是,当你在调试完Image的问题后,应该写一个新的Dockerfile文件来维护此Image。commit命令仅是一个临时创建Image的辅助命令。
docker cp CONTAINER:PATH HOSTPATH
使用说明:
使用cp可以把容器內的文件复制到Host主机上。这个命令在开发者开发应用的场景下,会需要把运行程序产生的结果复制出来的需求,在这个情况下就可以使用这个cp命令。
docker diff CONTAINER
例子:
$ sudo docker diff 7bb0e258aefe
C /dev
A /dev/kmsg
C /etc
A /etc/mtab
A /go
A /go/src
A /go/src/github.com
A /go/src/github.com/dotcloud
....
使用说明:
diff会列出3种容器内文件状态变化(A - Add, D - Delete, C - Change )的列表清单。构建Image的过程中需要的调试指令。

镜像仓库

docker [login|pull|push|search]
首先需要一个存放共享镜像的地方,在企业环境可以使用私有的镜像仓库,但为了方便起见,我们直接使用Docker的公共仓库。首先需要在Docker Hub注册一个用户,然后使用 docker login 命令登陆到仓库服务器。
docker login
Username: xxxxxx
Password:
Email: xxxxxx@******.com
Login Succeeded
然后我们需要将本地修改过的容器使用 docker commit 命令生成一个本地的镜像。注意,由于之后需要将镜像提交至Docker Hub,这里镜像的名字必须以自己的Docker Hub用户名作为前缀,否则在后面的 push 时候会遇到 403 “Access Denied: Not allowed to create Repo at given location” 错误。例如名为 linfan/employees。
docker commit node-app linfan/employees
a4281aa8baf9aee1173509b30b26b17fd1bb2de62d4d90fa31b86779dd15109b
docker images
REPOSITORY  TAG  IMAGE ID  CREATED  VIRTUAL SIZE
linfan/employees  latest  a4281aa8baf9  14 seconds ago  696.2 MB
最后,使用 docker push 命令将这个准备好的镜像提交到Docker Hub仓库中。
docker push linfan/employees
The push refers to a repository [linfan/employees] (len: 1)
Sending image list
...
Pushing tag for rev [5577d6743652] on {https://cdn-registry-1.docker.io/v1/repositories/linfan/employees/tags/latest}
提交完成后,在其他节点就可以使用 docker pull 命令获取到这个镜像了。
注意:严格来说,将数据库服务容器通过Docker Link暴露给应用服务容器的方法并不符合分布式应用的12条准则,因为通过Docker Link连接的两个容器必须运行在同一个物理主机上,数据与应用不能在集群中分别独立的部署或横向扩展。
search
使用方法:
docker search TERM
使用说明:
通过关键字搜索分享的Image。

本地镜像管理

docker images #列出所有的镜像
docker rmi image [image...] #删除镜像 
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
使用说明:
组合使用用户名,Image名字,标签名来组织管理Image。
docker  build -t edwardsbean/centos6-jdk1.7  .
Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk1.7:
(Dockerfile书写比较重要,需要重点学习)
docker history image #列出某个镜像之前做过的操作
docker save IMAGE_NAME >/directory/image_name.tar #(将某个镜像导出),导入可使用docker load < /directory/image_name.tar
docker export CONTAINER_ID > /directory/container.tar #(保存当前某个容器的状态信息),导入可使用cat /directory/container.tar |docker import - CONTAINER_NAME:tag

其他命令

docker [info|version]
docker info #结合docker vesion一起,可以随时使用这个命令把本地的配置信息提供出来,方便Docker的开发者快速定位问题。
docker version #显示Docker的版本号,API版本号,Git commit, Docker客户端和后台进程的Go版本号。


本文出自 “柠檬” 博客,请务必保留此出处http://xianglinhu.blog.51cto.com/5787032/1717512

docker使用基础总结

标签:操作系统   虚拟化   docker   

原文地址:http://xianglinhu.blog.51cto.com/5787032/1717512

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!