导读:本文系统性介绍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. JavaScript -- 时光流逝(六):js中的正则表达式 -- RegExp 对象

    JavaScript -- 知识点回顾篇(六):js中的正则表达式 -- RegExp 对象 1. js正则表达式匹配字符之含义      查找以八进制数 规定的字符.     查找以十六进制数 规定 ...

  2. March 05th, 2018 Week 10th Monday

    Fortune favors the bold. 勇者天佑. It has been increasingly apparent that courage is the main quality we ...

  3. 一台电脑安装两个JDK

    起因:由于嫌自己电脑东西太乱,在上个学期重新格式化整理了一下.下载的jdk也为当时最新的10版本,上次在买jsp的虚拟主机时候也遇到了这个问题,对方提供的jdk只有7版本的,我是10版本的,所以当时打 ...

  4. nginx: [emerg] unknown directive "stub_status" in /usr/local/openresty/nginx/conf/conf.d/ngx_metric.conf:19

    问题分析 Nginx没有添加modules/ngx_http_stub_status_module.o模块. 问题解决 没有安装的话,可以在tar包安装编译的时候添加如下参数: # ./configu ...

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

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

  6. C. Edgy Trees Codeforces Round #548 (Div. 2) 并查集求连通块

    C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  7. 本地项目上传到CODING

    1.在Coding上添加项目 1).新建项目 README:一般项目中都会添加一个README文件对项目进行概述,以便一目了然地知道这个项目是做什么用的,如何使用等信息.README文件采用markd ...

  8. Loj 3058. 「HNOI2019」白兔之舞

    Loj 3058. 「HNOI2019」白兔之舞 题目描述 有一张顶点数为 \((L+1)\times n\) 的有向图.这张图的每个顶点由一个二元组 \((u,v)\) 表示 \((0\le u\l ...

  9. 远程连接排错-屌丝去洗浴中心之路(windows)

    1.查看道路是否通畅 ip地址是什么:就是我们要找的服务器在哪里 公网IP地址:全世界的任何地方都能访问到 私网IP地址:也指内网,私有环境,只在当前环境中.比如:192.168.0.??? 或者 1 ...

  10. 7.01-beautiful_soup3

    # pip install beautifulsoup4 from bs4 import BeautifulSoup html_doc = """ <html> ...