zoukankan      html  css  js  c++  java
  • Docker

    虚拟机

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

    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/

      

  • 相关阅读:
    动态规划(DP计数):HDU 5117 Fluorescent
    动态规划(DP计数):HDU 5116 Everlasting L
    动态规划(区间DP):HDU 5115 Dire Wolf
    数学(扩展欧几里得算法):HDU 5114 Collision
    二叉树面试题
    linux eval命令
    关于Shell中命令替换$(...)与后置引用`...`的不同
    linux set,env和export
    linux crontab 命令
    排序
  • 原文地址:https://www.cnblogs.com/Alexephor/p/11996638.html
Copyright © 2011-2022 走看看