Docker一篇入门

Docker介绍

Docker一篇入门_第1张图片

  1. Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。 主要基于 Go 语言开发 并遵从Apache2.0协议开源。

  2. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

  3. 它采用了虚拟操作系统技术。它是一个守护进程,通过BAST JPA接口对接命令行,使用docker的命令行操作docker容器。

  4. Docker的主要模块有镜像、容器、网络、数据卷。一般的vm虚拟机上是不能再装vm的,但docker可以装docker,它通过镜像封装docker容器,通过数据卷实现原生的内存使用,达到最小的内存消耗。

Docker 的优点

  1. 更高效的利用系统资源
    由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

  2. 更快速的启动时间
    传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

  3. 一致的运行环境
    开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。

  4. 持续交付和部署
    对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
    使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
    而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

  5. 更轻松的迁移
    由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

  6. 更轻松的维护和扩展
    Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

对比传统虚拟机总结

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

Docker 基本概念

Docker 包括三个基本概念

镜像(Image)
容器(Container)
仓库(Repository)

Docker引擎的构成:

Docker一篇入门_第2张图片

Docker作为一个引擎,它的主要构成为server、REST API、CLI三部分。

  1. Docker作为一个客户端服务应用程序(C/S),是一个Paas(平台即服务)的容器化引擎,是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源的守护进程。

  2. Docker提供了REST风格的API,封装了Docker的内部实现,提供了对外的接口。

  3. Docker提供了CLI命令行工具,方便我们更容易的上手。

Docker的核心共分为四部分:image(镜像)、container(容器)、network(网络)、datavolumes(数据卷)。

首先,容器和镜像的关系可以理解为类和对象的关系,我们创建一个类(镜像)只是提供了功能,但并不能直接使用类。所以,想要使用这个类,就要去实例化类,也就是创建对象(容器)。

Docker 面向对象
容器 对象
镜像

其次,Docker的拉取前提是基于网络,而Docker中的一大特色便是它的数据卷。一般的服务我们在需要集群的时候,例如两台Tomcat服务,就需要去修改它的配置文件,但每次去做修改或者下载两个Tomcat是一种很不可取的行为。而我们拉取的Docker镜像在需要这种情况时,则可以通过配置数据卷,先加载数据卷再运行容器达到集群。

参考文章:千峰教育 - Docker   菜鸟教程 - Docker

推荐网站:Docker中文社区

Docker安装

Ubuntu 18.04 安装 Docker-ce

前提条件:Docker 要求 Ubuntu 系统的内核版本高于 3.10

uname -r
  1. 更换国内软件源,推荐中国科技大学的源,稳定速度快(可选)

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/  apt/sources.list
    sudo apt update
    
  2. 安装需要的包

    sudo apt install apt-transport-https ca-certificates    software-properties-common curl
    
  3. 添加 GPG 密钥,并添加 Docker-ce 软件源,中国科技大学和阿里二选一

    curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    

中国科技大学

    sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable"

阿里

   sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  1. 添加成功后更新软件包缓存
    sudo apt update    
    
  2. 安装 Docker-ce
    sudo apt install docker-ce
    
  3. 设置开机自启动并启动 Docker-ce(安装成功后默认已设置并启动,可忽略)
    sudo systemctl enable docker
    sudo systemctl start docker
    
  4. 测试运行(可忽略)
    sudo docker run hello-world
    
  5. 添加当前用户到 docker 用户组,可以不用 sudo 运行 docker(可选)
    sudo groupadd docker
    sudo usermod -aG docker $USER
    

其他Ubuntu安装请参考:菜鸟教程 - Ubuntu Docker 安装

CentOS 6.5+ 安装 Docker-ce

移除旧的版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

使用yum安装Docker

  1. 查看内核版本

    uname -r
    
  2. 安装一些必要的系统工具:

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
  3. 添加软件源信息:

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  4. 更新 yum 缓存:

    sudo yum makecache fast
    
  5. 安装 Docker-ce:

    sudo yum -y install docker-ce
    
  6. 启动 Docker 后台服务

    sudo systemctl start docker
    
  7. 测试运行 hello-world(可忽略)

    docker run hello-world
    

使用脚本安装 Docker

  1. 使用 sudo 或 root 权限登录 Centos。

  2. 确保 yum 包更新到最新。

    sudo yum update
    
  3. 执行 Docker 安装脚本。

    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    

    执行这个脚本会添加 docker.repo 源并安装 Docker。

  4. 启动 Docker 进程。

    sudo systemctl start docker
    
  5. 验证 docker 是否安装成功并在容器中执行一个测试的镜像。(可忽略)

    sudo docker run hello-world
    docker ps
    

其他ContOS安装请参考:菜鸟教程 - CentOS Docker 安装

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,例如网易的镜像地址:http://hub-mirror.c.163.com。

新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。

请在该配置文件中加入(没有该文件的话,请先建一个):

二选一,也可以百度自己找更快的。

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

{
  "registry-mirrors": ["http://registry.docker-cn.com"]
}

Docker设置开机启动

systemctl enable docker

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

将指定用户添加到用户组

usermod -aG docker 你的用户名

删除 Docker CE

sudo yum remove docker-ce
sudo rm -rf /var/lib/docker

Docker常用命令

  1. 查看镜像版本

    docker search 镜像名称(如oracle)
    
  2. 拉取镜像

    docker pull 镜像名称(如oracle):版本号
    
  3. 运行容器

    docker run --name 别名 -d -p 映射端口:容器端口 容器名称
    
  4. 停止容器

    sudo docker stop 容器名/容器ID
    
  5. 查看容器列表

    sudo docker images
    
  6. 查看运行容器列表

    sudo docker ps
    sudo docker ps -a
    
  7. 启动容器和重启容器

    sudo docker start 容器ID
    sudo docker restart 容器ID
    
  8. 进入一个已经在运行的容器

    sudo docker exec -it 容器ID /bin/bash
    
  9. 设置容器开机启动

    sudo docker update --restart=always 容器ID 
    
  10. 删除运行容器和拉取容器

    docker rm 容器ID  
    docker rmi -f  容器ID
    
  11. 导入容器

    cat 文件(如centos.tar) | docker import - 镜像名(如my/centos:v1)
    

    镜像保存/载入:docker load/docker save

    容器导入/导出:docker import/docker export

DockerCompose

DockerCompose运行基于yml脚本文件,需要在docker-compose.yml(没有自己创建一个)所在目录使用DockerCompose命令

什么是 Docker Compose

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。

Docker Compose 与 Docker Stack 非常类似。它能够在 Docker 节点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理。

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

Compose和Docker兼容性

compose文件格式版本 docker版本
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+

安装docker-compose

  1. 从github上下载docker-compose二进制文件安装,下载最新版的docker-compose文件

    sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
  2. 添加可执行权限

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 查看版本,测试安装是否成功

    docker-compose version
    
  4. pip安装

    sudo pip install docker-compose
    

    或者

    yum -y install epel-release
    yum -y install python-pip
    
  5. 确认pip版本

    pip --version
    
  6. 更新pip

    pip install --upgrade pip
    

卸载DockerCompose

sudo rm /usr/local/bin/docker-compose
sudo pip uninstall docker-compose

DockerCompose常用命令

  1. 启动

    docker-compose up
    
  2. 关闭

    docker-compose down
    
  3. 查看运行列表

    docker-compose ps
    
  4. 停止/运行/容器

    docker-compose stop
    docker-compose start
    docker-compose restart
    
  5. 日志

    docker-compose logs
    
  6. 拉取容器

    docker-compose pull
    
  7. 移除容器

    docker-compose rm
    

DockerCompose模板文件

   version: "3"

   services:
     webapp:
       image: examples/web
       ports:
         - "80:80"
       volumes:
         - "/data"

参考文章:千锋教育 - Docker 三剑客 Compose

常用命令推荐文章:Docker快速入门——Docker-Compose

DockerCompose - GitLab 安装(项目私服)

  1. 准备工作

    1. 克隆Docker-compose新虚拟机或准备新服务器(确保内存在2G以上,最好3G)
    2. 寻找gitlab版本:docker search gitlab-ce-zh
    3. 下载镜像:docker pull twang2218/gitlab-ce-zh
    4. 创建gitlab目录:cd /usr/local/ mkdir docker cd docker mkdir gitlab cd gitlab
    5. 创建docker-compose.yml配置文件:vi docker-compose.yml
  2. 配置文件

    version: '3'
    services:
      gitlab-ce-zh:
        image: 'twang2218/gitlab-ce-zh'
        restart: always
        hostname: '192.168.1.133'
        environment:
          TZ: 'Asia/Shanghai'
          GITLAB_OMNIBUS_CONFIG: |
            external_url 'http://192.168.1.133:8080'
            gitlab_rails['time_zone'] = 'Asia/Shanghai'
            gitlab_rails['gitlab_shell_ssh_port'] = 22
            unicorn['port'] = 8888
            nginx['listen_port'] = 8080
        ports:
          - '8080:8080'
          - '8443:443'
          - '2222:22'
        volumes:
          - /usr/local/docker/gitlab/config:/etc/gitlab
          - /usr/local/docker/gitlab/data:/var/opt/gitlab
          - /usr/local/docker/gitlab/logs:/var/log/gitlab
    
  3. 启动gitlab

    docker-compose up -d
    
  4. SSH免密登录

    CMD运行生成秘钥:ssh-keygen -t rsa -C 邮箱
    

    生成公钥配置到gitlab上,使用SSH方式拉去项目即可

DockerCompose - Nexus 安装(依赖私服)

  1. 准备工作

    1. 克隆Docker-compose新虚拟机或准备新服务器(确保内存在2G以上)
    2. 寻找gitlab版本:docker search nexus3
    3. 下载镜像:docker pull sonatype/nexus3
    4. 创建gitlab目录:cd /usr/local/ mkdir docker cd docker mkdir nexus3 cd nexus3
    5. 创建docker-compose.yml配置文件:vi docker-compose.yml
  2. 配置文件

    version: '3.1'
    services:
      nexus3:
        image: 'shifudao/nexus3'
        restart: always
        container_name: 'nexus3'
        ports:
          - '8081:8081'
        volumes:
          - /usr/local/docker/nexus3/data:/nexus-data
    
  3. 启动gitlab

    docker-compose up -d
    

DockerCompose - Registry 安装(Docker私服)

  1. 准备工作

    1. 克隆Docker-compose新虚拟机或准备新服务器(确保内存在2G以上)
    2. 寻找gitlab版本:docker search registry
    3. 下载镜像:docker pull registry
    4. 创建gitlab目录:cd /usr/local/ mkdir docker cd docker mkdir registry cd registry
    5. 创建docker-compose.yml配置文件:vi docker-compose.yml
  2. 配置文件

    version: '3.1'
    services:
      nexus3:
        image: 'registry'
        restart: always
        container_name: 'registry'
        ports:
          - '5000:5000'
        volumes:
          - /usr/local/docker/registry/data:/var/lib/registry
    
      frontend:
        image: konradkleine/docker-registry-frontend:v2
        ports:
          - 8080:80
        volumes:
          - ./certs/frontend.crt:/etc/apache2/server.crt:ro
          - ./certs/frontend.key:/etc/apache2/server.key:ro
        environment:
          - ENV_DOCKER_REGISTRY_HOST=192.168.1.3
          - ENV_DOCKER_REGISTRY_PORT=5000 
    
  3. 启动gitlab

    docker-compose up -d
    
  4. 配置私服通知(Deploy客户端配置)

    添加到加速器路径 etc/docker/daemon.json中
    “insecure-registries”:[“ip:5000”]

  5. Registry查看地址

    Ip:端口/v2/
    Ip:端口/v2/_catalog
    Ip:端口/v2/镜像/tags/list

  6. 配置拉取地址(Deploy客户端配置)

    拉去镜像:docker pull tomcat
    配置地址:docker tag tomcat ip:5000/tomcat
    上传镜像:docker push ip:5000/tomcat

DockerCompose - Jenkins安装

version: '3'
services:
  docker_jenkins:
    restart: always
    image: jenkins/jenkins:lts
    container_name: docker_jenkins
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - ./data/:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7

其他推荐Docker教程:C语言中文网 - Docker

以上便是所有的Docker总结了,如果有不对的地方或者需要补充的地方欢迎大家留言。

你可能感兴趣的:(运维,Docker,DockerCompose,容器引擎)