Docker学习笔记

本文详细介绍了Docker的使用,从基于CentOS的快速启动,包括安装、运行Nginx,到基本概念如镜像、容器和仓库的解析,再到使用镜像、Dockerfile和容器的管理,以及数据管理和网络配置。通过实例演示了Docker的命令行操作,并强调了数据卷和网络管理在容器持久化和互联中的重要性。
摘要由CSDN通过智能技术生成

简介

在没有 Docker 的时代, 我们会使用硬件虚拟化(虚拟机)以提供隔离.这里, 虚拟机通过在操作系统上建立了一个中间虚拟软件层 Hypervisor , 并利用物理机器的资源虚拟出多个虚拟硬件环境来共享宿主机的资源, 其中的应用运行在虚拟机内核上.但是, 虚拟机对硬件的利用率存在瓶颈, 因为虚拟机很难根据当前业务量动态调整其占用的硬件资源, 因此容器化技术得以流行.其中, Docker 是一个开源的应用容器引擎, 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的 Linux 机器上.

Docker 容器不使用硬件虚拟化, 它的守护进程是宿主机上的一个进程, 换句话说, 应用直接运行在宿主机内核上.因为容器中运行的程序和计算机的操作系统之间没有额外的中间层, 没有资源被冗余软件的运行或虚拟硬件的模拟而浪费掉.在这里插入图片描述

一 Quick start(基于centos)

prerequisites

Centos 7 或更高稳定版本

1 安装docker

yum install docker

有问题可参考官方安装文档

2 运行 centos 镜像

docker run -p 80 --name web -i -t centos /bin/bash

3 安装运行 Nginx

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
nginx

4 验证运行状态

执行 ctrl + P + Q 切换到后台.然后, 通过 docker ps -a 命令查看随机分配的端口
访问 http://127.0.0.1: + <分配的端口号>
正常情况会看到nginx的默认页面

5 过程解释

首先, 我们输入 docker run -p 80 --name web -i -t centos /bin/bash 命令会运行交互式容器, 其中 -i 选项告诉 Docker 容器保持标准输入流对容器开放, 即使容器没有终端连接, 另一个 -t 选项告诉 Docker 为容器分配一个虚拟终端, 以便于我们接下来安装 Nginx 服务器.(Docker 还支持输入 -d 选项告诉 Docker 在后台运行容器的守护进程)

Docker 会为我们创建的每一个容器自动生成一个随机的名称.事实上, 这种方式虽然便捷, 但是可读性很差, 并且对我们后期维护的理解成本会比较大.因此, 我们通过 --name web 选项告诉 Docker 创建一个名称是 web 的容器.此外, 我们通过 -p 80 告诉 Docker 开放 80 端口, 那么, Nginx 才可以对外通过访问和服务.如果不指定宿主端口, 宿主机器会自动选择随机端口映射, 如上面例子.需要注意的是, 如果关闭或者重启, 这个端口就变了.

这里, 还有一个非常重要的知识点:Docker 通过 run 命令来启动一个新容器.Docker 首先在本机中寻找该镜像, 如果没有安装, Docker 在 Docker Hub 上查找该镜像并下载安装到本机, 最后Docker 创建一个新的容器并启动该程序.

但是, 当第二次执行 docker run 时, 因为 Docker 在本机中已经安装该镜像, 所以 Docker 会直接创建一个新的容器并启动该程序.

docker run 每次使用都会创建一个新的容器, 因此, 我们以后再次启动这个容器时, 只需要使用命令 docker start 即可.这里, docker start 的作用在用重新启动已存在的镜像, 而docker run 包含将镜像放入容器中 docker create , 然后将容器启动 docker start.

现在, 我们可以在上面的案例的基础上, 通过 exit 命令关闭 Docker 容器.当然, 如果我们运行的是后台的守护进程, 我们也可以通过 docker stop web 来停止.注意的是, docker stop 和 docker kill 略有不同, docker stop 发送 SIGTERM 信号, 而 docker kill 发送SIGKILL 信号.

二 基本概念

Image(镜像)

Image 是一个可执行的文件系统, 包含容器运行所需的程序、库、资源、配置等文件外, 还包含了为运行时准备的一些配置参数(如匿名卷、环境变量、用户等).镜像不包含任何动态数据, 其内容在构建之后也不会被改变.

镜像构建时, 会一层层构建, 前一层是后一层的基础.每一层构建完就不会再发生改变, 后一层上的任何改变只发生在自己这一层.比如, 删除前一层文件的操作, 实际不是真的删除前一层的文件, 而是仅在当前层标记为该文件已删除.在最终容器运行的时候, 虽然不会看到这个文件, 但是实际上该文件会一直跟随镜像.因此, 在构建镜像的时候, 需要额外小心, 每一层尽量只包含该层需要添加的东西, 任何额外的东西应该在该层构建结束前清理掉.

Containner(容器)

镜像( Image )和容器&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值