Docker基础命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。

Docker基础命令

场景示例图

123

docker version 查看docker版本

docker info 查看docker是否正确安装

sudo docker pull busybox 使用预先构建的镜像来创建一个镜像或者是容器

BusyBox是最小的Linux系统,他提供了该系统的主要功能,不包含一些与GUN的相关功能和选项

docker run busybox /bin/echo Hello World! - linux
docker run busybox echo hello world! - windows
打印Hello world!字样

sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done") 以后台进程的方式运行hello docker
docker logs $sample_job 查看job的当前状态

docker help 查看docker的所有的命令
docker stop $sample_job 停止名为sample_job的工作进程
docker restart $sample_job 重启名为sample_job的工作进程
docker rm $sample_job 完全移除$sample_job工作进程,要先停止
docker commit $sample_job job1 将容器状态保存为镜像,镜像名称只能取字符[a-z]和数字[0-9]
docker images 查看所有镜像列表
docker search (image-name) 检索名称为image-name的镜像
docker history (image-name) 查看名称为image-name的镜像历史版本
docker push (image-name) 将镜像推送到registry上


daemon 用于管理容器的后台进程。一般情况下,守护进程是一个长期运行的用来处理请求的进程服务。-d参数用于运行后台进程

docker build [options] PATH|URL 可以使用Dockerfile来构建镜像
还有一些Docker提供的额外选项,如:
–rm=true表示构建成功后,移除所有中间容器
–no-cache=false表示在构建过程中不使用缓存

docker attach container 与运行中的容器交互,并且可以随时观察容器內进程的运行状况

docker diff container 列出容器内发生变化的文件和目录,add/delete/change

events 打印指定时间内的容器的实时系统事件

docker import http://example.com/example.tar
docker import - example.tar
使用HTTP的URL从远程位置导入,而本地文件或者目录的导入需要使用-参数

docker export container > image.tar 用于将容器的系统文件打包

docker cp container:path hostpat 从容器内复制文件到指定的路径上

docker login [options] [server]
docker login localhost:8080
使用login登录Docker registry服务器,第二行是登陆到本机的registry

docker inspect container/image 收集有关容器和镜像的底层信息,包括容器的示例的IP地址,端口绑定列表,特定端口映射的搜索,收集配置的详细信息

docker kill [options] container 发出SIGKILL信号来停止容器的主进程

docker rmi image 移除一个或者多个镜像

docker wait 7su6sdf734 阻塞对指定容器的其他调用方法,知道容器停止后退出阻塞

docker load -t app.tar 从tar文件中载入镜像或仓库到STDIN

docker save image 保存镜像为tar文件并发送给STOUT

Dockerfile

Dockerfile 包含创建镜像所需要的全部指令。基于在Dockerfile中的指令,我们可以使用Docker build命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。
会使用INSTRUCTION argument这样命令格式

FROM <image name> 指定镜像基于哪个镜像创建,接下来的命令也会基于这个基础镜像

MAINTAINER <author name> 设置镜像的作者

RUN <command> 在shell或者exec的环境下执行

ADD <source> <destionation> 复制文件指令。destionation是指容器内的路径。source可以是URL或者启动配置上下文的一个文件

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
CMD是提供了容器默认的执行命令,多个CMD会抵消之前所有的指令,只有最后一个生效

EXPOSE <port> 指定容器在运行时监听的端口

ENTRYPOINT ["executable", "param1","param2"
ENTRYPOINT command param1 param2
ENTRYPOINT:配置给容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。

WORKDIR /path/to/workdir 指定RUN、CMD与ENTRYPOINT命令的工作目录

ENV <key> <value> 设置环境变量。它们使用键值对,增加运行程序的灵活性

USER <uid> 镜像正在运行时设置一个UID

VOLUME ["/data"] 授权访问从容器内到主机上的目录

Docker Registry

Docker入门教程(四)Docker Registry

Docker API

Docker Registry API

Docker Registry API是Docker Registry的REST API,它简化了镜像和仓库的存储。该API不能访问用户帐户或者获得授权。

GET /v1/images/(image_id)/layer 取出镜像层
PUT /v1/images/(image_id)/layer 插入镜像层
GET /v1/images/(image_id)/json 检索镜像
GET /v1/images/(image_id)/ancestry 检索根镜像
GET /v1/repositories/(namespace)/(repository)/tags
GET /v1/repositories/(namespace)/(repository)/tags/(tag*)
获取库里所有的标签或者指定标签
DELETE /v1/repositories/(namespace)/(repository)/tags/(tag*) 删除标签
GET /v1/_ping registry状态检查

Docker Hub API

Docker Hub API是Docker Hub的一个简单的REST API。Docker Hub 通过管理校验(checksums)以及公共命名空间(public namespaces)来控制着用户帐户和授权。该API还支持有关用户仓库和library仓库的操作。

PUT /v1/repositories/(repo_name)/ 创建一个新的仓库,使用以下命令可以创建新的library仓库
DELETE /v1/repositories/(repo_name)/ 删除已经存在的仓库
PUT /v1/repositories/(repo_name)/images 更新仓库镜像
GET /v1/repositories/(repo_name)/images 从仓库中获取镜像
PUT /v1/repositories/(repo_name)/auth 授权,使用Token获取仓库授权

PUT /v1/repositories/(namespace)/(repo_name)/ 创建用户仓库
DELETE /v1/repositories/(namespace)/(repo_name)/ 删除用户仓库
PUT /v1/repositories/(namespace)/(repo_name)/images 更新用户仓库镜像
GET /v1/repositories/(namespace)/(repo_name)/images 从仓库中下载镜像
GET /v1/users 验证用户登录
POST /v1/users 添加新用户
PUT /v1/users/(username)/ 更新用户信息

Docker Remote API

Docker Remote API是一个取代远程命令行界面(rcli)的REST API

GET /containers/json 容器列表,获取所有容器的清单
POST /containers/create 创建新容器
GET /containers/(id)/json 监控容器,使用容器id获取该容器底层信息
GET /containers/(id)/top 进程列表,获取容器内进程的清单
GET /containers/(id)/logs 容器日志,获取容器的标准输出和错误日志
GET /containers/(id)/export 导出容器,导出容器内容
POST /containers/(id)/start 启动容器
POST /containers/(id)/stop 停止容器
POST /containers/(id)/restart 重启容器
POST /containers/(id)/kill 终止容器

Docker Image API

POST /images/create 创建镜像
POST /commit 利用容器创建镜像
GET /images/json 获取镜像清单
POST /images/(name)/insert 导入指定的路径文件
DELETE /images/(name) 删除镜像
POST /images/(name)/push 推送镜像到Registry
POST /images/(name)/tag Tag镜像
GET /images/search搜索镜像
GET /images/(name)/history 查看镜像历史
POST /build 构建镜像

#参考
深入浅出Docker(一):Docker核心技术预览
Docker源码分析(一):Docker架构
Docker入门教程(一)介绍
Docker,从这里做起!
Docker教程中文版本