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

一、docker简介:

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

二、docker特点:

优点:

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

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

局限:

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

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

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

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

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

6docker disk 的管理比较有限

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

三、docker与虚拟机比较

    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 

  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

 七、docker镜像分层

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

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

分层结构的优势:

&1、共享资源:

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

&2、可写的容器层:

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

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

这个特性。

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

1、添加文件

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

2、读取文件

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

3、修改文件

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

4、删除文件

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

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

八、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

九、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

十、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

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

原文地址:https://www.cnblogs.com/myxxjie/p/11066718.html