虚拟机

  •  资源占用多  冗余步骤多 启动慢
  •  虚拟机它可以在一种系统里面运行另外一种系统,而对于底层系统来说,虚拟机就是一个普通的文件。

Docker

  一次构建、随处运行

  • 更快速的应用交付与部署
  • 更便捷的升级和扩缩容
  • 更简单的系统运维
  • 更高效的计算资源利用

Docker的优势

  • 轻亮,秒级的快速启动速度
  • 简单易用活跃的社区
  • 标准统一的打包/部署/运行方案
  • 镜像支持增量分支,易于部署,易于构建,良好的REST API
  • 性能:尤其是内存和io的开销

Docker的三大组成

  仓库:仓库(repository)可看着一个代码控制中心,用来保存镜像。

  镜像(类):Docker 镜像(Image),就相当于是一个 root 文件系统。

  容器(实例):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器

  原理:

  

安装

  centos6.8

1.依赖的库epel-release

1 yum install -y epel-release

 2.安装docker-io

1 yum install -y docker-io

3.安装后的配置文件

1 /etc/sysconfig/docker

4.启动docker后台

1 service docker start

5.查看版本

1 docker version

6.配置阿里云加速地址

1 vim /etc/sysconfig/docker
2 other_args = "--registry-mirror=https://xxxx.mirror.aliyuncs.com"

7.重启docker

1 service docker restart 

  centos7官网参照官网

 1 阿里云镜像加速专网:dev.aliyun.com/search.html
 2 专属加速地址:https://xxxx.mirror.aliyuncs.com
 3 可能没有这个配置文件/etc/docker/daemon.json 这里就要新建一个此文件
 4 vim /etc/docker/daemon.json
 5 写入:
 6     {
 7         "registry-mirror": ["https://xxxx.mirror.aliyuncs.com", ]
 8     }
 9 systemctl daemon-reload
10 systemctl restart docker
 1 cat /etc/redhat-release
 2 yum -y install gcc
 3 yum -y install gcc c++
 4 gcc -v
 5 官网先卸载
 6 sudo yum remove docker \
 7                   docker-client \
 8                   docker-client-latest \
 9                   docker-common \
10                   docker-latest \
11                   docker-latest-logrotate \
12                   docker-logrotate \
13                   docker-engine
14
15 安装需要的软件包
16 sudo yum install -y yum-utils \
17   device-mapper-persistent-data \
18   lvm2
19 设置stable镜像仓库
20 sudo yum-config-manager \
21     --add-repo \
22     https://download.docker.com/linux/centos/docker-ce.repo
23
24 sudo yum-config-manager \
25     --add-repo \
26     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
27
28 更新yum软件包索引
29 sudo yum makecache fast
30
31 安装docker-ce
32 yum -y install docker-ce
33 sudo yum install docker-ce docker-ce-cli containerd.io
34 yum list docker-ce --showduplicates | sort -r
35
36 启动并测试
37 sudo systemctl start docker
38
39 配置镜像加速
40 mkdir -p /etc/docker
41 vim /etc/docker/daemon.json
42 配置
43 {
44   "registry-mirror": ["https://xxxx.mirror.aliyuncs.com", ]
45 }
46 systemctl daemon-reload
47 systemctl restart docker
48
49 卸载
50 停止docker
51 systemctl stop docker
52 yum -y remove docker-ce
53 rm -rf /var/lib/

  运行容器docker

1 docker run hello-world 由于本地没有hello-world这个镜像,会下载一个hello-world镜像,并在容器内运行

docker常用命令

1 帮助命令
2     docker version
3     docker info
4     docker --help
5 鲸鱼背上装有集装箱
6     蓝色的大海:宿主机系统MaxOS
7     鲸鱼就是docker
8     集装箱就是容器实例,容器实例来自镜像模板

镜像命令

 1 docker images  列出本地主机上镜像模板
 2 options参数
 3 -a: 列出本地所有镜像
 4 -q:只显示镜像id
 5 --digests:显示镜像的摘要信息
 6 --no-trunc:显示完整的镜像信息
 7
 8 网站:http://hub.docker.com
 9 去Docker Hub上查nginx
10 1.docker search
11 docker search nginx
12 options参数
13     -no-trunc:显示完整的镜像信息  docker search -s 30 -no-trunc nginx
14         -s:列出收藏数不小于指定值的镜像 docker search -s 30 nginx
15     --automated:只列出automated build类型的镜像
16
17 2.docker pull
18     docker pull nginx:latest=docker pull nginx 最新版本
19     docker pull nginx:1.12
20
21 3.docker rmi 镜像id
22     删除单个 docker rmi -f id
23     删除多个 docker rmi -f 镜像名1:TAG  镜像名2:TAG
24     删除全部 docker rmi -f $(docker images -qa)

容器命令

 1 1.下载一个centos docker pull centos
 2 2.新建并启动容器  docker run
 3 docker run -it  容器id  --name mycentos重新另起别名  i交互 t重分配终端   -P:随机端口映射 -p:指定端口映射 docker run -it -p 8888:6379 redis
 4 3.docker ps 列出所有运行的docker容器
 5     参数 a列出所有运行过的容器 l显示最近创建的容器 n显示最近创建的几个容器 q只显示容器id编号
 6     docker ps -n 3
 7 4.退出 exit关闭并退出   ctrl+p+q容器不停止退出
 8 5.重启容器
 9     docker start 容器id
10     docker restart 容器id
11 6.停止
12     docker stop 容器id
13     docker kill 容器id 强制
14 7.删除已停止的容器
15     docker rm 容器id      停止的容器
16     docker rm -f 容器id      强制删除正在运行的容器
17
18     一次性删除多个容器:
19     docker rm -f $(docker ps -q -a)
20     docker ps -a -q | xargs docker rm
21     -xargs:linux可变参数
22
23 -------------------****************------------------
24 8.启动守护式
25     docker run -d centos容器
26
27 9.查看容器日志
28     docker logs -f -t --tail 容器id
29     -t加入时间戳
30     -f跟随最新的日志打印
31     --tail 3 数字显示最后3条
32
33 10.查看容器内的进程
34     docker top 容器id
35
36 11.查看容器内部的细节
37     docker inspect 容器id  数组里边以json字符串看明细
38
39 12.进入正在运行的容器并以命令行交互
40     docker exec -it 容器id bashshell(ls -l/tmp外面获取结果 /bin/bash进入容器的方法)
41     重新进入docker attach 容器ID
42     上述两区别: attach 直接进入容器启动命令的终端,不会启动新的进程
43                exec    是在容器中打开新的终端,并且可以启动新的进程
44     弹幕高能补充:docker exec -it 容器ID /bin/bash 再使用exit不会使容器关闭
45
46 13.从容器内拷贝文件到主机上
47     docker cp 容器id: /tmp/yum.log /opt
48     docker commit -m="提交的信息" -a="作者" 容器id 要创建的目标镜像名字:[标签名]
49 14.docker commit提交成为新的镜像

docker镜像

1 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件
2 UnionFS(联合文件系统):对文件系统的修改行为一次提交来一层层的叠加
3 联合文件系统是docker镜像的基础
4 bootfs包含bootloader和kernel两部分,bootloader加载kernel
5 rootfs包含linux系统etc,bin等标准目录与文件,它其实就是不同操作系统发行版 ubuntu与centos
6 为什么快?底层共用宿主机的kernel
7 分层好处:共享资源

 docker容器数据卷

1 作用:1.主要做持久化2.容器之间可以共享数据
2 容器内添加数据卷:
3     1.命令方式 docker run -it -v /宿主机绝对路径:/容器内目录 --privileged=true 镜像名    ps:v=volume
4       加权限:命令方式 docker run -it -v /宿主机绝对路径:/容器内目录:ro 镜像名  ro=readonly
5     2.DockerFile是描述镜像的 镜像构建文件   dockerfile添加数据卷
6         第一步编写:创建dockerfile文件  第二步构建新的镜像:docker build -f dockerfile路径 -t 命名空间 .第三步执行新的实例:run
7
8 容器间传递共享 --volumes-from

 dockerfile文件案例

 1 DockerFile文件
 2 FROM scratch  所有镜像祖先类
 3 MAINTAINER The CentOS Project <cloud-ops@centos.org>
 4 ADD c68-docker.tar.xz /
 5 LABEL name="CentOS Base Image" \  标签说明
 6 vendor="CentOS" \
 7 license="GPLv2" \
 8 build-date="2016-06-02"
 9 # Default command
10 CMD ["/bin/bash"]

dockerfile字指令

 1 FROM 基础镜像
 2 MAINTAINER 作者描述
 3 RUN 运行
 4 EXPOSE 暴露出该镜像实例的端口
 5 WORKDIR 工作目录
 6 ENV 构建环境变量
 7 ADD 拷贝+解压缩
 8 COPY 拷贝
 9 VOLUME 持久化
10 CMD 指定容器启动是要运行的命令  在dockerfile里边可以有多个cmd但是只是最后一个cmd生效 有覆盖的作用
11 ENTRYPOINT 指定容器启动是要运行的命令 参数追加的作用
12 ONBUILD 触发器 父镜像在被子继承后父镜像的onbuild被触发 

dockerfile文件编写

1 FROM centos
2 ENV mypath /tmp
3 WORKDIR $mypath
4 RUN yum -y install vim
5 RUN yum -y install net-tools
6 EXPOSE 80
7 CMD /bin/bash

 docker上安装mysql

1 docker search mysql
2 docker pull mysql:5.7
3 docker images
4 docker run -p 12345:3306 --name mysql
5 -v /zjzjuse/mysql/conf:/etc/mysql/conf.d
6 -v /zjzj/mysql/logs:/logs
7 -v /zjzj/mysql/data:/var/lib/mysql
8 -e MYSQL_ROOT_PASSWORD=123456
9 -d mysql:5.7

docker安装redis

1 docker pull redis:5.1
2 docker images
3 docker run -p 6379:6379 --name redis
4 -v /zjzjuse/myredis/data:data
5 -v /zjzjuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf
6 -d redis:5.1 redis-server /usr/local/etc/redis/redis.conf
7 --appendonly yes
8 在主机上/zjzjuse/myredis/conf/redis.conf文件夹修改 vim /zjzjuse/myredis/conf/redis.conf/redis.conf  本机地址注释掉

本地镜像发布到阿里云

  注册仓库就是了

参照官网操作更多https://docs.docker.com/reference/

  

02-12 18:41