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、官方文档
作者:Hang Shao
出处:https://www.cnblogs.com/pam-sh/p/13192295.html
版权:本作品采用「知识共享」许可协议进行许可。
声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)