概念

1、Docker引擎

一个运行在服务器上的后台进程

2、Docker客户端

分为两种:CLI和RestAPI,与Docker引擎交互

3、Docker镜像

类似于我们使用的光盘,将程序打包到Docker镜像中

4、Docker容器

Docker引擎实例化Docker镜像获得的东西

5、Docker镜像注册中心

用于存放公开和私有的Docker镜像仓库。我们可以利用Docker Registry大家私有的镜像仓库

特点

1、快速运行

只需要几秒钟就能启动

2、节省资源

运行在Docker引擎之上,可直接利用宿主硬件资源而无需占用过多的系统开销

3、便于交付

交付的是镜像,不仅封装了程序,还包含了运行环境

4、容易管理

安装

CPU必须是64位,Linux内核必须在3.10以上

1、更新yum包

>yum update

2、添加yum的Docker包仓库

$ sudo tee /etc/yum.repos.d/docker.repo <<-‘EOF’
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

3、安装docker引擎

>yum install docker-engine

4、启动docker引擎

>service docker start

5、查看docker版本

>docker version

配置阿里镜像服务

访问https://dev.aliyun.com/search.html,注册登录后可以进入管理中心,可以查看到自己的镜像加速器为:https://2h3po24q.mirror.aliyuncs.com

使用配置文件 /etc/docker/daemon.json(没有时新建该文件)

{
"registry-mirrors": ["<your accelerate address>"]
}

然后service docker restart重启docker即可

Docker镜像常用操作

docker images 列出镜像

docker search centos 搜索镜像

docker pull centos 拉去镜像

docker save centos > centos.tar 导出镜像,不指定路径则导出在当前目录

docker load < centos.tar 导入镜像

Docker容器常用操作

1、创建并启动容器

docker run -i -t -d centos /bin/bash

-i参数表示打开标准收入设备,可以用键盘输入

-t参数表示分配一个伪终端,与服务器建立一个会话

-d参数表示后台运行

-p:表示将容器内部使用的网络端口映射到我们使用的主机上 ,如-p 5000:5000

-P:表示将容器内部端口随机映射到主机的高端口

-v:将宿主机上的磁盘挂在到容器,可多次使用-v挂在多个磁盘目录 -v ~/sofeware:/mnt/sofeware

centos参数表示需要运行的镜像名称,标准格式为centos:latest,如果最新版本latest可以省略

/bin/bash参数表示运行容器中的bash应用程序

2、列出容器

docker ps

-a:表示列出所有容器,包括所有状态

-l:表示列出最近创建的容易,包括所有状态

-n:表示列出n个最近创建的容器,包括所有状态

-q:表示仅列出container id字段

-s:表示增加size字段描述容器大小

3、进入运行中的容器

docker attach [container_id]

4、执行命令

docker exec -i -t [container_id] ls -l

5、停止容器

docker stop [container_id]

对容器发送SIGTERM信号,一段时候后终止容器

6、终止容器

docker kill [container_id]

对容器发送SIGKILL信号,立即终止容器

7、启动容器

docker start [container_id]

8、重启容器

docker restart [container_id]

9、删除容器

docker rm [container_id]

这个命令只能删除已停止的容器,可以通过-f参数强制删除运行的容器

docker rm -f [container_id]

10、删除镜像

docker rmi [image_name]

如果删除的镜像跑了一些容器,只能添加-f参数来强制删除

11、导入导出镜像

docker export [container_id] > centos.tar

docker import [image_name].tar huangyong/centos:latest

12、保存环境

docker commit -m "ubuntu with vim" -a "sgy" aa97ba3292ce sgy/ubuntu:vim

-m指定说明信息

-a指定用户信息

aa97ba3292ce代表容器的id

sgy/ubuntu:vim指定目标镜像的用户名、仓库名和 tag 信息

13、查询某个容器的所有操作日志

docker logs centos

更多命令用户参考docker --help

使用Dockerfile创建镜像

通过脚本文件让构建镜像做到自动化。

1、使用FROM指令来设置基础镜像

FROM centos:latest

2、设置维护者信息

MAINTAINER "Eric"<eric.lan@qq.com>

3、设置需要添加到容器中的文件

ADD jdk-8u91-linux-x64.tar.gz /opt

第一个参数为宿主机的来源路径(这里使用相对路径,与dockerfile同目录,也可以使用绝对路径),第二个参数是容器目标路径。需要注意的是,ADD指令将自动解压来源路径中的压缩包,如果不需要解压可以使用COPY指令代替。

4、设置镜像制作过程中需要执行的命令

RUN ln -s /opt/jdk-8u91-linux-x64 /opt/jdk

多条命令可以使用\命令换行合并成一条,减少构建镜像的体积(每条指令都会生成新的镜像层)。

5、设置环境变量

ENV JAVA_HOME /opt/jdk

ENV PATH $JAVA_HOME/bin:$PATH

6、设置容器启动时需要执行的命令

CMD java -version

如果使用docker run命令指定了需要执行的命令,那么该命令将覆盖file中通过CMD设置的命令

7、构建镜像

docker build -t eric/java .

-t选项指定镜像名称并读取当前目录(即.目录)的dockerfile文件

docker tag 422121qwq23 eric/java:1.0 来修改镜像的仓库名称和标签名称

搭建Docker Registry管理镜像

1、docker run -d -p 50000:5000 -v ~/docker-registry:/tmp/registry registry

-d:表示后台启动该容器

-p:表示对容器中的应用程序暴露的端口号进行端口映射,左边为宿主机的端口,右边的为容器要暴露的端口

-v:数据卷选项,将宿主机的~/docker-registry目录映射为容器的/tmp/registry目录

访问http://127.0.0.1:50000/可以查看Docker Registry是否启动成功

2、重命名镜像标签

docker tag dad11232da908 127.0.0.1:50000/eric/java

3、推送镜像

docker push 127.0.0.1:50000/eric/java

那么就将镜像推送到127.0.0.1:50000的Registry了,局域网用户也就能使用它来管理自己的镜像了

微服务深入浅出(10)-- Docker的更多相关文章

  1. 微服务项目的docker自动化部署流程

    目录 微服务的Docker自动化部署 制作JDK1.8的Docker镜像 Docker常用命令介绍 制作image的一般流程 将本地的image上传至私人仓库 使用Maven插件实现自动化docker ...

  2. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

  3. Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  4. 将微服务运行在docker上遇到的问题一

    按照类似这样的流程: 但是去访问本机的 localhost:92 localhost:80 都没有任何的内容..... 这是什么原因? 重新再来一次 新写了一个微服务demo jar包: 相应的Doc ...

  5. 微服务架构 | 10.3 使用 Zipkin 可视化日志追踪

    目录 前言 1. Zipkin 基础知识 1.1 Zipkin 链路监控的原理 2. 下载 Zipkin 服务器 2.1 下载 zipkin-server-2.12.9-exec.jar 包 2.2 ...

  6. 微服务深入浅出(7)-- 网关路由Zuul

    Zuul用于构建边界服务,致力于动态路由,过滤,监控,弹性伸缩和安全等方向. 1.Zuul+Ribbon+Eureka结合,可以实现智能路由和负载均衡 2.网关将所有服务的API接口统一聚合统一暴露 ...

  7. 微服务架构 | 10.2 使用 Papertrail 实现日志聚合

    目录 前言 1. Papertrail 基础知识 1.1 Papertrail 特点 1.2 Papertrail 是什么 2. 使用 Papertrail 进行日志聚合的示例 2.1 创建 Pape ...

  8. 微服务架构 | 10.1 使用 Sleuth 追踪服务调用链

    目录 前言 1. Sleuth 基础知识 1.1 Sleuth 原理 2. 在服务中使用 Sleuth 追踪 2.1 引入 pom.xml 依赖文件 2.2 查看日志信息 最后 前言 参考资料: &l ...

  9. 微服务深入浅出(11)-- SpringBoot整合Docker

    添加Dockerfile 在目录src/main/resources目录下店家Dockerfile文件: From java MAINTAINER "Eric"<eric.l ...

随机推荐

  1. DataTable List 相互转换

    This uses the FastMember's meta-programming API for maximum performance. If you want to restrict it ...

  2. C# 实例化类的执行顺序

    先进行细分: 类的成员分为:字段.属性.方法.构造方法 成员的修饰符:静态成员.实例成员 层次结构:父类.子类 先不考虑继承关系,执行顺序为: 静态字段 静态构造方法 实例字段 实例构造方法 属性和方 ...

  3. tarjan解决路径询问问题

    好久没更新了,就更一篇普及组内容好了. 首先我们考虑如何用tarjan离线求出lca,伪代码大致如下: def tarjan(x): 将x标记为已访问 for c in x的孩子: tarjan(c) ...

  4. 【BZOJ4036】按位或(Min-Max容斥,FWT)

    [BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...

  5. 【BZOJ4035】数组游戏(博弈论)

    [BZOJ4035]数组游戏(博弈论) 题面 BZOJ 洛谷 题解 很明显是一个翻硬币游戏的变形,因此当前局面的\(SG\)函数值就是所有白格子单独存在的\(SG\)函数的异或和. 那么,对于每一个位 ...

  6. Mininet 系列实验(五)

    实验内容 实现一个单个交换机的拓扑,添加一个交换机,和N个主机到网络中.交换机和主机之间的每个链路能够设置带宽.延迟时间.以及丢包率.创建一个包含一个交换机和四个主机的网络,使用iperf测试主机之间 ...

  7. BZOJ4589 Hard Nim 【FWT】

    题目链接 BZOJ4589 题解 FWT 模板题 #include<algorithm> #include<iostream> #include<cstdlib> ...

  8. java插件之Lombok

    使用注释来减少Java中的重复代码 @NonNull - 或者:我怎么学会停止担心和喜欢上了NullPointerException. @Cleanup - 自动资源管理:安全地调用您的close() ...

  9. kibana使用(ELK)、Lucene 查询语法

    Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 ...

  10. Python之旅:数据类型、字符编码、文件处理

    一 引子 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 以下每个类型都是有详细介绍链接的 ...