image.png
    容器是应用程序层的抽象,将代码和依赖项打包在一起。多个容器可以在同一台计算机上运行,并与其他容器共享OS内核,每个容器在用户空间中作为隔离的进程运行。容器占用的空间少于VM,可以处理更多的应用程序,并且需要的VM和操作系统更少。
    image.png

    docker的基本概念:
    Docker系统有两个程序:docker服务端和docker客户端
    Docker服务端:
    是一个服务进程,管理着所有的容器。
    Docker客户端:
    是docker服务端的远程控制器,可以用来控制docker的服务端进程。

    docker的优势:
    交付物标准化
    Docker是软件工程领域的”标准化”交付组件,最恰到好处的类比是”集装箱”。
    集装箱将零散、不易搬运的大量物品封装成一个整体,集装箱更重要的意义在于它提供了一种通用的封装货物的标准,卡车、火车、货轮、桥吊等运输或搬运工具采用此标准,隧道、桥梁等也采用此标准。以集装箱为中心的标准化设计大大提高了物流体系的运行效率。
    传统的软件交付物包括:应用程序、依赖软件安装包、配置说明文档、安装文档、上线文档等非标准化组件。
    Docker的标准化交付物称为”镜像”,它包含了应用程序及其所依赖的运行环境,大大简化了应用交付的模式。
    一次构建,多次交付
    类似于集装箱的”一次装箱,多次运输”,Docker镜像可以做到”一次构建,多次交付”。当涉及到应用程序多副本部署或者应用程序迁移时,更能体现Docker的价值。
    应用隔离
    集装箱可以有效做到货物之间的隔离,使化学物品和食品可以堆砌在一起运输。Docker可以隔离不同应用程序之间的相互影响,但是比虚拟机开销更小。
    总之,容器技术部署速度快,开发、测试更敏捷;提高系统利用率,降低资源成本。
    namespace
    cgroups
    rootfs

    docker的三大组件:
    Docker 镜像 - Docker images
    Docker 仓库 - Docker registeries
    Docker 容器 - Docker containers

    docker安装部署:
    1.删除已安装的docker(可选项,如果系统中已经存在docker我们就删除)

    1. yum remove docker \
    2. docker-client \
    3. docker-client-latest \
    4. docker-common \
    5. docker-latest \
    6. docker-latest-logrotate \
    7. docker-logrotate \
    8. docker-selinux \
    9. docker-engine-selinux \
    10. docker-engine

    2.部署docker的yum仓库

    yum install -y yum-utils device-mapper-persistent-data lvm2 git  (部署docker安装的环境)
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    3.下载安装docker

    yum -y install docker-ce (默认下载最新版本docker)
    或指定版本下载  yum -y install docker-ce-19.03.0.ce
    
    4.启动docker
    systemctl start docker
    systemctl enable docker (开机启动)
    5.docker -v (查看docker版本)
    docker info (查看docker运行状态)
    6.镜像仓库
    官方镜像站:www.docker.com
    国内镜像站:www.daocloud.io
    7.登入登出docker hub
    docker login (官方仓库)
    docker login daocloud.io (daocloud仓库)
    docker logout 
    8.docker基本使用命令
    docker images (查看本地有效镜像)
    docker search centos (查看centos所有的镜像)
    docker pull (下载镜像)
    docker image inspect 镜像id (查看镜像详细信息)
    docker rmi REPOSITORY+版本号 (删除镜像,如果不加版本号默认删除latest)
    docker rmi `docker ps -a -q`(删除所有容器)
    docker rm 容器id (删除容器)
    docker run -itd --name feifei -p 8080:8080 tomcat:8.0.45 (运行容器命名为feifei放在后台运行
    docker run -itd -p 81:80 -v /web:/usr/share/nginx/html nginx:latest (将宿主机的81端口映射到容器的80端口,宿主机/web目录映射到容器的/usr/share/nginx/html)
    docker run -itd nginx:latest /bin/bash (容器内使用/bin/bash命令)
    docker run 参数:
    • -v:文件映射,格式为:主机目录:容器目录
    • -d: 后台运行容器,并返回容器ID;
    • -i: 以交互模式运行容器,通常与 -t 同时使用;
    • -p: 端口映射,格式为:主机(宿主)端口:容器端口
    • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    • --name="nginx-lb": 为容器指定一个名称;
    • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
    • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
    • -h "mars": 指定容器的hostname;
    • -e username="ritchie": 设置环境变量;
    • --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定CPU运行;
    --privileged 以特权模式运行
    
    docker ps (查看运行状态的容器)
    docker ps -a (查看所有容器)
    docker ps -a -q (查看所有容器的id)
    docker ps -l (查看最后一次启动的容器)
    docker inspect feifei (查看容器feifei的详细信息)
    docker stop feifei(关闭容器feifei)
    docker start feifei(启动容器feifei)
    
    docker exec -it feifei /bin/bash ,docker exec -it feifei /bin/sh(连接容器操作)
    exit或ctrl+q+p退出但不关闭