常用命令可分为以下几种
1.容器生命周期管理 # docker [run|start|stop|restart|kill|rm|pause|unpause]
2.容器操作运维 # docker [ps|inspect|top|attach|events|logs|wait|export|port]
3.容器rootfs命令 # docker [commit|cp|diff]
4.镜像仓库 # docker [login|pull|push|search]
5.本地镜像管理 # docker [images|rmi|tag|build|history|save|import]
6.其它命令 # docker [info|version]
镜像相关操作命令:
//创建镜像的方法有三种
//基于已有镜像的容器创建
//基于本地模板导入
//基于Dockerfile文件创建
commit 基于已有镜像的容器再生成一个新的镜像
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-m,--message="" 提交信息,为镜像描述内容
-a,--author="" 作者信息
-p,--pause=true 提交时暂停容器运行
My_Container:1 是提交的镜像名称和版本
# docker commit -m "Centos7 x64 First Image" -a "Loren" 33d619155d03 My_centos7:1
import 基于本地模板导入容器快照,将一个容器快照文件导入本地
# cat centos.tar | docker import - test/centos:v1.0
build 根据Dockerfile文件创建一个新的镜像
# docker build [OPTIONS] PATH | URL | -
-t 设定镜像名称及其标示号
-f,--file=Dockerfile 指定Dockerfile文件路径
# docker build -t test:2 -f /opt/
search Image_name 在docker index中搜索image
--automated=false
-s N, --stars=0 指定评价为N星级以上的镜像
# docker search centos6
pull Image_name 从docker register server 中下拉image或者repository
# docker pull centos
# docker pull centos:centos6
# docker pull dl.dockerpool.com:5050/centos:6.8 指定网站下载
push 推送一个image或者repository到registry
上传之前要把上传的image的tag修改为 hup用户名/镜像名字:tag
如 # docker tag centos6.8:v1 644597521/centos6.8:v1
images 显示本地的所有镜像列表
rmi 删除指定id的镜像
tag 修改镜像名
# docker tag test:1 My_image:v2 修改test标记好为1的名称为My_image标记号为v2
save 保存镜像到本地文件
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
-o, --output=""
# docker save -o centos_6.4.tar centos6.4:v1 # 导出本地的centos6.4:v1镜像为centos_6.4.tar文件
load 将本地文件导入到本地镜像库
Usage:docker load [OPTIONS]
-i, --input=""
# docker load < centos_6.4.tar # 将centos_6.4.tar文件导入到本地镜像列表
inspect 显示镜像或容器的信息。返回的是JSON格式信息,若只要其中一项内容,可以使用-f指定
容器常用操作命令:
run 运行一个新的container
# Usage:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-a,--attack
-i,--interactive=false 以交互模式运行容器,通常和-t搭配
-t,--tty=false 分配一个伪输入终端
-d 后台运行
-P 允许外部访问容器所有开启的端口
-p 端口映射 -p 80:80
--name 指定启动后容器的名字
# docker run -i -t centos
# docker run -i -t -d centos /bin/bash
# docker run -i -t -d --name My_Container centos /bin/bash
# docker run -i -t -d -p 80:80 --name My_Container centos /bin/bash
-v,--volume=[] 创建数据卷
/mnt 在容器中创建一个数据卷
/webapp:/src/webapp 目录挂载。将本地的webapp目录挂载到容器的/src/webapp。容器和宿主机的挂载目录都会同时变化
/test.txt:/tmp/text.txt 文件挂载。将本地的/test.txt文件挂载到容器的/tmp/text.txt(注意,只能修改容器挂载内的文件,否则不同步)
# docker run -ti -v /da --name=dbdata centos 创建一个容器dbdata,并创建一个数据卷挂载容器dbdata的/da目录
--volume-from 共享挂载数据卷
# docker run -ti -v /mnt --name db centos 创建一个数据卷容器db,并创建一个数据卷挂载到容器db的/mnt目录下
# docker run -ti --volume-from=db --name db1 centos # db1容器挂载db 容器中的数据卷
# docker run -ti --volume-from=db --name db2 centos # db2容器挂载db 容器中的数据卷
此时三个容器db,db1,db2都可以分享目录/mnt
--link 连接其他容器
--link NAME:Alias Name要建立连接的容器名,Alias连接的容器的别名
# docker run -ti -d -P --name web --link lamp:lamp centos6.4 /bin/bash 新建容器web和已经运行的容器lamp连接
ps 显示容器的列表
-a 显示所有信息
-q 只显示ID
# docker inspect 5d20c5528521 显示容器的详细信息
# docker ps -a -q ID
# docker inspect -f "{{ .State.Pid }}" 5d20c5528521 显示运行容器的PID
stop|start|restart 停止|启动|重启容器
exec 进入容器(推荐使用)
# docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# docker exec -t -i 216c623071b3 /bin/bash
attack CONTAINER_ID 进入容器
# docker attack 216c623071b3
使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了
nsenter
# yum install util-linux
# PID=$(docker inspect -f "{{ .State.Pid }}" 5d20c5528521)
# nsenter --target $PID --mount --uts --ipc --net --pid
# nsenter --target 10981 --mount --uts --ipc --net --pid
-t, --target <pid> 要获取名字空间的目标进程
-m, --mount[=<file>] enter mount namespace
-u, --uts[=<file>] enter UTS namespace (hostname etc)
-i, --ipc[=<file>] enter System V IPC namespace
-n, --net[=<file>] enter network namespace
-p, --pid[=<file>] enter pid namespace
rm 删除一个容器
-f, --force=true 强制删除
-l, --link=false 删除容器的连接,但保留容器
-v, --volumes=false 删除容器挂载的数据卷
export 导出容器,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态
-o, --output=""
# docker export 929bf12bc6ea > centos_6.4_php.tar
其它常用命令
docker -H 127.0.0.1:1234 -d & 修改服务端监听本地的TCP连接1234端口
volume 管理docker的文件
login 登录仓库https://hub.docker.com/,登录成功后信息保存文件在用户家目录/.docker/config.json
输入用户,密码,邮件。
下载 .bashrc_docker,并将内容放到 .bashrc 中
# wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
# echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc
# source ~/.bashrc
这个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;
而 docker-enter 可以进入容器或直接在容器内执行命令
http://liumissyou.blog.51cto.com/4828343/1792500