缥帙各舒散,前后互相逾。这篇文章主要讲述Docker安装与镜像的使用相关的知识,希望能为你提供帮助。
1、docker简介1.1 什么是dockerdocker官网地址:https://docs.docker.com/
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动开放容器联盟(OCI)。
【Docker安装与镜像的使用】Docker 使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
1.2 为什么要用docker1.2.1 docker的优势
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
1.2.2 docker与传统虚拟机的比较
2、docker的核心概念Docker 包括三个基本概念特性
docker
虚拟机
启动
秒级
分钟级
硬盘使用
一般为 MB
一般为 GB
性能
接近原生
弱于
系统支持量
单机支持上千个容器
一般几十个
隔离性
安全隔离
完全隔离
理解了这三个概念,就理解了 Docker 的整个生命周期。
2.0 Docker架构Docker使用客户端 - 服务器架构。Docker客户端与Docker守护程序交谈,该守护程序是大量的建筑,运行和分配您的Docker容器。Docker客户端和守护程序可以在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护进程使用REST API进行通信,通过UNIX套接字或网络接口。另一个Docker客户端是Docker撰写,可允许您使用由一组容器组成的应用程序。
2.1 镜像(Image)Docker镜像类似于一个虚拟机镜像(xxx.iso), 可以将它理解为一个只读的模板!
例如, 一个镜像可以包含一个基本的操作系统环境, 里面仅安装了 Apache应用程序(或用户需要的其他软件). 可以把它称为Apache镜像.
镜像是创建Docker容器的基础.
通过版本管理和增量的文件系统, Docker提供了一套十分简单的机制来创建和更新现有的镜像, 用户甚至可以从网上下载一个已经做好的应用镜像, 并直接使用它.
2.2 容器(Container)Docker 容器类似于一个轻量级的沙箱, Docker 利用容器来运行和隔离应用。
容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。
可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
注意: ? ?
2.3 仓库(Repository)Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所
根据所存储的镜像公开分享与否, Docker 仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。
目前,最大的公开仓库是官方提供的 Docker Hub ,其中存放着数量庞大的镜像供用户下载。国内不少云服务提供商(如腾讯云 、 阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问 。
当然,用户如果不希望公开分享自己的镜像文件, Docker 也支持用户在本地网络内创建一个只能自己访问的私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上 pull 下来就可以了。
3、Centos安装Docker引擎Docker 目前支持 CentOS 7 及以后的版本, 内核版本必须是3.10.
查看操作系统版本: cat /etc/redhat-release
[root@hadoop01 root]$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
查看内核版本: uname -r
[root@hadoop01 root]$ uname -r
3.10.0-862.el7.x86_64
3.1 卸载旧版本官网说明:??https://docs.docker.com/engine/install/centos/??
旧版本的 Docker 被叫做 docker 或 docker-engine,如果安装了旧版本的 Docker ,需要卸载掉它。
sudo yum remove docker \\
docker-client \\
docker-client-latest \\
docker-common \\
docker-latest \\
docker-latest-logrotate \\
docker-logrotate \\
docker-engine
[root@hadoop01 root]$ sudo yum remove docker \\
>
docker-client \\
>
docker-client-latest \\
>
docker-common \\
>
docker-latest \\
>
docker-latest-logrotate \\
>
docker-logrotate \\
>
docker-engine
[sudo] duo 的:
已加载插件:fastestmirror, langpacks
参数 docker 没有匹配
参数 docker-client 没有匹配
参数 docker-client-latest 没有匹配
参数 docker-common 没有匹配
参数 docker-latest 没有匹配
参数 docker-latest-logrotate 没有匹配
参数 docker-logrotate 没有匹配
参数 docker-engine 没有匹配
不删除任何软件包
3.2 安装Docker方法一官网安装地址:??https://docs.docker.com/engine/install/centos/??
3.2.1 安装依赖的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.2.2 添加Docker文档版本的yum源
官方的yum源安装docker比较慢, 我们配置国内比较快的yum源(阿里云)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.2.3 安装最新版本的docker引擎(社区版)
sudo yum -y install docker-ce docker-ce-cli containerd.io
3.3 安装Docker方法二:使用脚本自动安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
注意:自动安装脚本会自动检测系统信息并进行相应配置
[root@hadoop01 root]$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be
+ sudo -E sh -c yum install -y -q yum-utils
+ sudo -E sh -c yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://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
+ [ stable != stable ]
+ sudo -E sh -c yum makecache
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* centos-sclo-rh: mirrors.ustc.edu.cn
* centos-sclo-sclo: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
base| 3.6 kB00:00:00
centos-sclo-rh| 3.0 kB00:00:00
centos-sclo-sclo| 3.0 kB00:00:00
docker-ce-stable| 3.5 kB00:00:00
extras| 2.9 kB00:00:00
updates| 2.9 kB00:00:00
(1/12): docker-ce-stable/7/x86_64/filelists_db|29 kB00:00:00
(2/12): docker-ce-stable/7/x86_64/updateinfo|55 B00:00:00
(3/12): centos-sclo-sclo/x86_64/filelists_db| 935 kB00:00:00
(4/12): centos-sclo-sclo/x86_64/other_db| 185 kB00:00:01
(5/12): extras/7/x86_64/filelists_db| 259 kB00:00:00
(6/12): docker-ce-stable/7/x86_64/primary_db|70 kB00:00:01
(7/12): docker-ce-stable/7/x86_64/other_db| 122 kB00:00:00
(8/12): extras/7/x86_64/other_db| 145 kB00:00:00
(9/12): updates/7/x86_64/filelists_db| 7.0 MB00:00:09
(10/12): centos-sclo-rh/x86_64/filelists_db|12 MB00:00:13
(11/12): updates/7/x86_64/other_db| 904 kB00:00:13
(12/12): centos-sclo-rh/x86_64/other_db| 1.5 MB00:00:15
元数据缓存已建立
+ [ -n]
+ sudo -E sh -c yum install -y -q docker-ce
warning: /var/cache/yum/x86_64/7/docker-ce-stable/packages/docker-ce-20.10.12-3.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
docker-ce-20.10.12-3.el7.x86_64.rpm 的公钥尚未安装
导入 GPG key 0x621E9F35:
用户ID: "Docker Release (CE rpm) <
docker@docker.com>
"
指纹: 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35
来自: https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
setsebool:SELinux is disabled.
+ version_gte 20.10
+ [ -z]
+ return 0
+ sudo -E sh -c yum install -y -q docker-ce-rootless-extras
软件包 docker-ce-rootless-extras-20.10.12-3.el7.x86_64 已安装并且是最新版本
================================================================================
To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:
dockerd-rootless-setuptool.sh install
Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
to root access on the host. Refer to the Docker daemon attack surface
documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================
3.4 启动docker服务
sudo systemctl start docker
[duo@hadoop01 hive]$ sudo systemctl start docker
[duo@hadoop01 hive]$ ps -ef | grep docker
root2868215 15:34 ?00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
duo2882157820 15:35 pts/100:00:00 grep --color=auto docker
3.5 验证Docker是否可用
sudo docker run hello-world
3.6 把普通用户添加到docker 组
每次使用docker的时候都需要使用root用户, 比较麻烦.
可用把普通用户添加到docker组, 避免每次都添加sudo.
退出当前shell, 重新进入shell, 使刚才的配置生效
sudo usermod -aG docker duo
4、镜像基本操作镜像是 Docker 三大核心概念中最重要的,自 Docker 诞生之日起镜像就是相关社区最为热门的关键词。Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在Docker 会尝试先从默认镜像仓库下载,用户也可以通过配置, 使用自定义的镜像仓库。
4.1 列出本机镜像docker images
[duo@hadoop01 ~]$ docker images
REPOSITORYTAGIMAGE IDCREATEDSIZE
hello-worldlatestfeb5d9fea6a53 months ago13.3kB
说明:
4.2 获取一个新镜像当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。
docker pull hello-world
下载完成后, 可以使用这个镜像来运行容器
4.3 配置国内镜像源地址下载镜像的时候, 默认是从官方地址下载, 服务器在国外, 速度比较慢, 可以换成国内镜像.
4.3.1 国内常用加速地址:
网易:??http://hub-mirror.c.163.com??
中国科技大学:??https://docker.mirrors.ustc.edu.cn??
阿里云容器服务:??https://cr.console.aliyun.com/??
4.3.2 配置方法
sudo vim /etc/docker/daemon.json
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://123456.mirror.aliyuncs.com"
]
4.3.3 说明:
??https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.550.469742c75wmmC8??
[duo@hadoop01 ~]$ sudo systemctl restart docker
[duo@hadoop01
~]$
docker
info
Client:
Context:default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.7.1-docker)
scan: Docker Scan (Docker Inc., v0.12.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 1
Server Version: 20.10.12
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 splunk syslog
Swarm: inactive
Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux
Default Runtime: runc
Init Binary: docker-init
containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc version: v1.0.2-0-g52b36a2
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 8.951GiB
Name: hadoop01
ID: 7K5E:P6N4:DSUM:5NP6:CJ3X:YQBH:NFP4:DMXO:YCZX:7VCR:ZYGN:335N
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:
http://hub-mirror.c.163.com/
https://docker.mirrors.ustc.edu.cn/
https://813o9nus.mirror.aliyuncs.com/
Live Restore Enabled: false
4.4 搜索镜像 docker search hello-world
4.5 删除镜像docker rmi hello-world:latest
注意:
[root@hadoop01 ~]# docker ps -a
fb528db4c681
[root@hadoop01 ~]# docker ps -aq | xargs docker rm -f
fb528db4c681
[duo@hadoop01 ~]$ docker images
REPOSITORYTAGIMAGE IDCREATEDSIZE
hello-worldlatestfeb5d9fea6a53 months ago13.3kB
[duo@hadoop01 ~]$ docker rmi feb5d9fea6a5
Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) - image is being used by stopped container 0bf028f38463
[duo@hadoop01 ~]$ docker ps -a
CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
0bf028f38463hello-world"/hello"About a minute agoExited (0) About a minute agodazzling_wescoff
[duo@hadoop01 ~]$ docker ps -aq
0bf028f38463
[duo@hadoop01 ~]$ docker rm -f 0bf028f38463
0bf028f38463
[duo@hadoop01 ~]$ docker ps -aq
[duo@hadoop01 ~]$ docker rmi feb5d9fea6a5
Untagged: hello-world:latest
Untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
使用 Docker 一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过 docker image prune -f 命令来进行清理。
推荐阅读
- 2022/1/12think-swoole使用教程
- LNMP
- 今儿新学会一个写日志技能(双缓冲机制)
- #展望我的2022Flag# 歌谣2021|自学转行的程序员的年终总结
- 一键AI着色,黑白老照片画面瞬间鲜活
- main函数你到底知道多少
- 新年Java小游戏之「年兽大作战」祝您笑口常开
- element 级联选择器 省市区动态获取
- Pytest+Yaml+Excel 接口自动化测试框架