参考 2

什么是Docker? 2

Docker vs VM 2

Docker组成 3

Docker image 3

Docker container 3

Docker repository 4

Docker应用 4

docker安装 4

docker命令基础 6

Docker加速 6

镜像操作 6

容器操作 7

镜像制作 8

端口映射 9

文件映射 9

环境变量 9

容器连接 10

Docker网络 10

Ubuntu docker无法联网 10

Docker网络命令 11

 

参考

0. Docker官网 https://docs.docker.com/

1. Docker 笔记总结

2. Docker教程 w3cschool

3. Docker教程 runoob

4. Docker()Docker入门教程

5. Docker — 从入门到实践book

6. 只要一小时,零基础入门Docker 知乎

7. docker的使用及原理 知乎

8. docker walkthrough 介绍目前docker层级:container、service、swarm、stack、docker enterprise engine(docker EE) 

9. 阿里云栖社区docker技术 https://yq.aliyun.com/topic/78?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&utm_content=m_8922


什么是Docker?

Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux Windows Server 应用发布新功能。

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker vs VM

从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。

Docker概述

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

Docker组成

Docker基于go语言并遵从Apache2.0协议开源。DockerCS架构,主要有两个概念:

Docker daemon

运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)Docker daemon交互。

Docker client

Docker 命令行工具,是用户使用Docker的主要方式,Docker clientDocker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon

了解了Docker的组成,再来了解一下Docker的三个主要概念:

Docker image

镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。镜像可以拷贝到任何装了docker的机器上运行。

对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系统的 root 文件系统。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

Docker container

容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

Docker repository

仓库,类似代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(registry)区别,registry共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04/14.04等)的Ubuntu镜像。仓库名经常以 两段式路径 形式出现,比如 88yuxi/docker_hello,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体Docker Registry的软件或服务。

由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器常见的有 阿里云加速器DaoCloud 加速器 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从 Docker Hub 下载速度会提高很多。在 安装 Docker 一节中有详细的配置方法。

国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 时速云镜像仓库网易云镜像服务DaoCloud 镜像市场阿里云镜像库 等。

arm64v8镜像地址:https://hub.docker.com/u/arm64v8,可直接搜索arm64v8获取。

镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。镜像和容器的关系类似面向对象的类和对象。

Docker应用

docker安装

wget -qO- https://get.docker.com | sh

wget命令下载docker脚本到标准输出,然后通过管道sh执行,其中-O-表示打印下载内容到标准输出。

实际上从get.docker.com获取了一个脚本,然后自动运行脚本(可通过wget get.docker.com下载脚本查看其内容)。

 

# Executing docker install script, commit: 36b78b2

+ sudo -E sh -c apt-get update -qq >/dev/null

+ sudo -E sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null

+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null

Warning: apt-key output should not be parsed (stdout is not a terminal)

+ sudo -E sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic edge" > /etc/apt/sources.list.d/docker.list

+ [ ubuntu = debian ]

+ sudo -E sh -c apt-get update -qq >/dev/null

+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null

+ sudo -E sh -c docker version

Client:

Version: 18.06.1-ce

API version: 1.38

Go version: go1.10.3

Git commit: e68fc7a

Built: Tue Aug 21 17:24:51 2018

OS/Arch: linux/amd64

Experimental: false


Server:

Engine:

Version: 18.06.1-ce

API version: 1.38 (minimum version 1.12)

Go version: go1.10.3

Git commit: e68fc7a

Built: Tue Aug 21 17:23:15 2018

OS/Arch: linux/amd64

Experimental: false

If you would like to use Docker as a non-root user, you should now consider

adding your user to the "docker" group with something like:


sudo usermod -aG docker wang


Remember that you will have to log out and back in for this to take effect!


WARNING: Adding a user to the "docker" group will grant the ability to run

containers which can be used to obtain root privileges on the

docker host.

Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface

for more information.
wget -q0- https://get.docker.com | sh

相关文章: