4-8 Docker 概述

试验环境  centos7   

Docker   概述   

Docker   是一个开源框架应用容器,让开发者可以打包他们的应用以及依赖包到一个可以移植的容器中,然后分布到任务流行的Linux   机器上,也可以实现虚拟化,容器时完全使用沙盒机制,互相之前不会有任何接口,  几乎没有星型开销,可以很容易地在机器上和数据中心进行运行,最重要的是,他们不依赖于任何语言,框架保证系统

  

Docker   是dotCoud  公司开源的一个基于LXC   的高级容器引擎源代码托管在Github   上,基于go语言尊姓从apache2.0  协议开源

Android      linux     JVM     java程序   app  

linux       -》   docker   服务做成系统直接可以运行起来

 windows      docker    服务做成镜像可以直接运行起来

扩展LXC   linux   Container   的简写,是一种内核虚拟化技术,可以提供轻量级的徐吉华,以便隔离进程和资源,

8.1.1   docker 容器技术和虚拟机对比

   相同点:docker   容器技术和虚拟机技术,都是虚拟化技术

docker  相对于VM虚拟机,少了虚拟机操作系统这一层,所以docker  效率比虚拟机高

在docker 上启动一个实例1-2 秒, 

工作流程,在服务器A运行docker  Engine   服务,在docker Engine   上启动很多容器container    从外网Docker   Hub   上把image 操作系统镜像下载来,放到container  容器运行,这样一个容器的实例就运行起来了

最后通过Docker    client 对docker  容器虚拟化平台进行控制

Image和Container   的关系,image  可以理解为系统镜像,Container   是image 在运行时的一个状态


Docker   核心技术  

1  Namespace  -  实现Container     的进程,网络,消息,文件系统和主机名的隔离

  2  Cgroup  -   实现对资源的配额和度量




8.2   部署docker  容器虚拟化平台

1  )  实战1  ,部署docker 容器虚拟化平台

  把docke-rpm .tar.gz    上传到linux系统上,  

[root@xuegod6 ~]# tar -xf docker-rpm.tar.gz

[root@xuegod6 ~]# cd docker-rpm/

[root@xuegod6 docker-rpm]# ;s

-bash: 未预期的符号 `;' 附近有语法错误

[root@xuegod6 docker-rpm]# ls

container-selinux-2.21-2.gitba103ac.el7.noarch.rpm        oci-register-machine-0-3.11.1.gitdd0daef.el7.x86_64.rpm

container-storage-setup-0.6.0-1.gite67c964.el7.noarch.rpm  oci-systemd-hook-0.1.12-1.git1e84754.el7.x86_64.rpm

docker-1.12.6-55.gitc4618fb.el7.centos.x86_64.rpm          oci-umount-1.12.6-55.gitc4618fb.el7.centos.x86_64.rpm

docker-client-1.12.6-55.gitc4618fb.el7.centos.x86_64.rpm  repodata

docker-common-1.12.6-55.gitc4618fb.el7.centos.x86_64.rpm  skopeo-containers-0.1.23-1.git1bbd87f.el7.x86_64.rpm

2 )创建自己的repo 源  

[root@xuegod6 docker-rpm]# rm -rf repodata/ 

[root@xuegod6 docker-rpm]# createrepo    ./

3   ) [root@xuegod6 docker-rpm]# vim /etc/yum.repos.d/docker-rpm.repo

[docker-rpm]

name=docker-rpm

baseurl=file:///root/docker-rpm

enable=1

gpgcheck=0

~         

4 )一走yum   源

[root@xuegod6 docker-rpm]# cd /etc/yum.repos.d/

[root@xuegod6 yum.repos.d]# ls

CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo

CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  docker-rpm.repo

[root@xuegod6 yum.repos.d]# mv CentOS-*  /opt/

5  )安装docker  方法2   使用centos系统自带的源码安装,比较慢

[root@xuegod6 yum.repos.d]# yum -y install docker

开始启动    [root@xuegod6 yum.repos.d]# systemctl start docker && systemctl enable docker

查看version    版本

[root@xuegod6 yum.repos.d]# docker -version

flag provided but not defined: -version

See '/usr/bin/docker-current --help'.

[root@xuegod6 yum.repos.d]# docker  version 

Client:

Version:        1.12.6

API version:    1.24

Package version: docker-1.12.6-55.gitc4618fb.el7.centos.x86_64

Go version:      go1.8.3

Git commit:      c4618fb/1.12.6

Built:          Thu Sep 21 22:33:52 2017

OS/Arch:        linux/amd64

Server:

Version:        1.12.6

API version:    1.24

Package version: docker-1.12.6-55.gitc4618fb.el7.centos.x86_64

Go version:      go1.8.3

Git commit:      c4618fb/1.12.6

Built:          Thu Sep 21 22:33:52 2017

OS/Arch:        linux/amd64

也可以这样查看

[root@xuegod6 yum.repos.d]# docker info

Containers: 0

Running: 0

Paused: 0

Stopped: 0

Images: 0

二  下载docker镜像

1 ) 查看docker  searce   centos   

[root@xuegod6 yum.repos.d]# docker search centos


方法1,从公网dockerhub    拉去下载 image  pull    拉  

docker pull docker.io/centos     复制上面第一行



方法2    把之前下载好的image 镜像导入  image  

把centos-latest-docker  -iamge.tar    镜像上传到linux  


查看镜像列表

[root@xuegod6 ~]# docker images

REPOSITORY          TAG                IMAGE ID            CREATED            SIZE

docker.io/centos    latest              470671670cac        4 months ago        237.1 MB

[root@xuegod6 ~]#

三  docker平台的使用

开始运行docker  

docker.io/centos latest 470671670cac 4 months ago 237.1 MB

[root@xuegod6 ~]# docker  run -it docker.io/centos:latest    /bin/bash 

[root@e24065a502c6 /]#

-i:  以交互模式进行容器,通常与-t   同时使用

-t   为容器重新分配一个为终端输入,通常与-i   同时使用


2  )已经能独立运行了

[root@e24065a502c6 /]# cat /etc/redhat-release

CentOS Linux release 8.1.1911 (Core)

  exit   退出去

例2   在container    中启动一个长久运行的进程,不断向stain   输出hello world  ,模拟一个后台运行的服务

docker   常用参数

-d   后台运行容器,并返回容器ID

-c   后面跟待完成的命令

docker  run  -d     docker.io/centos:latest /bin/bash   -c    "while true;do echo hello world;sleep 1;done"

sadkfsdklfsadfsdfsakjldfasdfsds

容器的ID 号 

从容器中读取日志

语法: docker  logs     容器实例Name  /ID

  docker  logs    adjkssaldfsld           只哎哟ID 是唯一就可以

[root@xuegod6 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

[root@xuegod6 ~]# cat /proc/sys/net/ipv4/ip_forward   

1

也可以使用

[root@xuegod6 ~]# vim /etc/sysctl.conf

插入以下内容

net.ipv4.ip_forward = 1

[root@xuegod6 ~]# sysctl -p

net.ipv4.ip_forward = 1

查看所有的进程ID

[root@xuegod6 ~]# docker ps -a

CONTAINER ID        IMAGE                    COMMAND            CREATED            STATUS                    PORTS              NAMES

e24065a502c6        docker.io/centos:latest

docker logs e24065a502c6   能查出所有刚才   docker里面的命令



例3

杀死一个容器:比如:杀死一个正在后台运行的容器


查看要杀死的容器的ID

docker kill d031ed2c6a  ID 号

例4    启动,停止,重启container   容器实例

[root@xuegod6 ~]# docker run -d docker.io/centos:latest /bin/bash -c "while true;do echo hello world;sleep 1;done"

f030193723cd760415fd5969bd8de35d4493f11b3aae27033591d2bd65a34221

[root@xuegod6 ~]# cat /proc/sys/net/ipv4/ip_forward 

1

[root@xuegod6 ~]# docker  ps

CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS              NAMES

f030193723cd        docker.io/centos:latest  "/bin/bash -c 'while "  About a minute ago  Up About a minute                      prickly_shannon

[root@xuegod6 ~]# docker  stop|start|restart   f03019372   停止    重启 开始  

删除镜像

docker    rm  -f    ID号  

8.4    docker   镜像制作方法

Docker  Image   的制作两种方法

  方法1:  docker commit   保存 container  的当前状态到Image后,然后生成对应的image 

  方法2:  docker  build   使用Dockerfile    文件自动化制作,image 

创建一个安装好的apache  工具

[root@xuegod6 ~]# docker run -it docker.io/centos /bin/bash

[root@ffd64485cc9b /]# yum install httpd -y 

根据容器当前状态做一个image 镜像  创建一个  安装了一个apache    工具的centos镜像

语法 docker  commit  <container的ID>  或者<image_name>


[root@xuegod6 ~]# docker commit ffd64485cc9b docker.io/centos:latest

sha256:bb36ea5da00c9d66d674460da38c264178fd10f2efcc3b14575e10283e6ed627

[root@xuegod6 ~]# docker  images   就会覆盖之前的 

REPOSITORY          TAG                IMAGE ID            CREATED            SIZE

docker.io/centos    latest              bb36ea5da00c        13 seconds ago      279.4 MB

docker.io/centos    <none>              470671670cac        4 months ago


[root@xuegod6 ~]# docker commit ffd64485cc9b docker.io/centos:httpd

sha256:22685138d3850ab6d2fe7d2d57617c520af1e68118131707cafa26583b17a4e2

[root@xuegod6 ~]# docker  images 

REPOSITORY          TAG                IMAGE ID            CREATED              SIZE

docker.io/centos    httpd              22685138d385        2 seconds ago        279.4 MB

docker.io/centos    latest              bb36ea5da00c        About a minute ago  279.4 MB

docker.io/centos    <none>              470671670cac        4 months ago 

使用镜像创建的docker.io/centos:apache   镜像,生成一台容器实例

镜像,生成一台容器

docker   run  -it      docker.io/centos :apache         /bin/bash   

[root@c33af26e3cde /]# rpm -qa httpd   查看,已经安装好的apache    命令

httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64

说明基于安装apache 的docker安装成功

方法二,  创建一个基于centos的httpd  web  服务器镜像

1  创建工作目录

[root@xuegod6 ~]# mkdir /docker-build

[root@xuegod6 ~]# cd /docker-build/ 

[root@xuegod6 docker-build]# touch Dockerfile

注  make自动化编译需要Makefile  文件,自动化创建docker镜像时,需要Dockerfile   

2  编辑Dockerfile   

[root@xuegod6 docker-build]# vim Dockerfile

插入以下内容

FROM docker.io/centos:latest    基于哪个镜像

MAINTAINER  <root@xuegod6>  镜像的作者

RUN yum -y install httpd  安装软件

ADD start.sh  /usr/local/bin/start.sh

ADD index.html /var/www/html/index.html

[root@xuegod6 docker-build]# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh

~         

 3 )chmod a+x start.sh

  [root@xuegod6 docker-build]# echo "docker image build test" > index.html

[root@xuegod6 docker-build]# ls

Dockerfile  index.html  start.sh

4  )  使用build  来创建新的image  

语法 :docker   build  -t    父 镜像名   镜像的tag     Dockerfile   文件所在的路径

-t   :   表示tage    镜像名

[root@xuegod6 docker-build]# docker build -t docker.io/centos:httpd ./

注:

注:docker  镜像=应用/程序+库

  方法1:Save   Image   To  TarBall

  方法2:  Push   Iamge   To  Docker  Hub  


 方法1:Save  Image  To  TarBall  

保存  Image  到tar  包

 语法: docker  save  -o  导出的镜像名.tar   本地镜像名:镜像标签

[root@xuegod6 ~]# docker save -o centos-httpd-docker-image.tar docker.io/centos:httpd




方法3 使用阿里云的私有仓库发布,等下结说完私有仓库以后,

8.5   Container    容器端口映射

[root@xuegod6 ~]# docker run -d -p 80:80 docker.io/centos:httpd /bin/bash -c /usr/local/bin/start.sh

def5d5dccc529c5b1e84ca4bd3d855604bfce9e8c799db367e1efa13e46d1459

-p  前面是物理机的端口  后面是容器的端口

[root@xuegod6 ~]# netstat -antup | grep 80

tcp        0      0 192.168.43.99:22        192.168.43.80:3632 

使用浏览器查看80 端口   把容器中的80端口映射到物理机上的80 端口

 

现在docker  实例运行的网络模式就像VMware   的nat  模式,后期会讲给docker 配置静态IP

 

  实战6  : 访问正在运行的container  容器实例

    语法  docker  exec  -it   <container  ID  | name > /bin/bash   

  [root@xuegod6 ~]# docker exec -it def5d5dccc52 /bin/bash

[root@def5d5dccc52 /]#

[root@def5d5dccc52 /]# cd /var/www/html/

[root@def5d5dccc52 html]# ls

index.html

[root@def5d5dccc52 html]# echo xuegod >/var/www/html/test.html

测试一下

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