<h1><center>初始Docker</center></h1>

**作者:行癫(盗版必究)**

------

## 一:容器简介

#### 1.Docker之logo

<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220613223124564.png" alt="image-20220613223124564" style="zoom:50%;" />

​		容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用"装"起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去,这其实是 PaaS 最理想的状态。

#### 2.云计算服务类型

​		基础设施即服务IaaS

​		平台即服务PaaS

​		软件即服务SaaS

注意:

IAAS:指把IT基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式

PaaS:为开发人员提供了一个框架,使他们可以基于它创建自定义应用程序。所有服务器,存储和网络都可以由企业或第三方提供商进行管理,而开发人员可以负责应用程序的管理

SaaS:提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。就像打开自来水龙头就能用水一样,企业根据实际需要,向SaaS提供商租赁软件服务

#### 3.容器的本质

​		容器的本质是进程,容器就是未来云计算系统中的进程

#### 4.容器和虚拟化对比

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

<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220613223852295.png" alt="image-20220613223852295" style="zoom:50%;" />

#### 5.Docker基本概念

​		Docker系统有两个程序:docker服务端和docker客户端

​		Docker服务端:

​				是一个服务进程,管理着所有的容器

​		Docker客户端:

​				是docker服务端的远程控制器,可以用来控制docker的服务端进程

#### 6.Docker的优势

###### 交付物标准化

​		Docker是软件工程领域的"标准化"交付组件,最恰到好处的类比是"集装箱";集装箱将零散、不易搬运的大量物品封装成一个整体,集装箱更重要的意义在于它提供了一种通用的封装货物的标准,卡车、火车、货轮、桥吊等运输或搬运工具采用此标准,隧道、桥梁等也采用此标准。以集装箱为中心的标准化设计大大提高了物流体系的运行效率

注意:

​		传统的软件交付物包括:应用程序、依赖软件安装包、配置说明文档、安装文档、上线文档等非标准化组件

​		Docker的标准化交付物称为"镜像",它包含了应用程序及其所依赖的运行环境,大大简化了应用交付的模式

###### 一次构建,多次交付

​		类似于集装箱的"一次装箱,多次运输",Docker镜像可以做到"一次构建,多次交付"。当涉及到应用程序多副本部署或者应用程序迁移时,更能体现Docker的价值

###### 应用隔离

​		集装箱可以有效做到货物之间的隔离,使化学物品和食品可以堆砌在一起运输。Docker可以隔离不同应用程序之间的相互影响,但是比虚拟机开销更小;总之,容器技术部署速度快,开发、测试更敏捷;提高系统利用率,降低资源成本

#### 7.Docker核心组件

​		Docker 镜像 - Docker  images

​		Docker 仓库 - Docker  registeries

​		Docker 容器 - Docker  containers

#### 8.Docker仓库

​		用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念

​		公有的 Docker  仓库名字是 Docker Hub

###### 库:registry

​		公有库:

​				Docker-hub Daocloud ali 网易蜂巢

​		私有库:

​				公司内部使用(自己部署)

###### 分类:

​		操作系统名称 centos   ubuntu

​		应用名称    nginx   tomcat  mysql

###### Tag:

​		表示镜像版本

#### 9.Docker镜像

​		Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成

​		每一个镜像都可能依赖于由一个或多个下层的组成的另一个镜像,下层那个镜像是上层镜像的父镜像

###### 镜像名称:

​		仓库名称+镜像分类+tag名称(镜像版本)

###### 完整镜像名称:

​		docker.io/nginx:v1

​		docker.io/nginx:latest

​		daocloud.io/centos:6

###### 镜像ID:

​		64位的id号

​		例如:e6ea68648f0cd70c8d77c79e8cd4c17f63d587815afcf274909b591cb0e417ab

###### 基础镜像:

​		一个没有任何父镜像的镜像,谓之基础镜像

###### 注意:

​		Registry中镜像是通过Repository来组织的,而每个Repository又包含了若干个Image。Registry包含一个或多个Repository     

![img](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/0.png)        

#### 10.Docker容器

​		Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境

​		每一个 Docker 容器都是从 Docker  镜像创建的;Docker 容器可以运行、开始、停止、移动和删除

​		每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是  Docker 的运行部分

## 二:容器安装部署

#### 1.Docker版本

​		Docker-ce

​		Docker-ee

#### 2.Docker安装

```shell
[root@xingdian ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 git
[root@xingdian ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@xingdian ~]# yum install docker-ce -y
以上是安装最新版本,如果需要指定版本安装,见下面命令:

查看docker版本:
[root@xingdian ~]# yum list docker-ce --showduplicates
指定版本安装:
[root@xingdian ~]# yum install docker-ce-20.10.2.ce  -y

启动服务并做开机启动:
[root@xingdian ~]# systemctl enable docker
[root@xingdian ~]# systemctl start docker
```

#### 3.Docker查看

###### 查看安装版本:

```shell
[root@master ~]# docker -v
Docker version 20.10.16, build aa7e414
```

###### 查看docker运行状态:

```shell
[root@master ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 33
  Running: 16
  Paused: 0
  Stopped: 17
 Images: 12
 Server Version: 20.10.16
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 212e8b6fa2f44b9c21b2798135fc6fb7c53efc16
 runc version: v1.1.1-0-g52de29d
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1160.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.701GiB
 Name: master
 ID: VQQL:HVIY:NPF2:OPE6:SQK7:ZRGZ:RQVG:3XKX:MLMD:OYT5:OZKP:FRYW
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  192.168.18.230:80
  127.0.0.0/8
 Live Restore Enabled: false
```

## 三:国内镜像仓库的使用

#### 1.国内镜像站

​		https://www.daocloud.io

#### 2.国外镜像站

​		https://hub.docker.com

![img](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/0-16551326599845.png)                       

 ![img](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/0-16551326919458.png)        

​                 ![img](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/0-165513272390511.png)        

#### 3.镜像加速器

​		使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此 DaoCloud 推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了 Docker 官方的大力推荐

![img](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/0-165513277255814.png)        

#### 4.登陆登出Docker Hub

登录到自己的Docker register,需有Docker Hub的注册账号

```shell
[root@xingdian ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: 17343051369
Password: 
Login Succeeded

logout    Log out from a Docker registry
退出登录
      # docker logout
      Remove login credentials for https://index.docker.io/v1/
```

## 四:Docker使用

#### 1.镜像操作

​		查看centos所有的镜像:

```shell
[root@xingdian ~]# docker search centos
```

注意:

​		凡是镜像大于100的显示出来,小于100的不显示

```shell
[root@xingdian ~]# docker search centos --filter=stars=100
OFFICIAL [OK]代表官方的
AUTOMATED [OK]代表完整的镜像
```

​		拉取镜像:

```shell
[root@xingdian ~]# docker pull centos
[root@xingdian ~]# docker pull daocloud.io/library/centos:7.8.2003
```

​		查看本地镜像:

```shell
[root@xingdian ~]# docker image list
[root@xingdian ~]# docker images
[root@xingdian ~]# docker image ls
```

​		查看镜像详情:

```shell
[root@xingdian ~]# docker image inspect 镜像id
```

​		删除镜像:

​				注意:删除一个或多个,多个之间用空格隔开,可以使用镜像名称或id

```shell
[root@xingdian ~]#  docker rmi daocloud.io/library/mysql
强制删除:--force
如果镜像正在被使用中可以使用--force强制删除    
[root@xingdian ~]# docker rmi docker.io/ubuntu:latest --force
```

​		删除所有镜像:

```shell
[root@xingdian ~]# docker rmi $(docker images -q)   
#-q查出所有id号
只查看所有镜像的id:
[root@xingdian ~]# docker images -q 
```

#### 2.容器操作

​		启动容器并指定名为server并放后台运行

```shell
[root@xingdian ~]# docker run --name server -it -d centos:latest /bin/bash
```

​		使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data

```shell
[root@blackmed ~]# docker run -p 80:80 -v /data:/data -d nginx:latest
```

​		使用镜像nginx:latest以交互模式启动容器,容器内执行/bin/bash命令

```shell
[root@blackmed ~]# docker run -it nginx:latest /bin/bash
参数:
• -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 以特权模式运行
```

#### 3.查看容器

​		只查看运行状态的容器:

```shell
[root@xingdian ~]# docker ps
[root@xingdian ~]# docker ps -a
-a  查看所有容器
只查看所有容器id:
[root@xingdian ~]# docker ps -a -q
列出最近一次启动的容器
[root@xingdian ~]#	docker ps -l
```

​		查看容器详细信息:

```shell
[root@xingdian ~]# docker inspect 1fbf6
[
    {
        "Id": "1fbf6d9c50217c0f630fec1f98c6647e38e2371af94f2860d34674eeffd42f84",
        "Created": "2020-08-12T15:52:39.064893415Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
容器信息很多,这里只粘贴了一部分
```

#### 4.启动容器

```shell
[root@xingdian ~]# docker start  name
```

#### 5.关闭容器

```shell
[root@xingdian ~]# docker stop  name
退出不关闭:
快捷键:ctrl +p+q
```

#### 6.删除容器

```shell
[root@xingdian ~]# docker rm 容器id或名称
要删除一个运行中的容器,添加 -f 参数
根据格式删除所有容器:
[root@xingdian ~]# docker rm $(docker ps -a -q)
```