docker使用基础总结

docker使用笔记node

authorization:胡湘林python

email: a714585725@qq.comgit

一、安装dockergithub

CentOS6web

对于 CentOS6,可使用 EPEL 库安装 Docker,命令以下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,能够直接安装:ubuntu


yum install dockercentos

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


service docker start
chkconfig docker on

二、获取镜像

可使用 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 应用。


三、列出镜像列表

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

$ sudo docker p_w_picpaths
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.0四、12.0四、12.十、13.0四、14.04 等。


四、启动容器

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

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

五、容器基本使用

容器生命周期管理 — 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 [p_w_picpaths|rmi|tag|build|history|save|import]
其余命令 — docker [info|version]

容器生命周期管理

# 在容器中运行"echo"命令,输出"hello word"
$docker run p_w_picpath_name echo "hello word"
# 交互式进入容器中
$docker run -i -t p_w_picpath_name /bin/bash
# 在容器中安装新的程序
$docker run p_w_picpath_name yum install -y app_name
#使容器在守护态运行
docker run -d -i -t  p_w_picpath_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/p_w_picpath_name.tar #(将某个镜像导出),导入可以使用docker load < /directory/p_w_picpath_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/testp_w_picpath:version3
f5283438590d
$ docker p_w_picpaths | head
REPOSITORY                        TAG                 ID                  CREATED             VIRTUAL SIZE
SvenDowideit/testp_w_picpath            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 p_w_picpaths
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 p_w_picpath 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 p_w_picpaths #列出全部的镜像
docker rmi p_w_picpath [p_w_picpath...] #删除镜像 
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
使用说明:
组合使用用户名,Image名字,标签名来组织管理Image。
docker  build -t edwardsbean/centos6-jdk1.7  .
Dockerfile用来建立一个自定义的p_w_picpath,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来建立新的p_w_picpath,并命名为edwardsbean/centos6-jdk1.7:
(Dockerfile书写比较重要,须要重点学习)
docker history p_w_picpath #列出某个镜像以前作过的操做
docker save IMAGE_NAME >/directory/p_w_picpath_name.tar #(将某个镜像导出),导入可以使用docker load < /directory/p_w_picpath_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版本号。
相关文章
相关标签/搜索