docker教程(0)--基础

容器技术概述

在介绍容器之前,先来聊聊应用部署的发展历史。

  1. 传统方式,通过物理机部署,即需要先购买一台服务器,然后再部署。
    传统方式
    但存在着如下问题:
    (1)部署非常慢
    (2)成本非常高
    (3)资源浪费
    (4)难于迁移和扩展
    (5)可能会被限定硬件厂商

  2. 虚拟化技术出现以后,通过虚拟机部署。
    虚拟机部署
    在物理机上通过 Hypervisor 技术,对物理资源(内存、CPU、硬盘等)进行虚拟化,并在其基础之上安装操作系统(即虚拟机),从而实现对物理资源的合理性调度和使用率最大化。
    其优点如下:
    (1)资源池:一个物理资源分配到不同的虚拟机里
    (2)很容易扩展:加物理机器 or 加虚拟机
    (3)很容易云化:如亚马逊AWS、阿里云等
    也存在如下局限性:
    每一个虚拟机都是一个完整的操作系统,要给其分配资源,当虚拟机数量增多时,操作系统本身的资源的资源势必增多。

  3. 通过容器部署应用。
    容器部署
    有如下特点:
    (1)对软件和其依赖的标准化打包
    (2)应用之间相互隔离
    (3)共享同一个OS Kernel
    (4)可以运行在很多主流的操作系统上

与虚拟机之间的区别:
容器与虚拟机区别
直观上来讲vm多了一层guest OS,同时 Hypervisor 会对硬件资源进行虚拟化,而容器直接使用硬件资源,所以vm资源的利用率相对容器是低的。

可以和虚拟机进行结合:
虚拟机+容器
此外从开发、测试、运维的角度来看,容器更容易统一环境,不需要各种繁琐的配置。

Docker是什么,

Docker 是容器技术的一种实现,提供了一个开发,打包,运行app的平台。
通过Docker Engine 引擎将app和底层的infrastructure隔离开来。
在这里插入图片描述
Docker Engine 组成:
在这里插入图片描述

Docker 架构

在这里插入图片描述
典型的CS架构。可以类比于GIT。
client: 和docker daemon进行交互的
docker daemon: 负责docker的各种各样的操作,如下载docker镜像,运行docker容器等
registry: docker镜像的Sass服务

Docker 底层技术支持

  1. Namespaces:做隔离pid、net、ipc、mnt、uts(容器之间网络、进程之间的隔离)
  2. Control groups:做资源控制(如内存、硬盘灯)
  3. Union file System:Container 和 image 的分层

Docker 安装

mac 安装:
  1. 下载:https://www.docker.com/docker-mac
  2. 安装:下载文件为.dmg文件,打开,拖动到Application文件夹中即可
linux 安装:
  1. 打开命令行,输入命令: sudo wget -qO- https://get.docker.com/ | sh,命令解析:sudo 是以root权限运行命令,wget是linux下的一个下载命令,-qO-是让wget命令的参数信息,其中 q 是让简化wget的输出信息,O-(大写的字母O和减号)是让wget的输出直接输出到标准输出,而不是输出到文件,| 是管道,指的是将输出移交给后面的命令进行执行。所以上述命令的意思是,下载一个shell脚本并执行这个shell脚本。
    输出如下:
    linux下安装docker

  2. docker 默认是以root用户进行执行的,如果我们要以非root用户运行Docker,在命令行中执行如下命令:sudo usermod -aG docker your-user(linux的用户名),该命令的意思是,将指定的用户名加入到 docker用户组中, 下次你在用此用户运行docker时,就不要用sudo了

Docker 简单使用(运行一个nginx容器)

  1. 拉取image:命令行输入 docker pull nginx,从远程拉取一个 nginx 镜像,可以类比git;如果首次运行会有如下输出:
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/library/nginx/manifests/latest: unauthorized: incorrect username or password

即你没有权限到从docker hub(可类比github)上下载镜像,登陆 https://hub.docker.com/,注册用户。

之后在命令行中输入 docker login ,根据提示输入用户名(不是注册的邮箱…)和密码即可登陆。

docker拉取镜像

  1. 查看镜像:docker images

docker查看镜像

  1. 运行镜像:docker run -p 8080:80 -d nginx, 参数 -p 8080:80 是docker端口的映射,即将docker容器的80端口映射到本地的8080端口,-d是以守护进程的方式运行,即后台运行 nginx是指的镜像名称。

docker运行镜像

输出的结果为docker容器的ID。

打开浏览器,访问:localhost:8080,即可看到nginx的的默认页面:

docker_nginx

  1. 停止docker:docker stop 容器ID

Docker 提交镜像

上一小节中,我们运行了一个nginx的docker容器,下面我们对容器中的内容进行修改

  1. vim index.html

    <html>
    	<h1>Hello Docker</h1>
    </html>	 
    
  2. docker cp index.html 8a06e5c0eb58b86://usr/share/nginx/html,其中***8a06e5c0eb58b86***是容器的ID,然后刷新浏览器(localhost:8080),界面如下:

    hello_docker

  3. docker stop 8a06e5c0eb58b86停止nginx容器,再重新启动容器:docker run -p 8080:80 -d nginx,
    检查浏览器输出(localhost:8080),发现界面又变成了nginx的默认界面,上一小节修改的内容未能保存。原因是在docker容器中做的所有操作都是暂时的,那怎么才能保存我们队容器所做的操作呢?

  4. 重复步骤1和步骤二的操作,即:

    (1)	vim index.html  #<html><h1>Hello Docker</h1></html
    (2) docker run -p 8080:80 -d nginx
    (3)	docker cp index.html 8a06e5c0eb58b86://usr/share/nginx/html
    

    在浏览器中访问localhost:8080,页面输出为Hello Docker

    接着在命令行中输入:docker commit -m 'hello_docker' 8a06e5c0eb58b864 hello_docker,
    成功后,会在控制台输出新的镜像ID.

    执行:docker images

    docker_commit

    其中***hello_docker***就是我们刚刚提交的一个新的镜像,可以运行它,检查容器内容。

Docker小节

命令用途
docker pull获取image
docker build创建image
docker images列出image
docker run运行container
docker ps列出container
docker rm删除container
docker rmi删除image
docker cp在host和container之间拷贝文件
docker commit保存改动为新的image
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值