Docker基础

什么是Docker?


Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或者数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

Docker引擎的基础是Linux自带的容器(Linux Containers,LXC)技术。IBM对于容器技术的准确描述如下:

容器有效的将单个操作系统管理的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(paravirtualization)和系统调用替换中的复杂性。

我们可以将容器理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,容器之间可以建立通信机制。容器的创建和停止都十分快速(秒级),容器自身对资源的需求十分有限,远比虚拟机本身占用的资源少。

Docker结构


image

docker如上图所示,由Client客户端,DOCKER_HOST宿主机,Registry仓库三个部分构成。在客户端部分,用户可以拉取镜像、创建镜像和运行镜像(客户端-服务器的架构。docker client告诉Docker daemon建立、运行、发布你的Docker容器。Docker client和daemon可以运行在一个系统中,或者可以使用Docker client和远程Docker daemon取得联系。docker服务端和docker守护进程之间通过sockets或者REST API交互)。

运行机制如下描述:

1.用户在客户端的命令都交给Docker daemon来处理;
2.如doker run 运行镜像:docker daemon会检查宿主机是否有这个images,若没有则去镜像仓库(Registry)中拉取镜像;
3.再运行镜像后以容器的形式在宿主机中运行

Docker给DevOps带来的好处

更快速的交付和部署:开发人员可以使用镜像快速的构建标准开发环境;开发完成后,测试和运维人员可以使用开发人员提供的docker镜像快速部署应用,可以避免开发和测试运维人员之间的环境差异导致的部署问题。

更高校的资源利用:Docker容器的运行不需要额外的虚拟化管理程序支持,它是内核级的虚拟化,在占用更少资源的情况实现更高的性能。

更方便的迁移和扩展:Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等。这种兼容使得用户可以在不同的平台之间很方便的完成应用迁移。

更简单的更新管理:使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作,并且所有修改都以增量方式进行分发和更新。

虚拟化与Docker

虚拟化的核心是对资源进行抽象,目标往往是为了在同一个机器上运行多个系统或应用,从而提高系统资源的利用率。虚拟化分为很多类型,比如常见的硬件辅助虚拟化(VMware workstation、 KVM等)。Docker所代表的容器虚拟化技术属于操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程

传统虚拟化和容器技术结构比较:传统虚拟化技术是在硬件层面实现虚拟化,增加了系统调用链路的环节,有性能损耗;容器虚拟化技术以共享Kernel的方式实现,几乎没有性能损耗。

Docker三大基本概念

image

Docker镜像类似于虚拟机镜像,是一个只读模板,并且包含了文件系统。一个镜像可以只包含一个操作系统环境(比如SUSE镜像),也可以安装了用户程序及其运行环境(比如eBackup镜像)。镜像其实就是一个文件,任何用户程序都可以成为镜像的一部分。

镜像=操作系统+软件运行环境+用户程序

image

如上图,一个layer就是一个image,多个image又可以打包成一个image。Image类似一个单链表系统,每个image包含一个指向parent image的指针,没有parent image的image是baseimage(image的指针靠sqlite数据库来保存)。

最上面的一层(不属于image)是可写的,上面的内容依赖于下面的内容,如果要修改下面的内容,先将下面的内容复制到上面再进行修改。

Image是创建container的基础。

Container

容器是从镜像创建的运行实例,可以将其启动、开始。停止、删除,而这些容器都是相互隔离(独立进程),互不可见的。

Repository

Repository是image的集合,而Registry是Repository的集合。

Docker在Centos7环境下的安装


1.使用root权限登录系统;

2.更新系统包到最新:

yum -y update

3.添加yum仓库

cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enable=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF</pre>

如下图:

image

4.安装docker包

yum install -y docker-engine

yum install -y docker-selinux

在使用现成的安装包的时候selinux的安装一定要在docker-engine之前

yum list installed|grep docker

5.启动docker

systemctl start docker.service

6.验证docker已经正常安装

docker run hello-world

7.配置docker开机自启动

systemctl enable docker.service

Docker的卸载


使用yum卸载docker

1.列出安装的软件包

yum list installed | grep docker

2.移除软件包

yum -y remove docker-engine.x86_64(这命令不会删除镜像,容器,卷组和用户自配置文件)

3.删除所有镜像,容器和组

rm -rf /var/lib/docker

Docker指令

image
image
docker build:创建镜像;
docker pull + 镜像名(镜像地址):获取镜像;
docker images:查看本地镜像;
docker run + 镜像名 : 运行镜像 ;
docker run -d +镜像名 : 后台运行镜像 ;
docker ps : 查看当前运行的容器;
docker exec -it + 容器ID:进入容器(如进入Ubuntu);
docker inspect +容器名或容器ID:查看容器所有信息。

Docker网络


image

如上图所示Docker网络类型有Bridge、Host 和None

Host模式:容器直接连接到宿主机上,容器内的网络和宿主机的网络一致;

Bridge模式:以bridge桥段和宿主机相连,启动容器时容器会虚拟出一个网卡,然后连接Bridge再和主机连接。

开放端口号的形式运行(以下以运行nginx为例):

docker run -d -p 8088:80 nginx // -d 指后台运行  -p为开启端口号映射 8088为宿主机端口号 80为nginx监听端口号
docker run -d -P(大写P) nginx  // -P指开放所有端口号,并随即指定端口号作为映射

开放端口号遇到的问题:

image
问题描述:开放端口号失败;
原因:docker 指定了快速启动方式(百度知道的=-=);
解决办法:重启(restart)Docker后再运行即可。

Dockerfile语法


[图片上传中...(image-281405-1543037745030-2)]

[图片上传中...(image-c72795-1543037745030-1)]

Docker制作镜像示例


需要用到的操作: Dockerfile的创建,docker build。

1.创建Dockerfile,示例内容如下:

from tomcat //注释:运行于tomcat这个容器
MAINTAINER Jerry_Liang 1097872779@qq.com //作者名Jerry_Liang 联系方式1097872779@qq.com
COPY 项目名.war  /usr/local/tomcat/webapps  //将war包拷贝到tomcat容器中

2.将项目war包放到与Dockerfile的同一目录上;

3.执行创建镜像命令

docker build -t jpress:latest +Dockerfile路径名(如果为当前工作路径则用“.”)
 //注释:-t为指定镜像名和后面的latest为镜像标签

volume操作


挂载实现:

第一种方法:

docker run -p 80:80 -d -v F:\Docker:/usr/share/nginx/html nginx 
//注释:-d 指在以守护进程的模式运行(daemon守护进程) -v 即volume将本地指定的文件夹(此处为本机的F盘下的Docker文件夹)挂载到容器的/usr/share/ngixn/html 来实现同步(即主机文件夹有变,容器的文件夹也会发生变化)

第二种方法:

1.docker create -v F:\Docker\data:/var/mydata --name data_container ubuntu
 //注释 --name指定容器名字  ubuntu指定基础镜像 
2.docker run -it --volumes-from data_container ubuntu /bin/bash 
 //注释 -it交互方式运行,直接进入容器

运行一个好玩的镜像


运行结果图:

image

操作:

首先获取搜索该镜像:docker search whalesay
然后获取镜像: docker pull docker/whalesay
最后运行:docker run docker/whalesay cowsay + 你想说的话(比如我输入的是Docker good)

分享镜像


docker login //首先是登录,这样才会有权限分享
docker push + 本地镜像名

参考文章

Docker基础:https://blog.csdn.net/weixin_39381833/article/details/80740235

Docker介绍 : https://blog.csdn.net/u012299594/article/details/52343910

视频教程:https://www.imooc.com/video/15727https://www.imooc.com/learn/824

Linux下的Docker安装教程:https://blog.csdn.net/qq_36892341/article/details/73918672

参考文章:https://www.cnblogs.com/luchuangao/p/7748575.html?tdsourcetag=s_pctim_aiomsg#_label0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容