文档章节

docker容器使用快速了解普及

快乐就好-自由
 快乐就好-自由
发布于 2017/07/05 16:40
字数 2203
阅读 28
收藏 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
杭州
运维
私信 提问
Currents 云计算报告:容器正流行,Serverless 未成熟

云计算公司 DigitalOcean 近日发布了2018年6月 Currents 云计算季度报告,该报告对全球 5000 名行业专业人士进行调查。报告显示,随着容器技术和相关管理工具在过去一年的快速发展,49% 的受...

王练
07/04
1K
3
cSphere 希云 Docker 实训课程第二讲开始报名

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

oschina
2015/06/09
3.8K
12
千万美元融资后灵雀云CEO左玥首次公开演讲,分享Docker实践及创业经验

10月初,灵雀云刚刚公布了千万美元A轮融资的消息,CEO左玥被问到最多的就是“这笔钱怎么花?” 灵雀云不但肩负着为用户托管和存储Docker镜像的使命,更肩负着为开发者普及Docker和CaaS技术的...

小璐
2015/10/28
1K
6
OSC 大咖说 | 专访 cSphere 希云创始人王利俊:Docker 的企业落地之路

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

花仲马
2016/05/06
2.6K
0
cSphere希云推在线免费Docker实训课程

近日,国内首个Docker管理平台cSphere希云(https://csphere.cn)宣布将携手OSChina、阿里云,推出一系列免费的Docker培训课程。通过在线视频直播的方式,向热衷学习Docker技术的爱好者们提供...

山山081
2015/05/27
1
0

没有更多内容

加载失败,请刷新页面

加载更多

7个习惯提升python效率

1. 使用本地变量 尽量使用局部变量,避免使用全局变量 2.减少函数调用 (1)当我们判断对象的类别的时候,尽量使用isinstance(),其次使用id(),最不济使用type()   type(num)==type(0) type(...

糖宝lsh
15分钟前
2
0
mongodb使用

【mongodb全库备份:】 #cd /usr/local/mongodb/bin # ./mongodump 则会在当前目录生成一个dump目录,整个库会备份在这个目录下。 【指定数据库备份】 # ./mongodump -h localhost -d Hawkey...

硅谷课堂
20分钟前
1
0
hive count distinct和group by

首先,Hive的group by和count(distinct)都是去除重复的数据,某种程度上来说,两者产生的结果是一样的。 实例代码: select a,count(distinct b) from t group by aselect tt.a,count(tt...

张欢19933
23分钟前
1
0
day180-2018-12-17-英语流利阅读-待学习

“黄马甲”再上巴黎街头,马克龙成为众矢之的 毛西 2018-12-17 1.今日导读 圣诞将至,但此时的法国人都在担心周六的到来,因为巴黎的“黄背心”抗议活动已经连续进行了四周,举国上下人心惶惶...

飞鱼说编程
25分钟前
7
0
Deepin 下安装 Docker

Docker官网上并没有提供关于 Deepin 的 Docker 安装教程,由于 Deepin 是基于 Debian 的,所以可以参照官网 Debian的安装教程安装,但 Deepin 在定制过程中进行了大量修改,所以使用官方教程...

临江仙卜算子
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部