Docker
2022-09-22 22:43:13

Docker

[TOC]

1. Docker 为什么会出现?

一款产品:开发-上线 两套环境 !应用环境, 应用配置!

可以一个产品在开发环境可以正常运行!版本更新导致运维环境不可用!对运维人员考验比较大!

开发即运维!

环境配置十分的环境,配一个机器都要部署环境!(集群Redis..ES..Hadoop)费事费力

发布一个项目(Jar + (Redis 、 MYSQL 、JDK、ES…) )配置太麻烦了,不能跨平台

开发Windows,最后发布在Linux!

传统:开发生产jar,然后交给运维!

现在:开发打包部署上线,一套流程做完!

Docker给以上的问题:提出了解决方案!

比如安卓应用:

apk - 应用商店 - 下载 - 安装 即可用!

java - jar - 打包项目带上环境 (镜像) + Docker(相当于商店) - 之后下载运行即可

2. Docoker

docker的思想来源于集装箱

Jre - 多个应用 (端口冲突) - 原来都是交叉的

隔离 - Docker核心思想

传统:水果 - 毒药

Docker:水果 | 毒药

Docker通过隔离机制,可以将服务器利用到极致!

本质:所有的技术都是因为出现了一些问题,我们需要去解决才去学习!

docker对比VM十分的小巧

vm 虚拟机:

在Windows中装了一个Vmware通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!

好几个G,启动 几分钟

docker:隔离,镜像(最核心的环境 4M + Jdk+mysql) 十分 的轻巧,秒级启动

基于go语言

3. Docker模型

img

镜像(image)

在镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像==> run ==> tomcat01 容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container)

Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统

仓库(repository)

仓库就是存放镜像的地方! 还原屏幕
仓库分为公有仓库和私有仓库!
Docker Hub I
阿里云…都有容器服务器

4. Docker安装

可以参考:https://docs.docker.com/engine/install/centos/

4.1 前提

  • Linux的基础
  • Linux服务器(这里以CentOS系统为例)

环境查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#查看内核 需要 3.10 以上版本
[root@hopestation ~]# uname -r
3.10.0-1062.18.1.el7.x86_64
#系统版本
[root@hopestation ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

4.2 安装

1 卸载已安装Docker组件(如果没有安装过Dokcer,跳过这一步)

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

2 安装yum软件包

1
yum install -y yum-utils

3 设置阿里云镜像仓库

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

4 更新软件包索引

1
yum makecache fast

5 安装Docker CE

1
2
# 执行过程中 需要进行两次确认 输入 y 回车即可
yum install docker-ce docker-ce-cli containerd.io

6 启动Docker

1
systemctl start docker

7 查看Docker 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker version
#如果出现一下内容就证明安装成功了
Client: Docker Engine - Community
Version: 20.10.0
API version: 1.41
Go version: go1.13.15
Git commit: 7287ab3
Built: Tue Dec 8 18:57:35 2020
OS/Arch: linux/amd64
Context: default
Experimental: true

Server: Docker Engine - Community
Engine:
Version: 20.10.0
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: eeddea2
Built: Tue Dec 8 18:56
....

4.3 HelloWorld

1 运行helloworld镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@hopestation ~]#  docker run hello-world
#一开始会提示本地没有找到
Unable to find image 'hello-world:latest' locally
# 然后等待一下 他就会 去远程拉取
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec
Status: Downloaded newer image for hello-world:latest
# 运行成功 输出 Hello from Docker!
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

2 查看所有镜像

1
2
3
4
[root@hopestation ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# 这里有我们的helloworld
hello-world latest bf756fb1ae65 11 months ago 13.3kB

4.4 镜像加速

docker01

1
2
3
4
5
6
7
8
9
#创建目录
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4.5 卸载

  1. 卸载Docker Engine,CLI和Containerd软件包:

    1
    $ sudo yum remove docker-ce docker-ce-cli containerd.io
  2. 主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:

    1
    $ sudo rm -rf /var/lib/docker

您必须手动删除所有已编辑的配置文件。

5. Docker run流程

docker02

找不到时的结果::

1
2
3
4
5
6
7
[root@hopestation ~]#  docker run eq1dqw312
#本地没找到
Unable to find image 'helloyue666:latest' locally
#远程也没找到
docker: Error response from daemon: pull access denied for eq1dqw312,
repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.

6. Docker基本原理

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。

在这里插入图片描述

为什么Docker比VM等虚拟机快

  1. docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
  2. docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。
Docker容器 虚拟机(VM)
操作系统 与宿主机共享OS 宿主机OS上运行宿主机OS
存储大小 镜像小,便于存储与传输 镜像庞大(vmdk等)
运行性能 几乎无额外性能损失 操作系统额外的cpu、内存消耗
移植性 轻便、灵活、适用于Linux 笨重、与虚拟化技术耦合度高
硬件亲和性 面向软件开发者 面向硬件运维者

7. Docker命令

帮助命令

1
2
3
4
5
#显示版本信息
docker version
#显示cick
docker info
docker 命令 --help

docker images 镜像命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看所有本地的主机上的镜像
docker images
[root@hopestation ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a, --a11 # 列出所有镜像
-q,--quiet #只显示镜像的id

docker search 搜索镜像

1
2
3
4
5
6
7
8
9
# 搜索镜像
[root@hopestation ~]# docker search mysql

# 可选项,通过搜藏来过滤 搜索出来的镜像就是STARS大于3000的
[root@hopestation ~]# docker search mysql --filter=stars=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10247 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3785 [OK]

Prev
2022-09-22 22:43:13
Next