导读:本文系统性介绍Docker安装、Docker组件、Docker命令、Dockerfile语法和Docker应用,通过上述介绍使我们已经对docker基本操作有一定了解。

一、前言

  本文将系统性的介绍Docker相关的知识;包含Docker命令,Dockerfile语法,如何用Docker进行构建运行。

二、Docker安装

  本文以centos7及以上版本为例来说明Docker安装;Docker底层对应的是镜像,不可写的文件系统,它的存储方式比较多。

  • AUFS:(AnotherUnionFS)是一种Union FS,是文件级的存储驱动

  • Overlay:是一种Union FS,和AUFS的多层不同的是Overlay只有两层:一个upper文件系统和一个lower文件系统,分别代表Docker的镜像层和容器层

  • Device mapper:是Linux内核2.6.9后支持的,提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略

  • Btrfs:被称为下一代写时复制文件系统,并入Linux内核,也是文件级级存储,但可以像Device mapper一直接操作底层设备

  •   ZFS:文件系统是一个革命性的全新的文件系统,它从根本上改变了文件系统的管理方式,ZFS 完全抛弃了“卷管理”,不再创建虚拟的卷,而是把所有设备集中到一个存储池中来进行管理,用“存储池”的概念来管理物理存储空间

  •   Overlay2:要取代之前overlay的主要原因是它能“支持多个下层目录”,能解决原先驱动中inode耗尽的问题

本文将以Overlay2进行示例:

1.升级内核CentOS7.0以上?

2.安装镜像仓库

  1)清理旧版本

  rpm -qa |grep docker

  yum  -y  remove docker*

  2)安装镜像仓库

  yum install  docker-distribution

  修改配置文件

  vim/etc/docker-distribution/registry/config.yml

  重启镜像仓库

  systemctl daemon-reload

  service  docker-distribution restart

  service  docker-distribution status

  访问镜像仓库服务:http://x.x.x.x:5000

  3)安装Docker

  

  4)配置Docker存储

  5)启动docker

  systemctl start docker

  查看docker信息

  docker info

三、Docker组件

  Docker基础组件

  • dockerd: Dockerdaemon进程,访问总入口

  • docker: Docker 客户端

  • docker-containerd:一个控制runC的守护进程,containerd利用runC的高级功能(如seccomp和用户名称空间支持)以及用于容器克隆和实时迁移的检查点和恢复

  • docker-containerd-ctr:docker-containerd客户端,基于gPRC APIs通信

  • docker-containerd-shim:一个位于运行时实现前面的小垫片,它允许它重新分配来初始化并处理来自调用者的重新附加。

  • docker-runc:根据OCI规范产生和运行容器的CLI工具。

四、Docker命令

  1.创建一个容器:docker run

  2.查看容器列表:docker ps

  3.查看所有容器:docker ps -a

4.启动、停止、重启容器: docker start|stop|restart  容器ID|容器名

  5.查看容器日志:docker logs –f容器ID|容器名

  6.删除某个容器:docker rm –f容器ID|容器名

  7.删除所有容器:docker rm $(docker ps -a -q)

  8.查看容器运行状态:docker stats容器ID|容器名

  9.进入另一个容器:docker exec–ti 容器ID|容器名

  10.进入容器观察运行情况: docker attach容器ID|容器名

  11.查看容器详细信息 docker inspect容器ID|容器名

  12.查看当前机器上镜像 docker images

  13.拉取镜像 docker pull 镜像名

  14.将镜像推送镜像仓库 docker push 镜像名

  15.构建镜像 docker build

  16.将镜像倒出成文件 docker save镜像 > xxx.tar.gz

  17.将文件加载成镜像 docker load < xxx.tar.gz

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

  19.登录到Docker registry服务器 docker login

  20.杀掉容器 docker kill 容器ID|容器名

  21.移除镜像 docker rmi

五、Dockerfile介绍

  Dockerfile是由一些列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像

  常见命令

  1.FROM ——基础镜像来源

  2.MAINTAINER——维护者是谁

  3.RUN——当前基础镜像执行,并且提交新镜像

  4.ADD——复制内容到容器中;普通文件,压缩文件,url

  5.COPY——本地内容复制到容器中,只能是普通文件及文件夹

  6.EXPOSE——告诉Docker服务端容器暴露的端口号,类似docker -p

  7.CMD——容器执行命令,每个容器只能执行最后一条命令

  8.ENTRYPOINT——容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖

  9.ENV——环境变量

  10.VOLUME——容器需要的挂载卷

  11.WORKDIR——后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录

  12.ONBUILD——配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令

  13.USER——指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户

六、Docker应用

  本示例将以平台kubernetes集群日志采集fluentd容器来说明docker是如何使用的

  1.编写fluentd Dockerfile

  FROM debian:stretch-slim

  MAINTAINER zhangbins@yonyou.com

  # copy local file to container

  COPY clean-apt /usr/bin

  COPY clean-install /usr/bin

  COPY Gemfile /Gemfile

  #proxy setting, Over the wall

  ENV http_proxy=http://10.3.15.206:8888

  ENV https_proxy=http://10.3.15.206:8888

  # 1. Install & configure dependencies.

  # 2. Install fluentd via ruby.

  # 3. Remove build dependencies.

  # 4. Cleanup leftover caches & files.

  RUN BUILD_DEPS=“make patch gcc g++ libc6-dev ruby-dev” \

 

  # Expose prometheus metrics.

  EXPOSE 80

  ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1

  # Start Fluentd to pick up our config that watches Docker container logs.

  CMD /run.sh $FLUENTD_ARGS

  2.构建镜像

  docker build –t10.3.15.191:5000/tools/fluentd-http:0.3 .

  3.运行镜像

  宿主机上的/var/log目录映射容器中进行日志采集

  4.查看容器

  5.进入容器

  6.停止容器

  7.查看容器

  8.容器日志

  9.运行状态

  本次docker介绍到这里,还有很多知识没有涉及到,比如说docker网络、docker镜像导入导出等,整个docker知识还是比较广泛的,需要详细去了解和实践。

容器化-Docker实战的更多相关文章

  1. .NETCore 实现容器化Docker与私有镜像仓库管理

    原文:.NETCore 实现容器化Docker与私有镜像仓库管理 一.Docker介绍 Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技 ...

  2. AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排

    一.前言 上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来. 如果该应用继续引入mysql.redis.job等若干服务,到时候发布一次得工作量之大 ...

  3. AspNetCore容器化(Docker)部署(一) —— 入门

    一.docker注册安装 Windows Docker Desktop https://www.docker.com/products/docker-desktop Linux Docker CE h ...

  4. AspNetCore容器化(Docker)部署(二) —— 多容器通信

    一.前言 着上一篇 AspNetCore容器化(Docker)部署(一) —— 入门,在单个容器helloworld的基础上引入nginx反向代理服务器组成多容器应用. 二.配置反向代理转接 配置转接 ...

  5. AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署

    一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...

  6. .NET Core容器化@Docker

    温馨提示:本文适合动手演练,效果更佳.  1. 引言 我们知道. NET Core最大的特性之一就是跨平台,而对于跨平台,似乎大家印象中就是可以在非Windows系统上部署运行.而至于如何操作,可能就 ...

  7. 容器化-Docker介绍

    导读:本文章对Docker技术进行了介绍,阐述了Docker的技术发展历程.容器与虚拟机的差异.Docker原理.特点.Docker三组件和Docker带来的影响,为我们进一步理解Docker打下基础 ...

  8. oracle容器化docker解决方案

    Docker提供了轻量级的虚拟化,它几乎没有任何额外开销. 提供了一个从开发到上线均一致的环境. 开发效率:一是我们想让开发环境尽量贴近生产环境 二是我们想快速搭建开发环境   基于docker研发小 ...

  9. 微服务与容器化Docker

    1.Docker的应用案例 2. 3. 4.docker的核心:镜像.仓库.容器 Build构建镜像:类似于集装箱. Ship运输镜像,仓库:类似于码头.将镜像运输到仓库. Run运行镜像:容器:类似 ...

随机推荐

  1. MySQL数据库有哪些安全相关的参数需要修改?

    https://dev.mysql.com/doc/refman/5.7/en/security-options.htmlhttps://dev.mysql.com/doc/refman/5.7/en ...

  2. LeetCode算法题-First Unique Character in a String(Java实现)

    这是悦乐书的第213次更新,第226篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第81题(顺位题号是387).给定一个字符串,找到它中的第一个非重复字符并返回它的索引. ...

  3. Linux 小知识翻译 - 「DNS服务器」

    这次聊聊「DNS服务器」. DNS(Domain Name System)服务器,也被称为域名服务器. 因为使用互联网的时候,必须要指定DNS服务器,所以你一定听过DNS这个名字吧. 那么,这个DNS ...

  4. Set replication in Hadoop

    I was trying loading file using hadoop API as an experiment. I want to set replication to minimum as ...

  5. 退出全屏监听ESC事件,这里没有用keydown来监听,因为全屏时候keydown监听不到

    浏览器故意不上监听ESC键的,跟网页加载完成之后不能用程序使浏览器全屏一样的道理,避免开发者恶意全屏,不啰嗦,解决办法如下:window.onresize = function(){if(!check ...

  6. 【SDOI2017】遗忘的集合

    题目描述 好神仙啊,我还真的以为这是个构造题,结果是有唯一解的. 设答案为多项式\(a,a_i\in\{0,1\}\). 则: \[ f(x)=\Pi (\frac{1}{1-x^i})^{a_i} ...

  7. SQLite中的WAL机制详细介绍-与回滚日志原理

    一.什么是WAL? WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,SQLite在3.7.0版本引入了该特性. 二.WAL如何工作? 在引入WAL机制 ...

  8. Interrupt

    Interrupt ,给线程发送一个中断信号 给t1线程发送了中断信号,t1对线程的中断信号判断后,跳出循环,线程t1运行结束 public class Demo { public static vo ...

  9. [TJOI2017]DNA

    嘟嘟嘟 这题怎么想都想不出来,最后还是敲了暴力,喜提40分-- 正解竟然也是暴力-- 用\(s_0\)构造SAM,然后把\(s\)扔上去暴力dfs:记录一个修改次数tot,如果当前不匹配,就tot + ...

  10. Java多线程(十)——线程优先级和守护线程

    一.线程优先级的介绍 java 中的线程优先级的范围是1-10,默认的优先级是5.“高优先级线程”会优先于“低优先级线程”执行. java 中有两种线程:用户线程和守护线程.可以通过isDaemon( ...