Docker 学习笔记

仅为个人学习笔记,内容更新中。。。

Docker 介绍

什么是 docker

Docker is the world's leading software containerization platform.

  • Docker 公司开发,开源
    • Docker CE 社区免费版
    • Docker EE 企业收费版
  • Docker Github 仓库
  • Docker 是一个用来安装应用容器(应用本身,应用的依赖环境,例如 nginx、mysql)
  • 可以把 hello world、网站、你想得到的应用程序 放到 Docker
  • 跨平台
    • Linux
    • Windows
    • macOS

Docker 和 Moby

Moby主要针对的人群是想要组装一个基于容器的系统的人,包括

  • 想要定制化Docker构建的hacker
  • 想要构建一个容器系统的系统工程师
  • 想要将已经存在的容器系统适配到自己环境的 基础设施提供方
  • 想要体验最新容器技术的容器爱好者
  • 想要在不同系统中测试项目的开源开发者
  • 任何对Docker内部原理与如何构建感兴趣的人

但对于如下人群,Moby并不适合:

  • 寻求一种简单的在容器中运行应用程序的应用开发者。推荐使用Docker CE。
  • 想要一个带有商业支持且开箱即用容器平台的企业IT与开发团队。推荐使用Docker EE。
  • 任何对容器感兴趣并且寻求一种简单易学的方式的人。请访问docker.com吧。

前置知识

  • 了解 Linux 基础命令
  • 了解 Git 使用更好
    • Docker 命令和 Git 命令很像

发展历史

  • 2010 dotCloud PASS
  • 2013 Docker 开源
  • 2014.6 Docker 1.0
  • 2014.7 C轮融资 $4000 万
  • 2015.4 D轮融资 $9500 万
  • 至今 Docker 18.x

docker 基本思想

一句话概括:类似于超轻量级的“虚拟机”

  • 集装箱
  • 标准化
    • 运输方式
    • 存储方式
    • API 接口
  • 隔离

Docker 解决了什么问题

第1个问题:我本地运行没问题啊!

一个应用如果需要正常的运行需要什么?例如一个 Java Web 应用:

  • 底层操作系统
  • JDK
  • tomcat
  • 程序代码
  • 数据库
  • 配置文件
  • 。。。

任何一个环节的改变都可能导致程序的运行失败。

现在只需要把以上这些环节都放到 Docker 集装箱中去运行,集装箱可以放到任何地方,在任何机器的运行结果都是一致的。

Docker 解决了程序的运行环境不一致打来的问题。

第2个问题:系统好卡,哪个哥们儿又写死循环了?!

和别人共用服务器的时候发现我们的应用变慢了,各种原因。可能根本不是你的原因。Docker 的隔离性可以解决这个问题。Docker 可以限定容器使用的资源(CPU、内存、硬盘、网络等)。

问题3:双11来了,服务器撑不住了!

  • 容器快速复制化

Docker 让快速扩展,弹性伸缩变得更简单了。

Docker 核心概念

  • 镜像(集装箱)
  • 仓库(超级码头)
  • 容器(运行程序的地方)

Docker 运行程序的过程:

  • 去仓库把镜像拉到本地
  • 在本地把镜像运行起来
  • 运行起来的镜像称之为容器

  • Build 构建镜像
  • Ship 运输镜像
  • Run 运行镜像

Docker 镜像

镜像就是一系列文件,可以包括应用程序文件或是运行环境依赖文件等。 镜像的存储结构类似于 Linux 的联合文件系统(Union File System),一种分层的文件系统,可以将不同的文件目录挂到同一个虚拟文件系统下。

下面是镜像的存储格式:

  • 镜像的每一层文件系统都是只读的,只有最上面的可改。

Docker 容器

容器的本质就是一个进程。

镜像是静止的,不运行;而容器相当于是镜像的拷贝品,用于运行。镜像是只读的,但是用户需要对镜像进行自定义,所以将自定义修改放到容器的最上层。当应用读取文件的时候从顶层开始查找,如果没有,才会查找下一层。

由于容器的顶层可以修改,而镜像不可以修改,这样就可以保证同一个镜像可以生成不同的容器,不同容器独立运行而且不会干扰。

Docker 仓库

构建镜像的目的也是为了在其他机器或者其他环境去运行我们的程序。如果只是本地运行就不需要构建镜像了。既然我们的目的是也需要在其他环境运行,那我们就需要把镜像传输到目的地。如何完成传输过程?Docker 提供了一个标准化的存储和传输:Docker 仓库。

  • 先把镜像传输到 Docker 仓库
  • 然后由目的地主机拉取仓库中的镜像

Docker 仓库地址

  • hub.docker.com
  • c.163.com

Docker 镜像、仓库、容器 运作关系

  • docker deamon 守护进程
    • 下载 docker 镜像
    • 运行 docker 容器
    • 和远端镜像仓库进行交互
    • 。。。
  • 通过客户端命令和 docker deamon 进行交互
    • docker build
    • docker pull
    • docker run
  • Registry
    • 一个互联网 SASS 服务,提供公共镜像服务

安装 Docker 环境

docs.docker.com/ 官方指南,里面有详尽的各种操作系统 Docker 安装指南。

检查 Docker 环境

docker --version

Docker version 18.09.2, build 6247962
复制代码

或者 docker version 查看更多详细信息。

docker version

Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:31 2019
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     false
复制代码

Hello World

第一个 Docker 镜像

先了解两个命令:

  • docker pull [OPTIONS] NAME[:TAG]
    • 作用:从 Docker 仓库拉取镜像到本地
    • NAME 用来指定要拉取的镜像名称
    • [:TAG] 可选的,用来指定镜像的版本标签,不写就是 :latest,表示镜像的最新版本
    • [OPTIONS] 可选的,可以用来指定拉取相关的一些选项参数
  • docker images [OPTIONS] [REPOSITORY][:TAG]
    • 作用:查看本机都有哪些镜像
    • [OPTIONS] 可选的选项参数
    • [REPOSITORY][:TAG] 使用非常少,只有当本地的镜像非常多的时候用于筛选查看结果

接下来拉取第1个 Docker 镜像

docker pull hello-world

Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:5f179596a7335398b805f036f7e8561b6f0e32cd30a32f5e19d17a3cda6cc33d
Status: Downloaded newer image for hello-world:latest
复制代码

然后查看本地镜像列表

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        4 months ago        1.84kB
复制代码
  • REPOSITORY 镜像名称
  • TAG 镜像标签
  • IMAGE ID 镜像 id
  • CREATED 创建时间
  • SIZE 镜像大小

第1个 Docker 容器

  • docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
    • [OPTIONS] 可选参数
    • IMAGE 镜像名称
    • [:TAG] 可选的,镜像的版本标签
    • [COMMAND] 可选的,由镜像执行的命令
    • [ARG...] 为前面命令所依赖的参数

我们来运行刚才拉取到本地的 hello-world 镜像

docker run hello-world


Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
复制代码

一张图了解 docker pulldocker run 的运作流程。

使用 nginx 镜像托管静态网站

实践前奏:

  • 持久运行的容器
  • 前台运行 & 后台运行
  • 进入容器内部

常用命令

# 获取 image
docker pull

# 创建 image
docker build

# 删除 image
docker rmi 镜像id

# 列出 image
docker images

# 运行 container
docker run

# 列出正在运行的 container
docker ps

# 列出所有 container
docker ps

# 删除 container
docker rm 容器id

# 在 host 和 container 之间拷贝文件
docker cp

# 保存改动为新的 image
docker commit

docker run docker-image

# 查看本地 images 列表
docker images

docker run -p 8080:80 -d daocloud.io/nginx

# 查看当前正在运行的 container
docker ps

# 查看所有 container
docker ps -a

# 删除容器
docker rm 容器id

# 拷贝文件到容器
docker cp 文件路径 容器id://usr/share/nginx/html

# 停止 docker 容器
docker stop 容器id

# docker 对容器的改动都是临时的
# 如果需要保存需要提交更新
docker commit -m "提交日志" 容器id [image名称]

# 删除 image
docker rmi 镜像id
复制代码

相关链接

转载于:https://juejin.im/post/5cd55a196fb9a0321c45f4cf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值