Docker 基础

为什么需要docker?在传统部署下,我们会遇到不同机器、不同依赖版本的兼容性等问题,解决此问题一般会消耗大量时间,并且在不同机器上均要执行统一环境的部署也是一个耗时较长的工作。除此之外、还包括例如管理Dev/Test/Prod等不同环境的成本。为了解决这些问题,Docker应运而出。

Docker 可以使用不同的Container 运行不同的组件(如node.js web server, MongoDB, Messaging System等),并且这些Containers 可以运行在同一个物理主机上,而相互之间无影响(也就是各有各的执行环境与依赖)。如:

通过上图我们可以看到,Docker Container 是共享的一个Kernel,且执行在Docker 层之上。Docker与Hypervisor(虚拟化中的控制进程)不一样的是:Docker并不是虚拟化,并不是在同一个底层硬件上运行不同的Kernel以及OS,它主要的目的是将应用容器化,使用同一套Kernel与OS执行不同的应用。而传统的虚拟化架构为:

这种虚拟化的架构会很大程度上使用硬件资源,且VM 镜像一般是GB级别的数据。而Docker Container 是一种轻量化的资源,大小也是MB 级别的量。这样可以使得Docker Container 启动更快,一般是秒级别。而VM 启动时间会长的多,因为需要启动整个OS。

Docker 安装与启动

在Linux 下,可以使用 yum 或是 apt-get 直接安装,如:

sudo yum install -y docker

然后启动:

sudo /etc/init.d/docker start

测试:

sudo docker run hello-world

基本Docker 命令

docker run

执行一个docker container,指定参数为image 名,如果本地不存在此image,则会从dockerhub进行下载,例如:
> sudo docker run ubuntu

Unable to find image 'ubuntu:latest' locally

latest: Pulling from library/ubuntu

7ddbc47eeb70: Pull complete

c1bbdc448b72: Pull complete

8c3b70e39044: Pull complete

45d437916d57: Pull complete

Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d

Status: Downloaded newer image for ubuntu:latest

docker ps

列出当前运行的containers。可以使用 docker
ps –a 查看所有containers
状态。

docker stop <container_name>

停止一个docker container。但是此 docker container 仍可以被 docker ps
-a 命令列出。

docker rm
<container_name>

移除一个docker container。

docker images

列出所有images。

docker rmi
<image_name>

移除一个image。移除前必须要删除所有正在使用此image 的container。

docker pull
<image>

拉取一个 image到本地,之后执行docker
run 后,不会再去DockerHub
拉取镜像。

docker exec <command>

在一个docker container 内执行指定命令。如(7e2290cbe2f7为docker
id):

docker exec 7e2290cbe2f7 cat /etc/*release*

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=18.04

…

Docker Run 命令进阶

1. 指定image 的版本,如:

docker run ubuntu:17.04

2. attach 到一个正在运行的container中,如:

> docker run -d training/webapp

> docker ps

CONTAINER ID       
IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

fdd161c7d3f3       
training/webapp     "python
app.py"     19 seconds ago      Up 19 seconds       5000/tcp            vibrant_hermann

> docker attach eager_johnson

attach 用于将container 的输出指向当前实例的stdout

3. docker run -i 指定等待stdin 输入

4. 端口映射

在执行一个 web app 样例后,我们可以看到以下输出:

docker run training/webapp

* Running on
http://0.0.0.0:5000/ (Press CTRL+C to quit)

此时,这个5000 端口绑定的是一个私网 ip ,例如:我们看一下这个container
内部的 ip:

> docker exec da16b96211f6 ifconfig

eth0      Link
encap:Ethernet  HWaddr 02:42:ac:11:00:02

inet
addr:172.17.0.2 
Bcast:172.17.255.255 
Mask:255.255.0.0

UP BROADCAST
RUNNING MULTICAST  MTU:1500  Metric:1

RX
packets:15 errors:0 dropped:0 overruns:0 frame:0

TX packets:0
errors:0 dropped:0 overruns:0 carrier:0

collisions:0
txqueuelen:0

RX
bytes:1186 (1.1 KB)  TX bytes:0 (0.0 B)

可以看到此 ip 为 172.17.0.2,而我们宿主实例的 ip 为10.0.0.83。所以,若是单纯的使用宿主实例的 ip:5000,是访问不到这个页面的。这里我们需要做端口映射,例如:

docker run -p 80:5000 training/webapp

并且可以启动多个container,使用不同的端口映射,例如:

docker run -p 8000:5000 training/webapp

这样我们便部署了两个 web server,监听的端口分别为外部实例的 8000 端口已经 80 端口。

4. 卷映射

Docker container 内部有自己的文件系统,与外部文件系统隔离。我们也可以将外部卷与docker container
内的卷进行映射。这样在container
销毁后,卷里的数据仍保存在本地。例如:

docker run –v /opt/datadir/:/var/lib/mysql mysql

Docker(一)概念与基础的更多相关文章

  1. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  2. Docker容器概念讲解

    Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源. Docker是通过内核虚 ...

  3. Docker教程:docker的概念及安装

    http://blog.csdn.net/pipisorry/article/details/50754385 Why docker 对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规 ...

  4. 菜鸟系列docker——docker基本概念(1)

    docker基本概念 1.准备 这里先介绍容器技术,后续再介绍docker.docker是容器的一种,除docker以外,还存在coreos.不过在当前趋势下容器和docker基本上可以划为等号了. ...

  5. Docker学习笔记:基础

    docker的概念 :docker是一个可供开发者在容器中 开发 部署 运行 应用的一个平台.通过使用Linux容器去部署应用的方式称为容器化. 基础概念 Images and Container i ...

  6. Docker for .Net Developers(part1:Docker基本概念介绍)

    一.什么是Docker 目前,.Net 社区中很可能会用到的两个词是“微服务”和“Docker”. 这两个主题都非常引人注目,并为开发人员和架构师带来兴奋之情. 在这个新系列的博客文章中,我把自己最近 ...

  7. Docker容器学习梳理 - 基础知识(1)

    Docker是PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源.Docker是通过内核虚拟化技 ...

  8. Docker虚拟化实战学习——基础篇(转)

    Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker   Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...

  9. 后端技术杂谈9:先搞懂Docker核心概念吧

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  10. 【转帖】使用容器化和 Docker 实现 DevOps 的基础知识

    使用容器化和 Docker 实现 DevOps 的基础知识 https://www.kubernetes.org.cn/6730.html 2020-02-24 15:20 灵雀云 分类:容器 阅读( ...

随机推荐

  1. 逆战:微信小程序开发(二)

    一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import { req ...

  2. 面试官:Java序列化为什么要实现Serializable接口?我懵了

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  3. mysql基于二进制文件的主从复制

    1.设置主服务器配置         必须在主服务器上启用二进制日志,因为二进制日志是将更改从主服务器复制到从服务器的基础,如果未启用log-bin,则无法进行复制         复制组内的每个服务 ...

  4. W25Q64BV(FLASH)(SPI)中文手册

    64兆位串行SPI FLASH存储器 1.常规介绍 W25Q64BV(64兆位)串行FLASH存储器为一个空间大小,引脚,功耗限制的系统提供解决方案.25Q系列的灵活性和性能良好超越了普通的串行FLA ...

  5. Vue中data元素之间相互赋值的陷阱

    今天在整理代码时,遇到这样的一个场景,下面将结合示例说明: (一)在Vue文件中定义一个const常量,如下图所示: (二)在data中有三个元素是这样赋值的,如下图所示: (三)在created() ...

  6. mac本地安装全局包报错npm WARN checkPermissions

    安装本地全局包时,本地报错 npm WARN checkPermissions Missing write access to /Users/xxx/.nvm/versions/node/v11.10 ...

  7. swiper滑动失效问题

    最近在写移动端的项目,页面有用的是swiper滑动的. 但是会发现在滑动时,不灵活,就是滑动时隐藏的数据会显示,但是不滑动数据又在初始那,隐藏的数据还是看不到. 于是各种排除问题,终于在pc端+移动端 ...

  8. [Python]scatter_matrix报错 module 'pandas' has no attribute 'scatter_matrix'

    运行pandas.scatter_matrix()散点图函数时报错, 原因是该函数在新版本用法发生了变化: pandas.plotting.scatter_matrix 完整用法:pd.plottin ...

  9. 服务治理框架:Spring Cloud Eureka

    最近在学习Spring Cloud的知识,现将服务治理框架 Spring Cloud Eureka 的相关知识笔记整理如下.[采用 oneNote格式排版]

  10. 【论文翻译】An overiview of gradient descent optimization algorithms

    这篇论文最早是一篇2016年1月16日发表在Sebastian Ruder的博客.本文主要工作是对这篇论文与李宏毅课程相关的核心部分进行翻译. 论文全文翻译: An overview of gradi ...