docker (1) ---简介,使用

1、docker简介:

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

2、docker特色:

优势:

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

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

局限:

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

2LXC 是基于 cgroup linux kernel 功能的,所以 container guest 系统只能是 linux sql

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

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

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

6docker disk 的管理比较有限 vim

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

3、docker与虚拟机比较

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

4、docker相关网站

https://hub.docker.com/

https://docs.docker.com/

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

5、docker安装:

1、  yum install  docker -y

2、 二进制安装

6、docker 镜像

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

1) 下载镜像

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

eg 

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

 

 1、进入docker 官方镜像仓库

 

也能够直接进入(网址:https://hub.docker.com/ 

2选择一个镜像

 

3、选择一个镜像 下载

docker  pull  nginx

2) 查看本地镜像

docker  images

3)搜索一个镜像

docker   search   mysql

4) 删除本地镜像

docker  rmi  nginx : latest

 7、docker镜像分层

  docker镜像的分层结构:支持经过扩展示有镜像,建立新的镜像

 

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

分层结构的优点:

&1、共享资源:

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

&2、可写的容器层:

 当容器启动时,一个新的可写层被 加载到镜像的顶部。这一层一般被 称做容器层容器层之下 的都叫镜像层。 全部对容器的改动。

 - 不管添加、删除、仍是修改文件都只会发生在容器层中。 只有容器层是可写的,容器层下面的全部镜像层都是只读的。

这个特性。

镜像层数量可能会不少,全部镜像层会联合在一块儿组成一个统一的文件系统。 若是不一样层中有一个相同路径的文件,好比 /a,上层的 /a 会覆盖下层的 /a, 也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠 加以后的文件系统。

一、添加文件

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

二、读取文件

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

三、修改文件

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

四、删除文件

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

只有当须要修改时才复制一份数据,这种特性被称做 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像自己进行任何修改。

8、docker镜像的建立

建立镜像的三种方法

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

2)基于本地模板导入

3)基于 Dockerfile 文件建立

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

1、下载一个centos 镜像

 docker  pull centos

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

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

3、退出容器

exit

4、查看全部的 容器

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

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

docker start  CONTAINER ID

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

# 进入容器

docker  exec -it   CONTAINERID   /bin/bash

# 建立一个文件

 

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

 

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

8、生成新的镜像

docker commit   f0decea12ae  centos7.1:latest

9、查看本地镜像

docker images

生成了一个新的镜像!

2)基于本地模板导入

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

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

2、删除 centos7.1 镜像

docker  rmi  centos7.1: latest

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

docker  load  -i   centos7.1.tar

3)基于 Dockerfile 文件建立

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

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

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

mkdir  dockerfile
cd  dockerfile

2、建立并编辑文件 dockerfile

# 建立

vim  dockerfile  

# 编辑内容以下

FROM centos:7
RUN yum install -y vim

3、建立镜像

docker build -t centostest .

build:建立镜像

-t:为镜像指定名字

 

注:

下面列出了 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:将文件或目录声明为 volume

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

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

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

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

9、docker的使用

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

docker create  -it centos7.1:latest

2、中止一个容器

docker    stop  CONTAINER ID   (kill)

3、启动中止的容器

docker  start  CONTAINER ID    (重启  restart)

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

4、运行一个容器

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

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

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

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

-t 分配一个伪终端

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

/bin/bash环境显示

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

 

6、删除一个容器

docker  rm  CONTAINER ID

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

-l 删除连接,保留容器

-v 删除挂载的数据卷

 

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"

 

&

#2  docker exec则是在容器中打开新的终端,而且能够启动新的进程

docker  exec  -it      CONTAINER ID   /bin/bash

8、导出容器:导出一个已经建立的容器到文件,无论容器是否运行

docker export  CONTAINER ID  > centos7.1.tar

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

cat centos7.1.tar | docker import - test

 

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

docker  logs  -f    CONTAINER ID

11、暂停容器

docker pause   CONTAINER ID

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

docker unpause   CONTAINER ID

10、docker镜像的仓库 --- repository的建立

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

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

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

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

1、下载 registry 镜像

 

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

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

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

#  vim /etc/docker/daemon.json

# 添加如下内容

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

4、客户端: 重启 docker

systemctl restart docker

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

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

 

6、客户端:上传镜像

docker push  192.168.226.147:5000/nginx:latest

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

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

8、客户端:下载镜像

docker  pull   192.168.226.147:5000/nginx:latest

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

相关文章
相关标签/搜索