文档章节

docker容器使用快速了解普及

快乐就好-自由
 快乐就好-自由
发布于 2017/07/05 16:40
字数 2203
阅读 20
收藏 0
点赞 0
评论 0

此内容基于《第一本docker书》总结,内容次序不是很规范,按照书籍内容介绍部分有添加:
docker子命令概览
子命令分类                             子命令
Docker环境信息              info、version
容器生命周期管理            create、exec、kill、pause、restart、rm、run、start、stop、unpause
镜像仓库命令                login、logout、pull、push、 search
镜像管理                    build、images、import、load、rmi、save、tag、commit
容器运维操作                attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update
容器资源管理                volume、network
系统日志信息                events、history、logs
获取子命令详细信息
docker COMMAND_NAME –help


Docker容器操作
Docker守护进程绑定到多个地址
  -H tcp://IP:PORT –H unix:///home/docker/docker.sock
基于基础镜像运行容器:【base registry为Ubuntu】
docker run –i -t ubuntu /bin/bash
           -i 保证容器中的STDIN是开启的
           -t 为创建的容器分配一个伪tty终端
          --name CONTAINER_NAME 容器命名
          -d 创建守护式容器
带标签的Ubuntu镜像 ubuntu:12.04
容器启停
docker start|stop CONTAINER_NAME
docker ps 查看启动的容器
          -a 查看所有的容器
docker ps –n –x  会显示最后x个容器,不论容器正在运行还是已经停止
docker attach CONTAINER_NAME  附着到指定的容器上
docker logs COMTAINER_NAME 获取容器的日志
           -f 参数来监控docker的日志,与tail -f类似
           -t 每条日志加上时间戳
           --tail N 获取日志的最后N行内容
           --tail 0 –f  来跟踪某个容器的最新日志,不必读取整个日志
查看容器内的进程
docker top CONTAINER_NAME
在容器内部运行进程
docker exec –d CONTAINER_NAME COMMAND
            -d 需要运行一个后台进程
docker exec -i -t CONTAINER_NAME /bin/bash  为执行的进程创建TTY并捕获STDIN。exit后不会终止容器相当于创建一个新的bash回话。
docker run --restart=always ….
           --restart 会检查容器的退出代码,并据此来决定是否要重启容器,always无论容器的退出代码是什么,Docker都会自动重启该容器;on-failure还接受一个可选的重启次数参数   --restart=on-failure:5  最多重启5次
深入容器
docker inspect CONTAINER_NAME        会对容器进行详细的检查,然后返回其配置信息,包括名称命令、网络配置以及很多有用的数据         
                             -f|—format=’{{ .State.Runing }}’   查看日志内容,可以同时制定多个容器
删除容器
docker rm CONTAINER_NAME
docker rm ‘docker ps -a -q’删除所有
                       -q 只返回容器的ID
Docker安装之后,/var/lib/docker存放着docker镜像,容器以及容器的配置


Docker镜像操作
列出所有docker镜像
docker images
拉取镜像
docker pull registry_name|registry_name:xxx
查找镜像
docker search registry_name
Docker Hub有两种类型的仓库:
    用户仓库和顶层仓库
    用户仓库是docker用户创建的
    顶层仓库是由docker内部的人来管理的
    Jamturol/puppet
    Jamturol: 用户名
    puppet:仓库名

构建镜像
使用docker commit . 登录(Docker Hub)操作构建
使用docker build和Dockerfile文件
     docker commit CONTAINER_NAME|ID jamturol/apache2    提交的只是创建容器的镜像与容器的当前状态之间有差异的部分

Dockerfile文件
# version: 0.01   注释
FROM BASE_REGISTRY    # BASE_REGISTRY 作为新镜像的基础镜像
MAINTAINER xxx, “xxx@gmail.com” #镜像的作者及作者的邮件地址
RUN echo ‘xxx’> /path/to/file   #每条RUN指令都会创建一个新的镜像层
RUN 。。。   # RUN指令会在shell里使用命令包装器/bin/sh -c来执行,如果不支持shell或者不希望shell运行,可以使用exec格式的RUN指令。 RUN [ “apt-get”,”install”,”-y”,”nginx” ]
。。。
EXPOSE 80   # Docker该容器内的应用程序将会使用容器的指定端口。可以指定多个EXPOSE指令来向外部公开多个端口。
docker build -t=”jamturol/static_web” .   #运行Dockerfile
              -t 为新镜像设置了仓库和名称
              -t=”jamturol/static_web:v1” 为镜像设置一个标签,“镜像名:标签”,如果没有指定任何标签,Docker会将自动为镜像设置一个latest标签
              --no-cache 略过缓存功能,每个包使用最新版本
ENV REFRESHED_AT 2017-07-05   #设置一个名为REFRESHED_AT的环境变量
深入探求镜像是如何构建出来的
docker history REGISTRY_NAME|ID
从新镜像启动一个容器
docker run –d –p 80 --name static_web jamtuol/static_web nginx –g “deamon off;”
       以前台方式运行nginx,-p公开哪些网络端口给外部
docker ps –l     查看端口的映射情况
docker port ID 80  查看容器端口的映射情况
            -P  大写公开在Dockerfile中的EXPOSE设置的所有端口
            -p IP:PORT1:PORT2 将容器的port2端口绑定到宿主机的port1端口上
CMD 指定容器启动时要运行的命令,   CMD [“/bin/bash”,”-l”]
使用docker run命令可以覆盖CMD指令
ENTRYPOINT  docker run命令行中指定的任何参数都会被当作参数再次传递给ENTRYPOINT指令中指定的命令
ENTRYPOINT [“/usr/sbin/nginx”]
docker run 的--entrypoint标志覆盖ENTRYPOINT指令
WORKDIR  在容器内部设置一个工作目录,ENTRYPOINT和CMD指定的程序会在这个目录下执行,可设置多个
docker run –w /var/log …
                     -w 在运行时覆盖工作目录
ENV设置的环境变量,取值为$变量名,这些变量会被持久保存到从我们的镜像创建的任何容器中
USER  指定该镜像会以什么样的用户去运行
USER nginx  也可以是UID,指定user和group
USER UID
USER user:group
VOLUME [“/opt/project”]   基于此镜像创建的任何容器,创建一个名为/opt/project的挂载点,也可以指定多个卷 
VOLUME [“/opt/project”,”/data”]
ADD software.lic /opt/application/software.lic   将构建环境下的文件和目录复制到镜像中,在安装应用程序时,会使用Docker通过目的地址参数末尾的字符来判断文件源是目录还是文件
COPY conf.d /etc/apache2   把本地conf.d目录中的文件复制到/etc/apache2/目录中。copy只关心在构建上下文中复制本地文件,而不会去做文件提取和解压的工作,如果目的位置不存在,Docker会自动创建所需要的目录结构
ONBUILD  能为镜像添加触发器,当一个镜像被使用做其他镜像的基础镜像时,该镜像中的触发器将会执行,触发器会在构建过程中插入新指令,可以认为这些指令是紧跟在FROM之后指定的,触发器可以是任何构建指令
ONBUILD ADD . /opp/src
ONBUILD RUN cd /app/src && make


镜像打包及导入相关操作
打包一个镜像
docker save REPO_NAME:TAG > filename.tar
docker load < filename.tar  加载一个镜像
删除镜像
docker rmi jamtuol/static_web
docker run –v $PWD/website:/var/www/html/website:ro ….
           -v 指定了卷的源目录(本地宿主机的目录)和容器里的目的目录,两个目录通过:来分隔,目的目录不存在,会自动创建,ro或者rw来定读写状态
docker run --link redis:db ...
           --link 标志创建了两个容器间的父子连接,需要两个参数一个是要连接的容器名字,另一个是连接后容器的别名
docker run -p 4567 --name webapp --link redis:db -t -i -v $PWD/webapp:/opt/webapp jamturol/sintra /bin/bash
           可以强制docker只允许有连接的容器之间互相通信。需要在启动docker守护进程时加上--icc=false,关闭所有没有连接的容器间的通信。被连接的容器必须运行在同一个docker宿主机上
docker run 中加入--dns或者--dns-search为某个容器单独配置dns
RUN shell.sh   运行shell脚本
可以通过多个文件来执行构建
Dockerfile、shell.sh、var.txt等
docker run --privileged ...
           可以启动docker特权模式,允许以其宿主机具有的(几乎)所有能力来运行容器,包括一些内核特性和设备访问
docker wait CONTAINER_NAME 等待程序退出得到返回码
docker run --cidfile=/tmp/CONTAINERID.txt
           让docker截获容器id并将其存到--cidfile选项指定的文件
docker run --rm ...  会在容器进程运行完毕后,自动删除容器,对于只用一次的容器和用完即扔的容器很有用
在Dockerfile中指定了VOLUME时,在run对应的镜像启动容器,容器中就有对外的挂载点。可以通过inspect看到,如果没有指定,则没有对外的挂载点
Dockerfile使用for
RUN for var in v{v..8};do touch $DIRS/$var; done   # DIRS是ENV指定的环境变量
serf是一个去中心化的服务发现和编排的解决方案,特点是轻量级和高可用,同时具备容错的特性
docker run -p 53:53/udp ...  以udp的方式
docker run -h CONTAINER_host_name 。。。
docker各语言支持多种SDK

© 著作权归作者所有

共有 人打赏支持
快乐就好-自由
粉丝 2
博文 66
码字总数 104537
作品 0
杭州
运维
OSC 大咖说 | 专访 cSphere 希云创始人王利俊:Docker 的企业落地之路

不知道有多少OSCer还有印象,去年6月份,开源中国社区曾参与组织了3次以Docker为主题的实训课程,手把手的实操培训,吸引了将近4000余人次报名学习。这个系列实训课程的另一个重要组织者,师...

花仲马 ⋅ 2016/05/06 ⋅ 0

cSphere 希云 Docker 实训课程第二讲开始报名

Docker 实训第一讲《Docker实战之入门以及Dockerfile》上周刚刚结束,原计划课程报名人数只限1000人,但在报名截止前,人数已远超这个数字,达到1300人,这大大超出了组织者的预期。实训当晚...

oschina ⋅ 2015/06/09 ⋅ 12

2017微软拥抱容器技术历程回顾,手把手带您构建原生的Windows 容器

width="auto" class=" " src="http://ss.csdn.net/p?http://mmbiz.qpic.cn/mmbizpng/lFlEvbSbgnWcxpjxTg9aDV8ZhtBYEBTLdiaxSsLye2LPfw7CGQ15F02ohqv05Aw7LUfOJWicyoTtc40DIoxzhVHg/640?wxfmt......

dt763C ⋅ 2017/12/29 ⋅ 0

投资容器云技术能赚到钱吗?

提起云,大家应该并不陌生,我们平时经常用的百度云盘、钉钉、阿里云邮箱等都属于云服务的范畴,与这些耳熟能详的云不同的是,容器云对于大多数人来说是一个陌生的概念,很多人甚至是第一次听...

m2l0zgssvc7r69efdtj ⋅ 2017/10/24 ⋅ 0

体验 Docker 之以前的工作日志汇总

n# 2014/09/02 安装 CentOS 7 网络配置 CentOS 7 安装完成后,网络不可以。CentOS 7 网络配置和 6 有些不同。CentOS 7 虚拟机安装完成后有一个随机的网卡,在我这叫 。静态 IP 没有配置成功。...

编走编想 ⋅ 2014/10/30 ⋅ 0

Docker 会是改变世界的那只“箱子”吗?

“很多时候,我们面临未来的预测和期望,其实很多答案已经存在在历史中。” 改变世界的“箱子” “没有集装箱,就不会有全球化。”《经济学家》这个评论可以说是对于这个普通的箱子的历史性地...

oschina ⋅ 2016/05/28 ⋅ 8

Kubernetes是Docker的终结者?我不认同!

Docker的估值已经超过10亿美元,成为容器引擎的标准,但是谷歌的Kubernetes在业务流程引擎中也越来越火。我经常被问到,Kubernetes是Docker的威胁吗? 许多人认为容器中的价值是在业务流程层...

大数据在浙里 ⋅ 2017/05/05 ⋅ 0

资源 | GitHub新项目Deepo:一键安装11项深度学习框架与环境

  选自GitHub   机器之心编译   参与:蒋思源      最近,一项关注于快速构建深度学习环境的 GitHub 项目十分流行,这个名为 Deepo 的项目由一系列 Docker 镜像组成,包含了 Tens...

机器之心 ⋅ 2017/12/18 ⋅ 0

docker入门安装与简单使用

快速了解 (一) Docker 是什么 官方给出的定义是:Docker是一个集开发,打包,运行应用于一体的开放式平台。Docker可以用来快速交付应用。使用Docker,你可以将应用程序从你的基础设施中分离...

嘿嘿!! ⋅ 2017/02/17 ⋅ 0

Docker 线上活动问题汇总,九问九答助您了解 Docker EE 2.0版本

本文首发自“Docker公司”公众号(ID:docker-cn) 编译丨小东 每周一、三、五 与您不见不散! 在近期的线上活动中,我们围绕着 Docker EE 2.0 版本的新功能做了一期分享会。目前 Docke EE 是...

docker公司 ⋅ 05/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 47分钟前 ⋅ 0

Spring JavaConfig 注解

JavaConfig注解允许开发者将Bean的定义和配置放在Java类中。它是除使用XML文件定义和配置Bean外的另一种方案。 配置: 如一个Bean如果在XML文件可以这样配置: <bean id="helloBean" class="...

霍淇滨 ⋅ 54分钟前 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 56分钟前 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 今天 ⋅ 0

informix的常用SQL语句

1、创建数据库 eg1. 创建不记录日志的库testdb,参考语句如下: CREATE DATABASE testdb; eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解...

wangxuwei ⋅ 今天 ⋅ 0

matplotlib画图

最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 from pylab import *from numpy import *x = linspace(0, 5, 10)y = x ** 2figure()plot(x, y, 'r')...

Dr_hu ⋅ 今天 ⋅ 0

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 今天 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 今天 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部