dockerreview-docker概念&入门篇(代码片段)

小小工匠 小小工匠     2023-01-10     695

关键词:


Pre

使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力。

在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完美组合,更加方便微服务架构运维部署落地。


What’s Docker ?

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

简而言之, 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。


Why Docker ?

  • 1、更快速的交付和部署

    容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

  • 2、更高效的虚拟化

    Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

  • 3、更轻松的迁移和扩展

    Docker 容器几乎可以在任意的平台上运行 ,这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

  • 4、更简单的管理

    使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。


Docker vs VM

  • VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。
  • Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。
  • 由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷

Docker 跟传统的虚拟化方式相比具有众多的优势。

  • Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;
  • Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。


常用概念

Docker是CS架构,主要有两个概念:

  • Docker daemon

    运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互

  • Docker client

    Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon

了解了Docker的组成,再来了解一下Docker的三个主要概念:

  • Docker image

    镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。

  • Docker container

    容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。

  • Docker hub/registry

    共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。

镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。


安装Docker

建议在linux环境下安装Docker, 使用Centos7+yum来安装Docker

1. 查看服务器信息

内核3.10及以上


[root@VM-0-7-centos ~]# uname -r
3.10.0-1160.11.1.el7.x86_64
[root@VM-0-7-centos ~]# 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"

[root@VM-0-7-centos ~]#


2. 卸载旧的版本


[root@VM-0-7-centos ~]# yum remove docker \\
>                   docker-client \\
>                   docker-client-latest \\
>                   docker-common \\
>                   docker-latest \\
>                   docker-latest-logrotate \\
>                   docker-logrotate \\
>                   docker-engine
Loaded plugins: fastestmirror, langpacks
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-engine
No Packages marked for removal
[root@VM-0-7-centos ~]#


3. 依赖的安装包

[root@VM-0-7-centos ~]# yum install -y yum-utils
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
elk                                                                                                                 | 2.9 kB  00:00:00
epel                                                                                                                | 4.7 kB  00:00:00
extras                                                                                                              | 2.9 kB  00:00:00
os                                                                                                                  | 3.6 kB  00:00:00
updates                                                                                                             | 2.9 kB  00:00:00
(1/5): extras/7/x86_64/primary_db                                                                                   | 243 kB  00:00:00
(2/5): epel/7/x86_64/updateinfo                                                                                     | 1.0 MB  00:00:00
(3/5): elk/primary_db                                                                                               | 590 kB  00:00:00
(4/5): epel/7/x86_64/primary_db                                                                                     | 7.0 MB  00:00:00
(5/5): updates/7/x86_64/primary_db                                                                                  |  11 MB  00:00:01
Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version
Nothing to do
[root@VM-0-7-centos ~]#


4. 设置国内镜像地址

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  # 阿里云镜像仓库(推荐)

那必须整国内的呀


[root@VM-0-7-centos ~]# yum-config-manager \\
>     --add-repo \\
>  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@VM-0-7-centos ~]#

5. 更新yum软件包索引

[root@VM-0-7-centos ~]# yum makecache fast
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
docker-ce-stable                                                                                                    | 3.5 kB  00:00:00
elk                                                                                                                 | 2.9 kB  00:00:00
epel                                                                                                                | 4.7 kB  00:00:00
extras                                                                                                              | 2.9 kB  00:00:00
os                                                                                                                  | 3.6 kB  00:00:00
updates                                                                                                             | 2.9 kB  00:00:00
(1/2): docker-ce-stable/7/x86_64/primary_db                                                                         |  64 kB  00:00:00
(2/2): docker-ce-stable/7/x86_64/updateinfo                                                                         |   55 B  00:00:00
Metadata Cache Created
[root@VM-0-7-centos ~]#


6. 安装docker

  • docker-ce社区版
  • ee 企业版
[root@VM-0-7-centos ~]# yum install docker-ce docker-ce-cli containerd.io

一路 y

直到看到


Installed:
  containerd.io.x86_64 0:1.4.10-3.1.el7           docker-ce.x86_64 3:20.10.8-3.el7           docker-ce-cli.x86_64 1:20.10.8-3.el7

Dependency Installed:
  audit-libs-python.x86_64 0:2.8.5-4.el7                                checkpolicy.x86_64 0:2.5-8.el7
  container-selinux.noarch 2:2.119.2-1.911c772.el7_8                    docker-ce-rootless-extras.x86_64 0:20.10.8-3.el7
  docker-scan-plugin.x86_64 0:0.8.0-3.el7                               fuse-overlayfs.x86_64 0:0.7.2-6.el7_8
  fuse3-libs.x86_64 0:3.6.1-4.el7                                       libcgroup.x86_64 0:0.41-21.el7
  libsemanage-python.x86_64 0:2.5-14.el7                                policycoreutils-python.x86_64 0:2.5-34.el7
  python-IPy.noarch 0:0.75-6.el7                                        setools-libs.x86_64 0:3.3.8-4.el7
  slirp4netns.x86_64 0:0.4.3-4.el7_8

Complete!


7. 启动Docker


[root@VM-0-7-centos ~]# systemctl start docker
[root@VM-0-7-centos ~]#


8. 查看docker version


[root@VM-0-7-centos ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:55:49 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Fri Jul 30 19:54:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.10
  GitCommit:        8848fdb7c4ae3815afcc990a8a99d663dda1b590
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@VM-0-7-centos ~]#


9. docker hello world

[root@VM-0-7-centos ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:9ade9cc2e26189a19c2e8854b9c8f1e14829b51c55a630ee675a5a9540ef6ccf
Status: Downloaded newer image for hello-world:latest

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/

[root@VM-0-7-centos ~]#


10. 查看下载的镜像


[root@VM-0-7-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   10 days ago   13.3kB
[root@VM-0-7-centos ~]#


11. 卸载Docker

[root@VM-0-7-centos ~]#yum remove docker-ce docker-ce-cli containerd.io
[root@VM-0-7-centos ~]#rm -rf /var/lib/docker
[root@VM-0-7-centos ~]#rm -rf /var/lib/containerd


加速

登录阿里云,找到容器镜像服务,找到镜像加速器

[root@VM-0-7-centos ~]# mkdir -p /etc/docker
[root@VM-0-7-centos ~]# tee /etc/docker/daemon.json <<-'EOF'
> 
>   "registry-mirrors": ["https://0uf1zwdk.mirror.aliyuncs.com"]
> 
> EOF

  "registry-mirrors": ["https://0uf1zwdk.mirror.aliyuncs.com"]

[root@VM-0-7-centos ~]#
[root@VM-0-7-centos ~]# cat /etc/docker/daemon.json

  "registry-mirrors": ["https://0uf1zwdk.mirror.aliyuncs.com"]

[root@VM-0-7-centos ~]#
[root@VM-0-7-centos ~]#
[root@VM-0-7-centos ~]#  systemctl daemon-reload
[root@VM-0-7-centos ~]# systemctl restart docker
[root@VM-0-7-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   10 days ago   13.3kB
[root@VM-0-7-centos ~]#

dockerreview-docker常用命令(代码片段)

文章目录dockerhelpdockerhelp[root@VM-0-7-centos~]#dockerhelpUsage:docker[OPTIONS]COMMANDAself-sufficientruntimeforcontainersOptions:--configstringLocationofclientconfigfiles(default"/root/.docker& 查看详情

dockerreview-docker部署springboot项目(代码片段)

文章目录Pre编辑DockerfileDockerfile构建镜像运行镜像测试Pre随手搞个springboot的演示项目,确保能访问编辑Dockerfile[root@VM-0-7-centos~]#catbootDockerfileFROMjava:8COPY*.jar/helloboot-0.0.1-SNAPSHOT.jarCMD["--server.port& 查看详情

dockerreview-docker容器常用命令(代码片段)

文章目录容器相关的命令下载一个centos的基础镜像新建容器并启动dockerrun操作说明启动并进入容器查看当前有哪些容器正在运行dockerps启动容器停止容器重启容器强制停止进入容器退出容器删除容器删除所有停止的容器其他常用... 查看详情

概念&功能&发展

计算机网络体系结构1.计算机网络的概念计算机网络:是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。计算机网络是互连的、自治的... 查看详情

01-初识消息队列mq&&rabbit相关概念介绍

文章目录一、消息队列MQ相关的概念介绍1、什么是MQ2、为啥使用MQ,MQ的优势2.1、流量消峰2.2、引用解耦2.3、异步处理二、MQ的分类1.ActiveMQ2.Kafka3.RocketMQ4.RabbitMQ三、RabbitMQ1、RabbitMQ的基本概念2、RabbitMQ四大核心概念2.1、生产者2... 查看详情

css概念&作用

http://www.cnblogs.com/moveofgod/archive/2012/09/18/2691101.html式样定义  如何显示HTML内容   通常存储在式样表中   作用:解决内容与表现分离的问题(MVC模型,model:html,view:css,control:JavaScript)&nbs 查看详情

java集合框架--学习目标&集合概念&collection体系集合&collection接口

1.学习目标集合的概念Collection接口List接口与实现类泛型和工具类Set接口与实现类Map接口与实现类2.集合的概念2.1概念:对象的容器,定义了对多个对象进行操作的常用方法。可以实现数组的功能。2.2集合与数组的区别:数... 查看详情

4.url基本概念及格式&&django中实战使用(代码片段)

...RL,这样才可以让用户访问到对应的资源!URL基本概念及格式(1)url基本概念及格式1.url概念:URL(UniformResoureLocato 查看详情

4.url基本概念及格式&&django中实战使用(代码片段)

...RL,这样才可以让用户访问到对应的资源!URL基本概念及格式(1)url基本概念及格式1.url概念:URL(UniformResoureLocato 查看详情

elasticsearch——核心概念&系统架构&集群中常见问题&路由计算&分片控制

1.ES核心概念1.1索引(index)一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必... 查看详情

elasticsearch——核心概念&系统架构&集群中常见问题&路由计算&分片控制

1.ES核心概念1.1索引(index)一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必... 查看详情

再谈循环&迭代&回溯&递归&递推这些基本概念

循环:不断重复进行某一运算、操作。迭代:不断对前一旧值运算得到新值直到达到精度。一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一次运算结果反代会运算式进行下一次运算递推:从初值出发反... 查看详情

scom的基本概念的理解&警报的处理

...装以及管理包的作用以及实现后,感觉缺少一些基本知识概念的介绍,好像地基没有打稳的感觉,现在就给大家介绍一下基本的概念,以及平时运维工作中遇到这些概念或者警报出现的原理以及基本的处理方法。常说的四大金刚... 查看详情

jdbc的概念&使用步骤

概念:JDBC(JavaDataBaseConnectivity)是一种数据库连接技术,能实现Java程序对各种数据库的访问。由一组使用Java语言编写的类和接口(JDBCAPI)组成,他们位于java.sql以及javax.sql中。作用: 1.建立与数据库的访问连接。 2.将... 查看详情

istio概念原理&&为什么要使用istio?&&架构图

使用云平台可以为组织提供丰富的好处。然而,不可否认的是,采用云可能会给DevOps团队带来压力。开发人员必须使用微服务以满足应用的可移植性,同时运营商管理了极其庞大的混合和多云部署。Istio允许您连接、保护、控制... 查看详情

二分图简单概念&&hdu2063

二分图:二分图又称作二部图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(iinA,jinB),则称图G为... 查看详情

树二叉树存储结构二叉数遍历&数据结构基本概念和术语(代码片段)

...录树、二叉树、存储结构、二叉数遍历&数据结构基本概念和术语数据结构基本概念和术语第四章树的基本概念二叉树的基本概念什么是二叉树二叉树的基本/特殊状态二叉树的存储结构链式存储结构顺序结构存储二叉树的遍历... 查看详情

斗地主案例实现和异常概念&异常体系

斗地主案例实现异常概念&异常体系异常指的是程序在执行过程中,出现的非正常的情况,最终会导致jvm的非正常停止在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象,Jav... 查看详情