`
haiouc
  • 浏览: 117352 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一小时Docker教程

阅读更多

Docker是什么

 

Docker是一个改进的容器技术。具体的改进体现在,Docker为容器引入了镜像,使得容器可以从预先定义好的模版(images)创建出来,并且这个模版还是分层的。

  

Docker经常被提起的特点

    ·  轻量,体现在内存占用小,高密度

    ·  快速,毫秒启动

    ·  隔离,沙盒技术更像虚拟机

  

Docker技术的基础

    ·  namespace,容器隔离的基础,保证A容器看不到B容器. 6个名空间:User,Mnt,Network,UTS,IPC,Pid

    ·  cgroups,容器资源统计和隔离。主要用到的cgroups子系统:cpu,blkio,device,freezer,memory

    ·  unionfs,典型:aufs/overlayfs,分层镜像实现的基础

  

Docker组件

    ·  docker Client客户端---->docker服务器进程发起请求,如:创建、停止、销毁容器等操作

    ·  docker Server服务器进程-->处理所有docker的请求,管理所有容器

    ·  docker Registry镜像仓库-->镜像存放的中央仓库,可看作是存放二进制的scm

  

Docker安装

 Docker的安装非常简单,支持目前所有主流操作系统,从MacWindows到各种Linux发行版
具体参考:docker安装 <https://docs.docker.com/installation/>

  

Docker常见命令

 

容器相关操作

    ·  docker create # 创建一个容器但是不启动它

    ·  docker run # 创建并启动一个容器

    ·  docker stop # 停止容器运行,发送信号SIGTERM

    ·  docker start # 启动一个停止状态的容器

    ·  docker restart # 重启一个容器

    ·  docker rm # 删除一个容器

    ·  docker kill # 发送信号给容器,默认SIGKILL

    ·  docker attach # 连接(进入)到一个正在运行的容器

    ·  docker wait # 阻塞到一个容器,直到容器停止运行

  

获取容器相关信息

    ·  docker ps # 显示状态为运行(Up)的容器

    ·  docker ps -a # 显示所有容器,包括运行中(Up)的和退出的(Exited)

    ·  docker inspect # 深入容器内部获取容器所有信息

    ·  docker logs # 查看容器的日志(stdout/stderr)

    ·  docker events # 得到docker服务器的实时的事件

    ·  docker port # 显示容器的端口映射

    ·  docker top # 显示容器的进程信息

    ·  docker diff # 显示容器文件系统的前后变化

  

导出容器

    ·  docker cp # 从容器里向外拷贝文件或目录

    ·  docker export # 将容器整个文件系统导出为一个tar包,不带layerstag等信息

  

执行

    ·  docker exec # 在容器里执行一个命令,可以执行bash进入交互式

  

镜像操作

    ·  docker images # 显示本地所有的镜像列表

    ·  docker import # 从一个tar包创建一个镜像,往往和export结合使用

    ·  docker build # 使用Dockerfile创建镜像(推荐)

    ·  docker commit # 从容器创建镜像

    ·  docker rmi # 删除一个镜像

    ·  docker load # 从一个tar包创建一个镜像,和save配合使用

    ·  docker save # 将一个镜像保存为一个tar包,带layerstag信息

    ·  docker history # 显示生成一个镜像的历史命令

    ·  docker tag # 为镜像起一个别名

  

镜像仓库(registry)操作

    ·  docker login # 登录到一个registry

    ·  docker search # registry仓库搜索镜像

    ·  docker pull # 从仓库下载镜像到本地

    ·  docker push # 将一个镜像pushregistry仓库中

  

 

获取Container IP地址(Container状态必须是Up

 docker inspect id | grep IPAddress | cut -d '"' -f 4

  

获取端口映射

 docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' id

  

获取环境变量

 docker exec container_id env

  

杀掉所有正在运行的容器

 docker kill $(docker ps -q)

  

删除老的(一周前创建)容器

 docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm

  

删除已经停止的容器

 docker rm `docker ps -a -q`

  

删除所有镜像,小心

 docker rmi $(docker images -q)

  

Dockerfile

 Dockerfiledocker构建镜像的基础,也是docker区别于其他容器的重要特征,正是有了Dockerfiledocker的自动化和可移植性才成为可能。

 

不论是开发还是运维,学会编写Dockerfile几乎是必备的,这有助于你理解整个容器的运行。

 FROM , 从一个基础镜像构建新的镜像

 FROM ubuntu

 MAINTAINER , 维护者信息

 MAINTAINER William <wlj@nicescale.com>

 ENV , 设置环境变量

 ENV TEST 1

 RUN , 非交互式运行shell命令

 RUN apt-get -y update

 RUN apt-get -y install nginx

 ADD , 将外部文件拷贝到镜像里,src可以为url

 ADD http://nicescale.com/  /data/nicescale.tgz

 WORKDIR /path/to/workdir, 设置工作目录

 WORKDIR /var/www

 USER , 设置用户ID

 USER nginx

 VULUME <#dir>, 设置volume

 VOLUME [/data]

 EXPOSE , 暴露哪些端口

 EXPOSE 80 443

 ENTRYPOINT [‘executable’, ‘param1’,’param2’]执行命令

 ENTRYPOINT ["/usr/sbin/nginx"]

 CMD [“param1”,”param2”]

 CMD ["start"]

 

docker创建、启动container时执行的命令,如果设置了ENTRYPOINT,则CMD将作为参数

  

Dockerfile最佳实践

 ·  尽量将一些常用不变的指令放到前面

 ·  CMDENTRYPOINT尽量使用json数组方式

 

通过Dockerfile构建image

 docker build csphere/nginx:1.7 .

   

镜像仓库Registry

 镜像从Dockerfile build生成后,需要将镜像推送(push)到镜像仓库。企业内部都需要构建一个私有docker registry,这个registry可以看作二进制的scmCI/CD也需要围绕registry进行。

 

部署registry

 mkdir /registry

 docker run  -p 80:5000  -e STORAGE_PATH=/registry  -v /registry:/registry  registry:2.0

 

推送镜像保存到仓库

 假设192.168.1.2registry仓库的地址:

 docker tag  csphere/nginx:1.7 192.168.1.2/csphere/nginx:1.7

 docker push 192.168.1.2/csphere/nginx:1.7

 

分享到:
评论

相关推荐

    docker-selenium:Selenium Grid Server的Docker映像

    Selenium Grid Server的Docker映像志愿者贡献者投入了数千小时的时间,并根据免费提供了源代码,从而使该项目成为可能。 :backhand_index_pointing_right: 现状:Grid 4正在开发中并且处于我们会定期进行预发行以...

    python-ml-and-docker:在制品| 弄清楚Python的ML库以及Docker的工作方式

    我经历了大约10个小时的Docker教程内容(以2倍的速度),它们都没有回答我的所有问题(是的,我可以以2倍的速度理解事物,因为我通常以2.5-3倍的速度观看:/)。 这是我在回答我的问题,以便您的大脑不会因...

    Kubernetes(K8S)超快速入门视频教程

    Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 适用人群 零基础以及有一定运维经验的小伙伴 课程内容 1、K8S概述 2、K8S功能及架构设计 3、K8S集群部署 4、K8S资源清单YAML 5...

    01零基础1小时学.net core编程,极简教程,简到奔溃dnc+vue

    - Docker:一个开源的应用容器引擎,可以在容器中部署.NET Core应用。 在教程中,还提到了一些实践步骤: - 创建.NET Core项目:通过Visual Studio创建一个空的.NET Core项目,并安装必要的Nuget包。 - 下载示例...

    SpringBootLearning_forezp.tar.gz

    《SpringBoot非官方教程》 入门篇 SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程 配置篇 SpringBoot非官方教程 | 第二篇:Spring Boot配置...SpringBoot非官方教程 | 第二十五篇: 2小时学会springboot

    软路由另类自己编译自己升级实现方法.doc

    然后,我们搭建Docker编译环境,创建一个名为p3terx/openwrt-build-env的Docker容器,将其与主机的指定路径映射,以便在容器内进行编译工作。 在Docker容器内部,克隆Lean的OpenWrt源码仓库,执行更新和安装feed的...

    01_零基础1小时学编程_极速入门dnc_vue前后端分离

    标题中提到的知识点为“零基础1小时学编程”,表明本教程的受众是完全没有编程基础的初学者。内容侧重于教授编程思维,而并非深奥的编程语言,意在帮助初学者快速入门。描述中提及“极速入门dnc_vue前后端分离”,...

    日志分割工具cronolog-1.6.2.tar.gz

    cronolog能够根据时间间隔(如每小时、每天)自动创建新的日志文件,并重定向新产生的日志数据到对应的文件中,这样既保持了日志文件的大小在可控范围内,又便于按时间轴查看和分析日志。 "日志分割.txt"可能是关于...

    Asky:Asky开放式架构:极简,轻量,极致性能《 Asky零基础1小时学编程dnc + vue + tidb + redis + rabbitMQ + ES》 QQ群779699538

    零基础入门,从零开始全程演示,如何开发一个大型互联网系统,开源教程+开源代码+开源解决方案 零基础1小时学完前3节后,可学会基本编程思路,后面的教程是在这基础上的逐步深入 每节教程学习时间30分钟左右,...

    FastSurfer:FastSurferCNN的PyTorch实现

    这种方法为体积分析(在1分钟之内)和基于表面的厚度分析(仅在1小时左右的运行时间内)提供了完整的FreeSurfer替代方案。 整个管道包括两个主要部分: (i)FastSurferCNN-一种先进的深度学习架构,能够在不到1...

    学习Linux .rar学习Linux .rar学习Linux .rar学习Linux .rar

    标题中的"学习Linux .rar"强调了这是一个关于Linux的学习资料,可能是电子书、教程或一系列的学习资源。多次重复可能是为了强调其重要性和学习的反复性。描述中提到,这是一个值得下载阅读的书籍,暗示内容丰富,...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ 一小时教你手写MyBatis框架.mp4 │ ├─面试必问-架构杀手锏——java混乱的日志体系 │ java混亂日志体系源码揭秘.mp4 │ ├─面试必问-深入微服务之SpringBoot&Docker1 │ 深入微服务之SpringBoot&Docker.mp4 ...

    DGX+客户现场培训材料.pdf

    NVIDIA提供全面的售后服务支持,包括软件更新与升级、直接与技术专家沟通、云端管理服务、易用的知识库资源、快速响应的技术支持和24小时电话访问等。这些服务确保用户能够及时获取帮助并解决问题,从而保障DGX系统...

    nodejs

    节点js讲解菜谱Node.js初学者教程:1小时内学习Node | 莫什定义非常适合原型设计和敏捷开发。 超快且高度可扩展。 更干净,更一致的代码库。建筑学Node.exe是一个用于JS代码的c ++运行时环境。 包括Chrome v8引擎。 ...

    图书:11小时之Linux学习指南

    《11小时之Linux学习指南》是一本专为想要快速掌握Linux基础知识的读者设计的教程。这本书涵盖了Linux操作系统的核心概念、基本操作以及实用工具的使用,旨在帮助读者在短时间内建立起对Linux系统的理解和应用能力。...

    棋牌中心全套源代码

    例如,使用Nginx或Apache作为Web服务器,Docker进行容器化部署,或者使用云服务如阿里云、AWS等。 6. 安全性:考虑到源代码涉及到金钱交易和用户数据,安全性是至关重要的。这包括防止SQL注入、XSS攻击、DDoS防护,...

    17小时微服务架构实战课程【视频课程】下载整理.zip

    本课程以"17小时微服务架构实战课程"为主题,旨在帮助程序员深入理解和掌握微服务架构的相关知识和技术。微服务架构是近年来在IT行业中广泛应用的一种设计模式,它将单一应用程序划分为一组小型、独立的服务,每个...

    py-hadoop-tutorial:一起使用Python和Hadoop源材料-Source material

    这是一个使用Ibis和PySpark与Hadoop中存储的数据(特别是HDFS和Impala Table中的文件)进行交互的教程。 您将需要访问Hadoop集群(或VM / Docker映像),具有python解释器(安装了requirements.txt中列出的软件包)...

Global site tag (gtag.js) - Google Analytics