docker入门

了解#

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

Docker的应用场景#

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

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

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

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

说明:

PaaS:

把服务器平台作为一种服务提供的商业模式,通过网络进行程序提供的服务

基本概念#

镜像(Image):Docker 镜像(Image),就相当于是一个 完整的镜像(包含程序、环境、编译器等)

容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,某一个镜像的实例就是容器,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。仓库和仓库注册服务器是不同的:仓库注册服务器上存放着多个仓库,每个仓库中包含多个镜像。仓库又可以分为公开仓库和私有仓库,例如:Docker Hub、阿里云、网易云等

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

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

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

1
2
3
4
5
6
7
Person p1=new Person();
Person p2=new Person();
Person p3=new Person();
-----------------------------
p1,p2,p3 就是三个容器(实例)
Person  就是镜像(类)
-----------------------------

用Dcoker的LOGO来形象介绍容器、宿主机、镜像的关系:

大海  --- 就是宿主机(环境、系统)

鲸鱼  ---就是docker(软件)

小箱子   ---就是容器实例,这些实例来自镜像的实例化

安装#

注释:Docker只支持Centos6.8以上的系统版本

Docker 分为社区版(CE)企业版(EE)

社区版免费、企业版收费

Centos6.8以上#

Centos7安装#

1
yum install docker-ce

Centos8安装#

参考:链接

1. 安装检查

  Docker要求安装环境为 64位系统,且内核在3.8以上。可用uname -r 查看。

2. 安装依赖 

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

3. 设置yum源,我使用的是阿里云镜像(官方地址直接连接失败了,估计是服务器网络问题)

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

4. 安装

1
yum install docker-ce

5. 故障处理 

  第4步安装时,报错: Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3,

根据提示,需要使用版本大于1.2.2-3的 containerd.io,直接使用wget从官方下载不了,直接在  下载 ,containerd.io-1.2.6-3.3.el7.x86_64.rpm,然后上传至服务器。

安装containerd.io:dnf install containerd.io-1.2.6-3.3.el7.x86_64.rpm

6. 继续安装

1
yum install docker-ce

一路输入y,安装完成。

7. 安装完成

1
docker -v

查看安装版本(Docker version 19.03.8, build afacb8b)

8、启动docker

docker启动       

1
2
systemctl start docker
service docker start

重启docker服务

1
2
systemctl restart  docker
sudo service docker restart

关闭docke

1
2
systemctl stop docker
service docker stop

查看是否启动成功

1
docker ps -a

运行Hello World#

1、Hello World 程序在远程仓库(Docker Hub)上

2、Docker host(主机)上从远程仓库拉取,获得镜像

3、然后创建容器,开始运行

阿里云镜像加速#

Docker Hub 服务器在国外,从上面拉取超级慢,换到国内的镜像厂商比较快,这里以阿里云为例:

1、在  容器镜像服务控制台 中获取加速地址

2、将加速器地址配置到 Docker 主机上

1
2
3
4
5
6
7
8
vim /etc/docker/daemon.json  //若没有改文件,则手动创建
 
{
  "registry-mirrors": ["https://geqvsh14.mirror.aliyuncs.com"]
}
 
systemctl daemon-reload  //加载文件
systemctl restart docker  //重启服务 

运行#

1
docker run hello-world

注释:本地没有hello-world镜像,所以会从仓库下载(拉取)镜像,并在容器中运行

底层原理#

Docker是怎么工作的?#

Docker是一个CS结构的系统,Go语言编写,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器

容器就是运行的环境,就是一个一个箱子

为什么Docker比VM运行快?#

1、Docker比虚拟机有更少的抽象层,Docker不需要硬件资源,直接使用实际主机上的硬件资源,不需要 Hypevisor 实现硬件资源虚拟化

2、Docker使用的是宿主机的内核,当新建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。因此新建一个容器,只需几秒

常用命令#

docker version#

显示版本信息

docker info#

显示版本号、存储驱动、可用内存、宿主机的名字等

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc.)
 
Server:
 Containers: 2
  Running: 1
  Paused: 0
  Stopped: 1
 Images: 3
 Server Version: 20.10.6
 Storage Driver: overlay2
  Backing Filesystem: extfs
  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 spl
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-957.21.3.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.795GiB
 Name: iZuf6ece4mm10ixp4atj39Z
 ID: D42R:EIYV:I4YK:JO4I:TPBL:AT5R:2KM5:42GK:4R2E:CCE5:WNID:PIQE
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://geqvsh14.mirror.aliyuncs.com/
 Live Restore Enabled: false

docker --help#

帮助文档

--镜像命令--#

docker images#

列出本地主机的镜像

各个字段说明:

   

PS:TAG:表示标签,可以有多个,表示这个仓库源的不同版本

选项说明:

1
docker images -a

列出本地主机上所有的镜像

1
docker images -qa

只显示镜像ID

1
docker images --digests

显示镜像的摘要信息

1
docker images --digests --no-trunc

显示完整的镜像信息  

1
docker search tomcat

在docker Hub上查询镜像

选项说明:

1
docker search tomcat --no-trunc

显示完整的镜像描述

1
docker search tomcat --limit 5

限制显示个数

docker pull tomcat#

从远程Hub中拉取镜像源,默认最新版本

docker rmi  -f hello-world#

强制(-f)删除镜像

选项介绍:

1
docker rmi  -f 镜像ID

删除单个镜像

1
docker rmi  -f 镜像名1 镜像名2

删除多个镜像

1
docker rmi  -f $(docker images -qa)

删除全部镜像

--容器命令--#

1、首先在docker中拉取一个Centos镜像,下面的实验在该容器中进行:

1
docker pull centos

2、启动该系统(容器)

1
docker run -it 300e315adb2f

选项:

docker ps#

显示所有正在使用的容器

选项介绍:

退出容器#

1、exit :容器停止并退出

2、Ctrl+P+Q :容器随处不停止

启动容器#

1
docker start 容器ID/容器名

重启容器#

1
docker restart 容器ID/容器名 

停止容器#

1
docker stop 容器ID/容器名

强制停止容器#

1
docker kill 容器ID/容器名

删除已停止的容器#

1
2
3
docker rm -f $(docker ps -aq)
 
docker ps -qa | xargs dockers rm

参考#

1、官方文档

2、Centos 官方文档

3、Docker从入门到精通

4、Docker 极简入门教程,傻瓜都能看懂!

5、Docker基础知识

作者:Hang Shao

出处:https://www.cnblogs.com/pam-sh/p/13192295.html

版权:本作品采用「知识共享」许可协议进行许可。

声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.

posted @   PamShao  阅读(130)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu