一、docker简介:

  容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机 制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机), 甚至有人把他称为新一代的虚拟化技术, Docker 无疑就是其中的佼佼者 在一台服务器上同时运行上百个虚拟机,肯定会被认为是痴人说梦,而在一台机器上同时运 行一千个 Docker 容器,这已成为现实 Docker 的目标 Build,Ship and Run Any App,Anywhere— 即通过对 应用组件的封装 (Packaging), 发布(Distribution), 运行 (runing) 等生命周期的管理 , 达到应用组件级别的”一 次封装 , 到处运行”

二、docker特点:

优点:

1、 启动快,资源占用小 , 资源利用高,快速构建标准化运行环境

2、创建分布式应用程序时快速交付和部署,更轻松的迁移和扩展,更简单的更新管理 局限:

局限:

1、 Docker 是基于 Linux 64bit 的,无法在 windows/unix 或 32bit 的 linux环境下使用

2、 LXC 是基于 cgroup 等 linux kernel 功能的,因此 container 的 guest 系统只能是 linux

3、 隔离性相比 KVM 之类的虚拟化方案还是有些欠缺,所有 container 公用一部分的运行库

4、 管理相对简单,主要是基于 namespace 隔离

5、cgroup 的 cpu 和 cpuset 提供的 cpu 功能相比 KVM 的等虚拟化方案相比难以度量 ( 所以 dotcloud 主要是按内存收费 )

6、docker 对 disk 的管理比较有限

7、container 随着用户进程的停止而销毁,container 中的 log 等用户数据不便收集

三、docker与虚拟机比较

的特点启动快比虚拟机 , 可以秒级启动 对资源占用小 , 宿主机上可运行千台容器 方便用户获取 , 分布 , 和更新应用镜像 , 指令简单 , 学习费用低 通过 Dockerfile 配置文件来灵活的自动创建和部署镜像 & 容器 , 提高工作效 率 Docker 除了运行其中应用外 , 基本不消耗其他系统资源 , 保证应用性能同时 , 尽量减小系统开销

四、docker相关网站

https://hub.docker.com/

https://docs.docker.com/

http://docs.docker-cn.com/ docker

五、docker安装:

1、  yum install  docker -y

2、 二进制安装

六、docker 镜像

  镜像(docker image) --- Docker 运行容器之前需要本地存在镜像,若本 能地不存在,那么 Docker 会找默认镜像仓库( Docker Hub 公共注册服务 器中的仓科)下载。

(1) 下载镜像

下载镜像: #docker pull NAME:TAG 下载某个被打上了某个标签的叫 ×× 名字 的镜像

eg:

:latest 若在下载时你未指定标签,默认追加 latest标签,表示库中最新镜像

、进入docker 官方镜像仓库

 

docker exit的原因 docker exited 1_centos

也可以直接进入(网址:https://hub.docker.com/ )

2、选择一个镜像

 

docker exit的原因 docker exited 1_Docker_02

3、选择一个镜像 下载



docker pull nginx



docker exit的原因 docker exited 1_docker_03

(2) 查看本地镜像



docker images



docker exit的原因 docker exited 1_Docker_04

(3)搜索一个镜像



docker search mysql



docker exit的原因 docker exited 1_docker_05

(4) 删除本地镜像



docker rmi nginx : latest



docker exit的原因 docker exited 1_Docker_06

 七、docker镜像分层

镜像的分层结构:支持通过扩展现有镜像,创建新的镜像

docker exit的原因 docker exited 1_centos_07

 

  新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。

分层结构的优势:

&1、共享资源:

有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

&2、可写的容器层:

当容器启动时,一个新的可写层被 加载到镜像的顶部。这一层通常被 称作“容器层” , “容器层”之下 的都叫“镜像层” 。 所有对容器的改动。

无论添加、删除、还是修改文件都只会发生在容器层中。 只有容器层是可写的,容器层下面的所有镜像层都是只读的。

这个特性。

镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。 如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a, 也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠 加之后的文件系统。

1、添加文件

在容器中创建文件时,新文件被添加到容器层中。

2、读取文件

在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文 件。一旦找到,打开并读入内存。

3、修改文件

在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。

4、删除文件

在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。 找到后,会在容器层中记录下此删除操作。

  只有当需要修改时才复制一份数据,这种特性被称作

八、docker镜像的创建

创建镜像的三种方法

(1)基于修改后的容器创建:docker commit 命令

(2)基于本地模板导入

(3)基于 Dockerfile 文件创建

(1) 基于修改后的容器创建:

1、下载一个centos 镜像



docker pull centos



docker exit的原因 docker exited 1_Docker_08

2、创建并启动一个镜像为 centos 的容器



docker run -it centos:latest /bin/bash ( /bin/bash 环境变量)



docker exit的原因 docker exited 1_运维_09

3、退出容器



exit



docker exit的原因 docker exited 1_docker exit的原因_10

4、查看所有的 容器



docker ps -a ( 查看正在运行的容器,docker -ps )



docker exit的原因 docker exited 1_运维_11

5、重新唤醒  刚才启动的容器



docker start CONTAINER ID



docker exit的原因 docker exited 1_centos_12

6、进入容器 并创建一个文件

# 进入容器



docker exec -it CONTAINERID /bin/bash



docker exit的原因 docker exited 1_docker_13

# 创建一个文件

 

docker exit的原因 docker exited 1_Docker_14

7、退出容器到命令行界面

 

docker exit的原因 docker exited 1_centos_15

此时容器较镜像已经发生改变,我们以此生成新镜像

8、生成新的镜像



docker commit   f0decea12ae  centos7.1:latest



docker exit的原因 docker exited 1_运维_16

9、查看本地镜像



docker images



docker exit的原因 docker exited 1_运维_17

生成了一个新的镜像!

(2)基于本地模板导入

1、导出:将镜像保存为本地文件



docker   save -o  centos.tar    centos7.1:latest   ( 也可以  centios.tar.gz )



docker exit的原因 docker exited 1_docker_18

2、删除 centos7.1 镜像



docker  rmi  centos7.1: latest



docker exit的原因 docker exited 1_docker_19

3、导入:将压缩包文件导入到本地镜像列表



docker  load  -i   centos7.1.tar



docker exit的原因 docker exited 1_运维_20

(3)基于 Dockerfile 文件创建

是一个文本文件,用来配置 image,记录了镜像构建的所有步骤。

根据 该文件生成二进制的 image 文件

1、创建目录dockerfile  并切换至此目录



mkdir  dockerfile
cd  dockerfile



docker exit的原因 docker exited 1_Docker_21

2、创建并编辑文件 dockerfile

# 创建



vim dockerfile



docker exit的原因 docker exited 1_docker exit的原因_22

# 编辑内容如下



FROM centos:7
RUN yum install -y vim



docker exit的原因 docker exited 1_centos_23

3、创建镜像



docker build -t centostest .



build:创建镜像

-t:为镜像指定名字

 

docker exit的原因 docker exited 1_运维_24

注:

下面列出了 Dockerfile 中最常用的指令

FROM:指定 base 镜像。

MAINTAINER:设置镜像的作者,可以是任意字符串。

COPY:将文件从 build context 复制到镜像。

COPY 支持两种形式:

COPY src dest

COPY ["src", "dest"]

注意:src 只能指定 build context 中的文件或目录。

ADD:与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会

被自动解压到 dest。

ENV:设置环境变量,环境变量可被后面的指令使用。

EXPOSE:指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。

:将文件或目录声明为 volume。

:为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。

RUN:在容器中运行指定的命令,RUN 指令通常用于安装应用和软件包。

:容器启动时运行指定的命令。 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。

:设置容器启动时运行的命令,可让容器以应用程序或者服务的形式运行。 Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。

九、docker的使用

1、创建容器,create命令是创建并不启动容器   (不常用)



docker create  -it centos7.1:latest



2、停止一个容器



docker stop CONTAINER ID (kill)



docker exit的原因 docker exited 1_docker_25

3、启动停止的容器



docker start CONTAINER ID (重启 restart)



docker exit的原因 docker exited 1_docker exit的原因_26

注:非持久后台守护状态的虚拟机,在重启后当你查看时还是关闭状态

4、运行一个容器



# docker run -ti centos:latest /bin/bash



创建并运行一个容器 ,此时你会直接被切换到容器中

#ctrl+d//exit退出,并且容器也退出

#ctrl+p+q退出容器,并且保持容器up的状态

-t 分配一个伪终端

-i 让容器的标准输入持续打开

用/bin/bash环境显示

docker exit的原因 docker exited 1_centos_27

5、以后台守护进程(Daemonized)形态运行

 

docker exit的原因 docker exited 1_运维_28

6、删除一个容器



docker rm CONTAINER ID



-f 强制删除处于运行中的容器

-l 删除链接,保留容器

-v 删除挂载的数据卷

 

docker exit的原因 docker exited 1_docker exit的原因_29

7、进入容器

# 1  

docker attach直接进入容器 启动命令的终端,不会启动新的进程.

docker  attach  CONTAINER ID

&

docker run -d centos /bin/bash -c "while true;do sleep 1;echo I_am_docker;done"

 

docker exit的原因 docker exited 1_centos_30

&

docker exit的原因 docker exited 1_centos_31

#2  docker exec则是在容器中打开新的终端,并且可以启动新的进程



docker exec -it CONTAINER ID /bin/bash



docker exit的原因 docker exited 1_centos_32

8、导出容器:导出一个已经创建的容器到文件,不管容器是否运行



docker export  CONTAINER ID  > centos7.1.tar



docker exit的原因 docker exited 1_centos_33

9、将容器导入系统成为镜像



cat centos7.1.tar | docker import - test



docker exit的原因 docker exited 1_docker_34

 

10、查看容器日志 (显示容器启动进程的控制台输出)


docker logs -f CONTAINER ID


docker exit的原因 docker exited 1_centos_35

11、暂停容器


docker pause CONTAINER ID


docker exit的原因 docker exited 1_Docker_36

12、取消暂停 继续运行容器


docker unpause CONTAINER ID


docker exit的原因 docker exited 1_运维_37

十、docker镜像的仓库 --- repository的创建

仓库分为公共仓库和私有仓库

的官方仓库 https://hub.docker.com

DockerPool社区仓库 https://dl.dockerpool.com

Dockern Pool (http://dockerpool.com)是国内专业的Docker社区,目前 也提供了官方镜像的下载管理服务

1、下载 registry 镜像

 

docker exit的原因 docker exited 1_docker_38

2、利用容器启用私有仓库


docker run -d -p 5000:5000 -v /var/lib/registry:/var/lib/registry --restart=always --name registry registry:2


docker exit的原因 docker exited 1_docker exit的原因_39

3、客户端修改配置文件 /etc/docker/daemon.json


# vim /etc/docker/daemon.json


docker exit的原因 docker exited 1_运维_40

# 添加以下内容


"insecure-registries": ["192.168.226.147:5000"],


docker exit的原因 docker exited 1_Docker_41

4、客户端: 重启 docker


systemctl restart docker


docker exit的原因 docker exited 1_运维_42

5、客户端:对镜像进行改名


# docker tag nginx:latest 192.168.226.147:5000/nginx:latest


docker exit的原因 docker exited 1_docker_43

 

6、客户端:上传镜像


docker push  192.168.226.147:5000/nginx:latest


docker exit的原因 docker exited 1_Docker_44

7、客户端:删除已有镜像


docker rmi  192.168.226.147:5000/nginx:latest
docker  rmi  nginx


docker exit的原因 docker exited 1_docker_45

8、客户端:下载镜像


docker  pull   192.168.226.147:5000/nginx:latest


docker exit的原因 docker exited 1_运维_46

下载成功,证明私有仓库可用!