Docker基础入门实战(一)

Docker基础入门实战

第1章          docker简介

1.1  what is Docker

Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,源代码部署在GitHub上。

Docker是通过内核虚拟技术来提供容器的资源隔离与安全保障,由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,从而提高资源的利用率。

Docker的目标是实现轻量级的操作系统虚拟化解决方案。

1.2  Docker的工作模式

Docker对于操作者来说是C/S架构,但是Docker后端是一个非常耦合的架构,模块各司其职,并有机组合,支撑Docker的运行。

用户通过使用Docker Client与Docker Daemon建立通信,并发送请求给后者。

CLI(命令行)交互模型

RemoteAPI交互模式

1.3  Docker可以干些什么

q  8种应用场景

q  【Simplifying Configuration】

简化配置:统一配置、通过镜像快速启动

q  【Code Pipeline Management】

代码流水线管理:

开发环境->测试环境->预生产环境->灰度发布->正式发布,docker在这里可以快速实现迁移

q  【Developer Productivity】

提高开发效率:对开发人员来说,有了镜像,直接启动容器即可

q  【App Isolation】

隔离应用:相对于虚拟机的完全隔离会占用资源,docker会比较节约资源

q  【Server Consolidation】

服务器整合:同一台服务器可以跑多个docker容器,提高服务器的利用率

q  【Debugging Capablities】

调试能力:Docker提供了很多的工具,提供了很多的功能,这些可以帮助调试bug

q  【Multi-tenancy】

多租户:一个租户多个用户,类似于阿里云的一个projiect下多个用户

q  【Rapid Deplovment】

快速部署:不需要启动操作系统,实现秒级部署

1.4 Docker的8大开发模式

q  The Shared Base Container(s):共享基础容器

q  The Shared Volume Dev Container:共享卷开发容器

q  The Dev Tools Container:开发工具容器

q  The Test In A Different Environment containers:不同环境下测试容器

q  The Build Container:构建容器

q  The Installation Container:安装容器

q  The Default-Service-In-A-Box Containes:盒子中默认服务器容器

q  The Infrastructure/Glue Containers:基础设施/粘合剂容器

1.1  Docker的9个基本事实

q  容器不同于虚拟机

q  容器不如虚拟机来的成熟

q  容器可以在几分之一秒内启动

q  容器已在大规模环境证明了自身的价值(比如在谷歌搜索中)

q  IT人员称容器为轻量级

q  容器引发安全方面的问题

q  Docker已成为容器的代名词,但他不是唯一的提供者

q  容器可以节省IT人力,加快更新

q  容器仍面临一些没有解决的问题

1.2  Why use Docker

q  更快速的交付和部署

q  更高效的虚拟化

q  更轻松的迁移和扩展

q  更简单的管理

1.1  Docker与OpenStack的对比


类别


Docker


OpenStack


部署难度


极其简单


组件多,部署复杂


启动速度


秒级


分钟级


执行性能


和物理系统几乎一致


Vm会占用一些资源


镜像体积


镜像是MB级别


虚拟机镜像是GB级别


管理效率


管理简单


组件相互依赖,管理复杂


隔离性


隔离性高


彻底隔离


可管理性能


单进程、不建议启动ssh


完整的系统隔离


网络连接


比较弱


借助Neutron可以灵活组件各种网络结构

特别提示:有些场景是不适合用docker的,像前段的web服务,若使用docker则当docker挂掉时,里面不会像数据库那样有数据写入,这时就需要在重新启动启动一个docker

1.1  Docker的3大核心概念

1.1.1        镜像(image)

Docker镜像就是一个只读的模板,例如一个镜像可以包含一个完整的操作系统环境,里面仅安装了Apache或用户需要的其他应用程序

镜像可以用来创建容器,Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,并且用户甚至可以直接从其他人哪里下载一个已经做好的镜像来直接使用

1.1.2        容器(container)

Docker利用容器来运行应用,容器是从镜像创建的运行实例,他可以启动、停止、开始、删除,每个容器都是相互隔离的,保证平台的安全

可以把容器看成一个简易版的linux系统和运行在其中的应用程序

镜像是只读的,容器在启动的时候会创建一层可写层作为最上层

1.1.3        仓库(repository)

仓库就是集中存放镜像的地方,有时候会把仓库和仓库注册器混成一块,并不严格区分,仓库注册器上往往存放着多个仓库,每个仓库又包含了多个镜像,每个镜像又有不同的tag

仓库分为公开仓库和私有仓库两种,最大的公开仓库是Docker Hub,提供了数量庞大的镜像供用户下载,国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定、更快的访问

第2章          Docker入门实战

2.1 系统环境

[[email protected] ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[[email protected] ~]# uname -r
3.10.0-693.11.6.el7.x86_64

2.2 安装及启动

[[email protected] ~]# yum install -y docker   ==》安装
[[email protected] ~]# systemctl  start docker   ==》启动
[[email protected] ~]# systemctl  status docket  ==》查看状态信息
[[email protected] ~]# systemctl enable docker  ==》加入开机自启动
[[email protected] ~]# docker --version  ==》简略版本信息
Docker version 1.13.1, build dded712/1.13.1 
[[email protected] ~]# docker version    ==》详细版本信息
Client:   ==》客户端信息
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      dded712/1.13.1
 Built:           Tue Jul 17 18:34:48 2018
 OS/Arch:         linux/amd64
 
Server:  ==》服务端信息
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      dded712/1.13.1
 Built:           Tue Jul 17 18:34:48 2018
 OS/Arch:         linux/amd64
 Experimental:    false

2.3 docker镜像管理

2.3.1 search镜像

[[email protected] ~]# docker search centos:6

2.3.2 push镜像

[[email protected] ~]# docker pull centos:6

2.3.3 查看镜像

[[email protected] ~]# docker images

2.3.4 导入/导出镜像

[[email protected] ~]# docker save centos:6 >/opt/centos.tar.gz  ==》导出镜像
[[email protected] ~]# docker load  </opt/centos.tar.gz  ==》导入镜像

2.3.5 删除镜像

[[email protected] ~]# docker rmi $ IMAGE ID/$TAG

2.3.6 利用镜像创建容器

[[email protected] ~]# docker run -it centos:6 /bin/bash

2.4 容器管理

2.4.1 新建容器

[[email protected] ~]# docker run centos:6 /bin/echo "hehe" =》与在本地执行/bin/echo "hehe"一样
[[email protected] ~]# docker run --name mydocker -it centos:6 /bin/bash =》启动一个bash终端,允许用户进行交互
--name:给容器定义名称
-i:让容器的标准输入保持打开
-t:Docker分配一个伪终端并绑定到容器的标准输入上

2.4.2 启动/停止容器

[[email protected] ~]# docker start $NAMES/$CONTAINER ID
[[email protected] ~]# docker stop $NAMES/$CONTAINER ID
[[email protected] ~]# docker ps  ==》列出已经启动的容器
[[email protected] ~]# docker ps –a  ==》列出所有容器,包括未启动的

2.4.3 删除容器

[[email protected] ~]# docker rm $CONTAINER ID  ==》删除已经停止的容器
[[email protected] ~]# docker rm -f  $CONTAINER ID  ==》删除正在运行的容器

2.4.4 进入容器

2.4.4.1 attach命令进入

[[email protected] ~]# docker attach $CONTAINER ID
注意:该命令是系统自带的,并且启用attach命令有时候并不是特别的方便,当多个窗口同时attach到一个容器的时候,多有的窗口都会同步显示,当某个窗口因某个命令堵塞时,其他窗口也就无法再执行命令了,在退出容器时,该容器会自动停止

2.4.4.2 nsenter命令进入

[[email protected] ~]# yum install -y util-linux  ==》安装nsenter
[[email protected] ~]# docker inspect --format "{{.State.Pid}}" test ==》找到容器进程ID
[[email protected] ~]# nsenter -t 19245 -u -i -m –p   ==》进入容器
-t, --target <pid>     target process to get namespaces from
指定容器的进程ID
-m, --mount[=<file>]   enter mount namespace
进入到mount namespace空间中
-u, --uts[=<file>]     enter UTS namespace (hostname etc)
进入到UTS namespace空间中
-i, --ipc[=<file>]     enter System V IPC namespace
进入到System V IPC namespace空间中
-n, --net[=<file>]     enter network namespace
进入到network namespace空间中
-p, --pid[=<file>]     enter pid namespace
进入到pid namespace空间

2.4.4.3 编写脚本快速进入容器

[[email protected] scripts]# vim docker_in.sh
#/bin/bash
 
PID=$(docker inspect -f "{{.State.Pid}}" $1)
nsenter -t $PID -m -u -i -n -p

原文地址:http://blog.51cto.com/lzhnb/2153225

时间: 2024-10-14 11:26:50

Docker基础入门实战(一)的相关文章

1、Docker基础入门实战

1.系统版本 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 2.关闭selinux [[email protected] ~]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config [[email protected] ~]# getenforce Enforcing [[email protected] ~]# set

零基础入门 实战mpvue2.0多端小程序框架

第1章 课程快速预览(必看!!!)在这一章节中,老师讲带领你快速预览课程整体.其中,涉及到为什么要做这么一门实战课程.制作一个小程序的完整流程是怎么样的,以及如何做项目的技术选型. 第2章 30 分钟快速入门微信小程序(已掌握,可略过)在这一章节中,老师讲带领你从如何注册微信小程序开发者账号.工具的下载开始,到完成第一个小程序,再到组件与 API 的使用整个过程,最后来总结微信原生小程序的缺点. 第3章 30 分钟快速入门 Vue.js 框架(已掌握,可略过)在这一章节中,老师将带领你从第一个

Docker基础入门及示例

Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环境部署当中.这篇文章我将针对以下几个方面简单介绍: 1. docker的基础介绍 2. docker在windows下的安装配置 3. 基础命令介绍 4. 使用vs2017在docker下调试 5. 打包一个.net core站点镜像 一. docker基础介绍 可能很多朋友对docker还停留在听

Docker 基础入门

1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 1.1.2 要使用容器必须需要在内核级支持2中技术 namespaces 名称空间 Control Group(cgroups) 控制组 (1)为什么centos6 版本不能使用容器? 因为centos6 内核版本是2.6:容器需要一个user的名称空间,直到内核3.8版本才有:  namespace 系统调用参数  隔离内容  内核

Docker基础入门 (一)—— 简介

Docker -- 简介 1. Doker是个什么玩意 说Docker是什么之前,先来看一看Docker为什么会出现.我们知道,在学习过程中我们需要频繁地安装配置一些软件,不管是在Windows下还是在Linux,这些东西的配置过程都是非常费时费力的,稍有不慎就得删了重来,换一台机器,还得重来一次,更讨厌的是经常出现一些环境的兼容性问题(比如一些软件只兼容win7).那么有没有这样一种解决方式:软件带环境安装,省去麻烦的安装配置过程,并且完全不用考虑环境兼容问题,因为自带环境嘛.也就是说,安装的

docker基础入门之二

一.docker文件系统: linuxFS包括boot file system 和 root file system boot file system (bootfs),包含bootloader和kernel,在系统启动完成后,kernel滞留内存,bootfs解除挂载: root file system(rootfs),包括类似/bin,/usr, /lib等目录,这些和kernel无关,这也是不同linux发行版本的差异所在:       Linux  FS Linux FS in Dock

docker基础入门之一

一.概述 dotCloud是docker公司的前身,专注于PaaS的云计算平台:可能是支持最广泛的PaaS平台: 使用container的概念来解决应用stack部署的难题: 定义:什么是docker 开源的应用容器引擎,方便打包发布应用到容器中: Go语音领域比较大型的应用: docker实现: docker是container技术的实现,最早使用LXC作为container的引擎,最新版本的docker使用libcontainer替换了lxc: 采用aufs文件系统来管理Image和cont

docker基础入门

docker安装配置系统版本(centos 6.5 x64) 注意:centos系统版本需要是centos 6 以上,并且系统需要是64位才能安装docker,如果是不是64位系统安装的时候会提示找不到docker-io 简介:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app).几乎没有性能开销,可以很容易地在

Docker基础入门总结

一.什么是Docker 官方文档描述:“Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrast