Docker入门

目录

一、Docker 简介

Docker的应用场景

Docker 的优点

Docker的架构

Docker 和虚拟机的区别

① 关于Docker是什么?

② 作用&优点 

③ 对比传承虚拟机

 ④ 三个核心概念

二、CentOs7 安装 Docker及环境配置 

三、Docker阿里云镜像仓库配置 

① docker ps 是正在运行的容器

② docker ps -a 不管是正在运行的还是没有在运行都容器都显示出来

1、登录进入阿里云镜像服务中心,获取镜像地址

2、在/etc/docker目录下找到在daemon.json文件(没有就新建),将下面内容写入

 3、重启Daemon

4、重启docker服务 

 5、测试

 四、Docker常用命令

1、Docker基本命令 

① 启动 Docker

② 停止 Docker

③ 重启 Docker

④ 开机启动 Docker

⑤ 查看Docker概要信息

⑥ 查看 Docker 帮助文档

⑦ 查看 Docker版本信息 

2、Docker 镜像常用命令 

① docker images 查看本机所有镜像 

②、docker search 搜索镜像 

③、docker pull 下载镜像  

 ④、docker rmi 删除镜像

⑤、docker rmi -f 不管是使用还是停用状态都可以删除 

 3、Docker 容器常用命令

①、Docker创建并启动容器

② Docker 列出容器

③ Docker 退出容器 

④ Docker 进入容器

⑤ Docker 启动容器

 ⑥ Docker 重启容器

⑦ Docker 停止容器 

⑧ Docker 删除容器

⑨ Docker 容器日志 


一、Docker 简介

新一代虚拟化技术,容器技术。        

下面的是官方的简介。 

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

Docker官网:Docker: Accelerated, Containerized Application DevelopmentDocker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code.https://www.docker.com/

Docker的应用场景

Web 应用的自动化打包和发布。

自动化测试和持续集成、发布。

在服务型环境中部署和调整数据库或其他的后台应用。

从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 的优点

1、简化程序:

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

2、避免选择恐惧症:

如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

3、节省开支:

一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker的架构

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

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker

面向对象

容器

对象

镜像

Docker 镜像(Images)

是用于创Docker 镜像建 Docker 容器的模板。

Docker 容器(Container)

容器是独立运行的一个或一组应用。

Docker 客户端(Client)

Docker 客户端通过命令行或者其他工具使用 Docker API (Develop with Docker Engine API | Docker Documentation) 与 Docker 的守护进程通信。

Docker 主机(Host)

一个者物理或虚拟的机器用于执行 Docker 守护进程和容器。

Docker 仓库(Registry)

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

Docker Machine

Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

Docker 和虚拟机的区别

Docker是一种轻量级的虚拟化技术,比传统的虚拟机性能更好。

下图是虚拟机的体系结构:

server - 表示真实电脑。

Host OS - 真实电脑的操作系统,例如:Windows,Linux

Hypervisor - 虚拟机平台,模拟硬件,如VMWare,VirtualBox

Guest OS - 虚拟机平台上安装的操作系统,例如CentOS Linux

App - 虚拟机操作系统上的应用,例如nginx

下图是Docker的体系结构:

server - 表示真实电脑。

Host OS - 真实电脑的操作系统,例如:Windows,Linux

Docker Engine - 新一代虚拟化技术,不需要包含单独的操作系统。

App - 所有的应用程序现在都作为Docker容器运行。

这种体系结构的明显优势是,不需要为虚拟机操作系统提供硬件模拟。所有应用程序都作为Docker容器工作,性能更好。


下面是我的理解.

① 关于Docker是什么?

Docker是一个由Go语言编写的程序运行的容器(一个容器就相当于一个虚拟机),它是完整的一套容器管理系统

② 作用&优点 

 Docker的主要用途目前主要有三大类:

1、提供一次性的环境。比如:本地测试他人的软件、持续集成的时候提供单元测试和构建的环境

2、提供弹性的云服务。因为Docker容器可以随开随关,很适合动态扩容和缩容

3、组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就能模拟出微服务架构

使用Docker能使应用部署更方便,服务器同等配置下性能更优效果更高...

③ 对比传承虚拟机

传统的虚拟机既可以通过硬件模拟来实现,也可以通过操作系统软件来实现,而容器技术则更为优雅,它充分利用了操作系统本身已有的机制和特性,可以实现远程传统虚拟机的轻量级虚拟机。

 ④ 三个核心概念

1.镜像:其实就是一个文件,根镜像就是一个操作系统的镜像文件,比如:centos Ubuntu

2.容器:容器是基于镜像存在的,可以把容器看作是一个简易版的linux环境

3.仓库:Docker仓库类似于代码仓库,是Docker集中存放镜像文件的场所

二、CentOs7 安装 Docker及环境配置 

#查看内核
uname -r
#更新yum源为最新
yum update -y

#如果说本地存在老版本的Docker引擎,那么需要删除

 yum remove docker  docker-common docker-selinux docker-engin
#安装Docker所需要的工具包
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#下载安装Docker
yum install docker-ce docker-ce-cli containerd.io -y -y
#启动Docker并且设置开机自启动
systemctl start docker
systemctl enable docker
#检测Docker是否安装成功
docker version

Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。

社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。

社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。

我们平时用社区版就足够了。所以我们安装社区版;

我们主要参考:Install Docker Engine on CentOS | Docker Documentation  来安装;

注意:我们必须要以root用户去操作系统。

我们练习Docker的时候,防止印象其他的一些东西 

我就没有重新新建一个虚拟机了。 

利用我们的客户端连接工具连接我们的虚拟机。

我们切换到root用户

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

yum update -y

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

 yum remove docker  docker-common docker-selinux docker-engine

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

安装Docker所需要的工具包

yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

一个是原有的yum的地址,二个是阿里云的镜像地址,两个都要运行

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

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6、安装最新版本的Docker

 yum install docker-ce docker-ce-cli containerd.io -y -y

如果出现下面问题

遇到这种情况有两种做法:

1、没网,试着:ping www.baidu.com

如果显示没有连接的话,就说明没网,也就无法使用yum 命令。

2、ping通了的话,还是是用不了yum命令,说明是yum镜像没有了,那么就得下载一个来更新。

在安装完CentOS后一般需要修改yum源,才能够在安装更新rpm包时获得比较理想的速度。国内比较快的有163源、sohu源。这里以163源为例子。

A、 cd /etc/yum.repos.d

B、 mv CentOS-Base.repo CentOS-Base.repo.backup

C、wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

D、mv CentOS6-Base-163.repo CentOS-Base.repo

E、yum clean all

最后在使用yum 就可以了。

7、启动Docker并设置开机启动

systemctl start docker

systemctl enable docker

8、验证Docker 是否安装成功

docker version

三、Docker阿里云镜像仓库配置 

运行  docker run hello-world

本地仓库未能找到该镜像,然后去远程仓库寻找以及下载该镜像;

 我们具体来分析下执行原理和过程: 

从左到右 client客户端,Docker运行主机,远程仓库;

docker build ,pull,run分别是 构建,拉取,运行命令,后面再细讲;

中间Docker主机里有 Docker daemon主运行线程,以及Containers容器,容器里可以运行很多实例,(实例是从右侧Images镜像实例化出来的)Images是存储再本地的镜像文件,比如 Redis,Tomat这些镜像文件;

右侧是Registry镜像仓库,默认远程镜像仓库 Docker Hub  不过是国外主机,下载很慢,不稳定,所以我们后面要配置成阿里云仓库镜像地址,稳定快捷;

运行  docker run hello-world

1.下载一个hello-world的镜像

2.根据镜像实例化一个Docker容器

① docker ps 是正在运行的容器

② docker ps -a 不管是正在运行的还是没有在运行都容器都显示出来

3.执行容器中功能,即打印语句

执行 docker run hello-world 的过程看如下图例

 当我们在去执行的时候docker run hello-world的时候就非常快了

这里我们对比一下第一次跟第二次的区别:

我们这个Docker的大小是不大的13.3KB都要下这么久的,我们安装一个mysql都要500兆,这么慢,很不友好,我们先演示一下这个还是没有换源的,只是单纯的从国外的网站把这个mysql的镜像给下载下来,演示一下这个过程要耗时多长时间,然后我们会发现这个时间会比较漫长。

在下这个过程中,耗的流量是1G

这里我就终止下载了,下了5分钟还才下这么点。 

Docker默认远程仓库是Docker Hub

比如我们下载一个大点的东西,龟速

由于是国外主机,类似Maven仓库,慢得一腿,经常延迟,破损;

所以我们一般都是配置国内镜像,比如阿里云,网易云等;推荐阿里云,稳定点;

配置步骤如下:

1、登录进入阿里云镜像服务中心,获取镜像地址

进入阿里云容器镜像服务地址:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

2、在/etc/docker目录下找到在daemon.json文件(没有就新建),将下面内容写入

vi  是编辑,当我们编辑这个文件不存在的时候,它就会自动给我们创建一个 

cd /etc/docker/
vi daemon.json

 3、重启Daemon

systemctl daemon-reload

4、重启docker服务 

systemctl restart docker

 5、测试

下载mysql

docker pull mysql

 四、Docker常用命令

1、Docker基本命令 

 启动Docker
systemctl start docker
停止Docker
systemctl stop docker
重启Docker
systemctl restart docker
开机启动Docker
systemctl enable docker
查看Docker概要信息
docker info
查看Docker帮助文档
docker --help
查看Docker版本信息
docker version

① 启动 Docker

systemctl start docker

② 停止 Docker

systemctl stop docker

③ 重启 Docker

systemctl restart docker

④ 开机启动 Docker

systemctl enable docker

⑤ 查看Docker概要信息

docker info

⑥ 查看 Docker 帮助文档

docker --help

⑦ 查看 Docker版本信息 

docker version

2、Docker 镜像常用命令 

#查看 

#查看本机镜像

docker images …

#从远程镜像仓库中搜索镜像
docker search …
#新增

#增加
docker pull …

#推送

docker push …
#删除
docker rmi …
docker rmi -f …

① docker images 查看本机所有镜像 

docker images

列出本机所有镜像

REPOSITORY

镜像的仓库源

TAG

镜像的标签(版本)同一个仓库有多个TAG的镜像,多个版本;我们用REPOSITORY:TAG来定义不同的镜像;

IMAGE ID

镜像ID,镜像的唯一标识

CREATE

镜像创建时间

SIZE

镜像大小

OPTIONS 

可选参数:

-a

显示所有镜像(包括中间层)

-q

只显示镜像ID

-qa

可以组合

--digests

显示镜像的摘要信息

--no-trunc

显示完整的镜像信息 

②、docker search 搜索镜像 

查看阿里云镜像中有哪些镜像

就看的是你配置的镜像仓库中的所有跟redis相关的镜像它都跟我们查看出来了

docker search redis

和 https://hub.docker.com/ 这里的搜索效果一样;

OPTIONS可选参数:

--no-trunc

显示完整的镜像描述

-s

列出收藏数不小于指定值的镜像

--automated

只列出Docker Hub自动构建类型的镜像

③、docker pull 下载镜像  

docker pull 镜像名称:[TAG]

  

注意:不加TAG,默认下载最新版本latest

 ④、docker rmi 删除镜像

⑤、docker rmi -f 不管是使用还是停用状态都可以删除 

测试一下有没有删除干净。

1,删除单个:docker rmi 镜像名称:[TAG]

如果不写TAG,默认删除最新版本latest

有镜像生成的容器再运行时候,会报错,删除失败; 

 我们需要加 -f 强制删除

2,删除多个:docker rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]

中间空格隔开

3,删除全部:docker rmi -f $(docker images -qa)

 3、Docker 容器常用命令

#新增
docker run

#利用守护进程的方式运行容器
docker run -di

#运行容器的同时进入容器内部
docker run -it

#取名字

#给运行的容器自定义名称
docker run --name ... 取的名字接上镜像名字
#查看
docker ps
docker ps -a
#删除
docker rm
docker rm -f
#进入容器
docker exec -it tomcat1 /bin/bash

#退出

exit;

Ctrl+p+q

#停止容器

docker stop

#启动容器

docker start

#重启

#dockerrestart

①、Docker创建并启动容器

docker run tomcat:8

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

--name="容器新名字":为容器指定一个名称;

-i:以交互模式运行容器,通常与-t或者-d同时使用;

-t:为容器重新分配一个伪输入终端,通常与-i同时使用;

-d: 后台运行容器,并返回容器ID;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

 启动普通容器: docker run --name 别名 镜像ID  

 启动交互式容器:  docker run -it --name 别名 镜像ID   来运行一个容器,取别名,交互模式运行,以及分配一个伪终端,并且进入伪终端;

实例:

docker run -it --name mycentos03 67fa590cfc1c

注意: 

  1. 启动普通容器的方式基本不用,没有伪终端,没有太大价值;
  2. 启动交互式容器的方式,容器一创建完毕,立即进入伪终端

 

守护式方式创建并启动容器

 docker run -di --name 别名 镜像ID 

实例:

 docker run -di --name mycentos02 67fa590cfc1c

 执行完命令后,终端依然再宿主机上;

 

启动容器,并执行/bin/bash命令;

 docker run -it --name 别名 镜像ID  /bin/bash命令

端口映射;

docker run -it -p 8888:8080 tomcat

docker run -it -P tomcat

② Docker 列出容器

docker ps[OPTIONS]

OPTIONS说明:

-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

--format :指定返回值的模板文件。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

--no-trunc :不截断输出。

-q :静默模式,只显示容器编号。

-s :显示总的文件大小。

docker ps 查看正在运行的容器

docker ps -a 查看所有容器

docker ps -n 2  显示最近创建的2个容器

docker ps -f status=exited 查看停止的容器

③ Docker 退出容器 

exit 容器停止退出

ctrl+P+Q 容器不停止退出

④ Docker 进入容器

a、docker attach 容器ID or 容器名 

实例:

docker attach ce6343ee288f

不能进入停止的状态的容器

You cannot attach to a stopped container, start it first

b、Docker进入容器执行命令

docker exec -it 容器名称 或者 容器ID 执行命令

实例:

 docker exec -it tomcat02 ls -l /root/webapp02

直接操作容器,执行完 回到 宿主主机终端;

 我们一般用于 启动容器里的应用 比如 tomcat nginx redis elasticsearch等等

⑤ Docker 启动容器

docker start 容器ID or 容器名

实例:

 docker start mycentos00

 ⑥ Docker 重启容器

docker restart 容器ID or 容器名

实例:

 docker restart f9cadea1a5e7

⑦ Docker 停止容器 

docker stop 容器ID or 容器名

实例:

 docker stop 865b755cd0b2

暴力删除,直接杀掉进程 (不推荐)

docker kill 容器ID or 容器名

⑧ Docker 删除容器

 docker rm 容器ID

如果删除正在运行的容器,会报错,我们假如需要删除的话,需要强制删除;

强制删除docker rm -f 容器ID

删除多个容器 

docker rm -f 容器ID1  容器ID2 中间空格隔开

实例:

docker rm 865b755cd0b2 ce6343ee288f

删除所有容器

docker rm -f $(docker ps -qa)

⑨ Docker 容器日志 

$ docker logs [OPTIONS] CONTAINER

  Options:

        --details        显示更多的信息

    -f, --follow         跟踪实时日志

        --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)

        --tail string    从日志末尾显示多少行日志, 默认是all

    -t, --timestamps     显示时间戳

        --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

(以上了解)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值