Docker入门

Docker 简介

Docker有两个版本:

社区版(CE)

企业版(EE)

Docker Community Edition(CE)非常适合希望开始使用Docker并尝试使用基于容器的应用程序的个人开发人员和小型团队。

Docker企业版(EE)专为企业开发和IT团队而设计,他们可以在生产中大规模构建,发布和运行业务关键型应用程序

功能 社区版 企业版基础版 企业版标准 企业版高级版
容器引擎和内置编排,网络,安全性
经过认证的基础设施,插件和ISV容器
图像管理
容器应用管理
图像安全扫描

关于容器技术的介绍及概念

  • 容器技术

    Linux容器技术很早就有了,比较有名的是被集成到主流Linux内核中的LXC项目。容器通过对操作系统的资源访问进行限制,构建成独立的资源池,让应用运行在一个相对隔离的空间里,同时容器间也可以进行通信。容器技术对比虚拟化技术,容器比虚拟化更轻量级,对资源的消耗小很多。容器操作也更快捷,启动和停止都要比虚拟机快。但Docker容器需要与主机共享操作系统内核,不能像虚拟机那样运行独立的内核。

    Docker是一个基于LXC技术构建的容器引擎,基于GO语言开发,遵循Apache2.0协议开源。Docker的发展得益于为使用者提供了更好的容器操作接口。包括一系列的容器,镜像,网络等管理工具,可以让用户简单的创建和使用容器。

    Docker支持将应用打包进一个可以移植的容器中,重新定义了应用开发,测试,部署上线的过程,核心理念就是 Build once, Run anywhere。Docker容器技术的典型应用场景是开发运维上提供持续集成和持续部署的服务。
  • 镜像

    Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。用户可以通过编写Dockerfile创建新的镜像,也可以直接从类似github的Docker Hub上下载镜像使用。
  • 容器

    Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,但隔离的效果比不上虚拟机。容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。

    在Docker容器中,每个容器之间的隔离使用Linux的 CGroups 和 Namespaces技术实现的。其中 CGroups 对CPU,内存,磁盘等资源的访问限制,Namespaces 提供了环境的隔离。
  • 仓库

    如果你使用过 git 和 github 就很容易理解Docker的仓库概念。Docker仓库相当于一个 github 上的代码库。

    Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Registry)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。Docker运行中使用的默认仓库是 Docker Hub 公共仓库。仓库支持的操作类似 git,创建了新的镜像后,我们可以 push 提交到仓库,也可以从指定仓库 pull 拉取镜像到本地。

Docker有下面这些组成

1.Docker 服务器守护程序(server daemon),用于管理所有的容器。

2.Docker 命令行客户端,用于控制服务器守护程序。

3.Docker 镜像:查找和浏览 docker 容器镜像。

Docker特性

文件系统隔离:每个进程容器运行在完全独立的根文件系统里。

资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。

网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。

写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。

日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。

变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。

交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

Docker两个基础概念images与container

Container和Image 在Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图:

Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS 会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多 个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。

那Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用docker commit 命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于git commit命令。

前置准备和安装Docker(基于CentOS 7 安装 Docker CE)

Docker 要求 CentOS 系统的内核版本高于 3.10 ,安装前需要验证 CentOS 版本是否支持 Docker。

命令查看你当前的内核版本

  • $ uname -r

更新yum

  • $ sudo yum makecache fast

安装yum-utils

  • $ sudo yum install yum-utils

使用以下命令设置稳定存储库

  • $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

卸载旧版本(如果安装过旧版本的话)

  • $ sudo yum remove docker docker-common docker-selinux docker-engine

安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

  • $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安装Docker

  • sudo yum install docker-ce

启动、停止、重启Docker服务

  • $systemctl start | stop | restart docker.service

设置开机启动、关闭服务

  • $ systemctl enable | disable docker.service

验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

  • $ docker version

[root@localhost ~]# docker version
Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:09:15 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm Server:
Engine:
Version: 18.03.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:13:03 2018
OS/Arch: linux/amd64
Experimental: false
[root@localhost ~]#

docker通过运行hello-world 映像验证是否已正确安装。

  • $ sudo docker run hello-world

Docker的常用操作

获取镜像

搜索镜像(我这里搜索的是tomcat的镜像)

  • $ docker search tomcat

下载镜像(在搜索出来的镜像列表中选择一个下载,我这里下载的是官方提供的centos镜像,速度会有点慢,耐心等待)

  • $ docker pull tomcat

列出本机的镜像

  • $ docker images

基于image创建一个容器,运行完毕后并退出

  • $ docker run [centos] /bin/echo 'Hello world'

运行一个交互式容器,-t表示指定一个容器内的伪tty。-i表示创建一个交互式连接,命令运行后,将会进入shell交互式界面,可执行任意的命令.

  • $ docker run -t -i centos /bin/bash

创建一个带名字的容器

  • $ docker run -d --name myweb centos /bin/bash

开始/停止/强制停止/重启一个的容器

  • $ docker start/stop/kill/restart [container]

删除一个容器

  • $ docker rm [container]

进入容器内容

  • docker exec -it [container] /bin/bash

如果指定-a参数,则列出所有状态下的容器,包含处于stop状态的容器。如果没有带-a参数,则只显示出处于运行状态的容器。-l参数表示只列出最后一个启动的容器。

  • $ docker ps [-a] [-l]

docker容器的常用软件安装过程

安装mysql

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=[password] -v /xxx/mysql:/var/lib/mysql -v /etc/my.cnf:/etc/my.cnf mysql:5.7.23 

create user 'user'@'%' identified by 'password';

grant replication slave on *.* to 'user'@'%';

flush privileges;

安装redis

docker run -d --name redis -p 6379:6379 -v /xxx/data/redis:/data redis redis-server --appendonly yes --requirepass "[password]"

docker run \
-p 6379:6379 \ # 端口映射 宿主机:容器
-v /xxx/data:/data:rw \ # 映射数据目录 rw 为读写
-v /xxx/conf/redis.conf:/etc/redis/redis.conf:ro \ # 挂载配置文件 ro 为readonly
--privileged=true \ # 给与一些权限
--name redis \ # 给容器起个名字
--appendonly yes \ # 开启数据持久化
-d redis redis-server /xxx/conf/redis.conf # deamon 运行 服务使用指定的配置文件

安装nexus

docker run -d -p 8080:8080 --name nexus -v /xxx/nexus:/var/nexus-data --restart=always sonatype/nexus3

安装Jenkins

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true  -v /xxx/jenkins:/var/jenkins_home jenkins

Docker初次使用与安装过程的更多相关文章

  1. Docker入门之 - 如何安装Docker CE

    原文:Docker入门之 - 如何安装Docker CE 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012055638/article/det ...

  2. 利用docker在window7下安装TensorFlow

    安装过程下碰了不少坑,记录一下安装过程,方便以后有需要时复用. 1.安装docker 下载最新版本的docker并且默认安装即可,安装后打开Docker Quickstart Terminal,初次进 ...

  3. Hadoop 在windows 上伪分布式的安装过程

    第一部分:Hadoop 在windows 上伪分布式的安装过程 安装JDK 1.下载JDK        http://www.oracle.com/technetwork/java/javaee/d ...

  4. [Docker]初次接触

    Docker 初次接触 近期看了不少docker介绍性文章,也听了不少公开课,于是今天去官网逛了逛,发现了一个交互式的小教程于是决定跟着学习下. 仅仅是把认为重点的知识记录下来,不是非常系统的学习和笔 ...

  5. CentOS6.5+php5.3听云安装过程

    听云安装过程请参考听云安装指导页面:http://doc.tingyun.com/help/html/doc/server_novice.html 根据自己的服务器系统和语言包下载对应的 安装包 安装 ...

  6. Docker教程:docker的概念及安装

    http://blog.csdn.net/pipisorry/article/details/50754385 Why docker 对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规 ...

  7. docker(一) Centos7下安装docker

    docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...

  8. Docker学习系列之一——安装篇

    一.目的 Docker是目前非常流行的虚拟技术,在云计算领域得到了广泛的应用.国内的阿里.京东等大厂都非常普遍地应用了Docker.本文记录了Docker的基本安装过程及最终运行结果,以期备忘,及和同 ...

  9. centos7 mysql-server 安装过程

    官网下载安装mysql-server # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -i ...

随机推荐

  1. FastReport使用方法(C/S版)

    前言 这两天群里一直有群友问一些关于FastReport的问题,结合他们的问题,在这里做一个整理,有不明白的可以加 FastReport 交流群 群   号:554714044 工具 VS2017 + ...

  2. MVC 5使用ViewData(模型)显示数据

    看过此篇<MVC 5使用ViewData(对象)显示数据>http://www.cnblogs.com/insus/p/3377178.html 都明白在控制器使用ViewData(obj ...

  3. ionic 2.x 3.x 打包 压缩

    大家都知道Ionic项目ionic serve生成的js css 非常庞大,小有1m多,大有几m,文件如此大load页面的时候需要较长时间的加载,特别在生产环境中,灰常不利于用户体验. 因此我们需要进 ...

  4. OSLab多进程

    日期:2019/3/23 内容:Linux下与多进程相关的函数.     进程基本知识 定义 应用程序关于某数据集合上的一次运行活动. 特点 ·操作系统进行资源分配和调度的基本单位 ·进程是程序的一次 ...

  5. IOS渗透测试第一步-基础知识统一放送

    原文: http://www.websecgeeks.com/2017/04/ios-application-pentesting-part-3.html http://www.websecgeeks ...

  6. SpringBoot从入门到逆天(1)

    1.SpringBoot是什么? <1>为Sping开发提供一个更 快捷更广泛的入门体验. <2>开箱即用,不合适时特可以快速抛弃. <3>提供一系列大型项目常用的 ...

  7. MATLAB入门(一)数组

     特殊变量: 数组的创建: %% 数组的生成(带:不在命令行显示结果) x= rand() ; %随机生成3*3的矩阵,矩阵数的值在[,] x(:,::); %取所有行,(从第1列开始:步长为2:到第 ...

  8. vue教程2-07 微博评论功能

    vue教程2-07 微博评论功能 <!doctype html> <html> <head> <meta charset="utf-8"& ...

  9. odoo开发笔记-- 按钮动作跳转到其他列表视图默认搜索

    按钮动作跳转到其他列表视图 按照默认指定的条件搜索显示. 效果: 实现方式:

  10. Python中Gradient Boosting Machine(GBM)调参方法详解

    原文地址:Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python by Aarshay Jain 原文翻译与校对 ...