9-2 容器化、Docker1
===
概念
容器:(container)在系统层级进行虚拟化,更加轻量级。 Docker:容器化领域最流行的软件,已经成为运维行业的事实标准和基础设施。英语直译为'码头工人',logo是一只可爱的鲸鱼🐳。
虚拟化vs容器化:
优点:更加轻量级、快速、低成本、高度封装、有镜像平台大家可以交流、跨不同操作系统平台部署、批量部署。但其实容器里也往往是个操作系统,所以还是要靠操作系统隔离。
缺点:没有虚拟机独立性好。又套了一层虚拟化,端口映射、磁盘映射等参数和管理命令,增加学习成本。
可以把Docker看做是跟VMware Workstation、KVM一样的东西,都是虚拟化,底层技术不同,擅长场景不同,Docker流行因为其功能强大体验好。
安装
版本介绍和安装文档介绍
软件版本:
(过时)老版本的docker只能在linux系统中运行,windows中安装需要先安装docker machine,实质上是virtual box加控制终端加docker,学习成本高。
Docker Engine CE(community edition) 核心引擎,即命令行版本。社区免费版,但也足够使用。
Docker Desktop 桌面图形化版本。在Windows上很适合更加直观,Linux上主要还是命令行版本。
Docker Desktop for Windows截图。(课外)实质运行在Windows Hyper-V中的linux虚拟机中,虽然windows也支持容器技术,但windows容器没有linux上成熟并且镜像太大。
官方文档非常清楚,虽然是英文,但比所有的博客文章都清楚,在Docker Engine CE安装文档中可以看到 主要两种安装方式:
dnf。dnf是yum的继任者,之前的文档是教yum的,主要步骤是添加docker软件源地址 、更新源、dnf install。
从rpm安装包安装。跟平时上课从安装包安装的方式一样。
安装Docker Engine CE
(可选,跳过)卸载旧版本。
yum remove docker-ce docker-ce-cli containerd.io
。解压缩
安装
检查结果,执行docker命令,查看版本
返回
配置
(跳过)不需修改配置。
换源:
安装后一般要更换为国内镜像源,因为镜像很多很大动辄几百兆,从国外服务器下载太慢,其它原因有被GWF封可能怕出口带宽不够,因此需要换源。整个过程类似CentOS换repo软件源。
docker换源参考文章
docker换源最佳实践
启动服务
Docker中的一些概念
镜像image: 例如WordPress博客的镜像,以操作系统为底、PHP解释器、MySQL数据库,制作者先拉取基础的操作系统镜像,然后在上面安装配置后所需程序,最后共享给大家使用。 为了避免镜像过大,社区除了有Ubuntu这种2G左右的大而全镜像,也有alpine(阿尔卑斯)这种5Mb大小的极精简系统。
另外采用了分层文件系统、 依赖管理的思想,例如WordPress和Nodebb两个项目都基于同一种Ubuntu,那么重复部分只会下载一次,在docker pull image时能看到细节。 下载镜像的过程叫拉取。
镜像标签tag:
一个镜像根据操作系统和代码版本,会生成有多个版本,例如python:3.11 python:3 python:alpine-3.11。默认版本tag为latest会拉取最新的稳定版本。
容器container: 一个镜像运行起来,执行了镜像内部的命令程序,通过端口绑定使服务暴露在宿主机上供人使用,在宿主机上就像是一个程序容器。
端口绑定port bind、磁盘映射disk mapping:
程序运行在容器内,容器运行的是封装好的镜像,如果要修改细节配置,进入容器修改比较麻烦且会导致镜像变化,建议映射。
例如容器内运行一个Nginx程序,默认网站文件夹是/usr/share/nginx/html,启动在80端口。那么把宿主机(假设使用了Docker Desktop for Windows,D盘下有网站文件夹mysite) D:\mysite➡️/usr/share/nginx/html,宿主机80端口➡️容器80端口,那么当容器运行时,就能读取到宿主机上的内容。这使得Docker在保持强封装的同时兼具灵活性。
进入镜像attach:
虽然端口映射和磁盘映射提供灵活性,但有时还是需要进入容器做一些修改。修改后可以把修改后的镜像提交为新的版本,类似git代码控制软件。
docker官方仓库平台:
官方包管理平台,网友可以发布自己的镜像,也可以下载其它人的镜像加速自己的任务。
相关生态:
编排:docker compose,如果一个项目由数据库、前端、后端等多个子项目构成,可以把多个容器和运行顺序进行编排,编排配置文件叫Dockerfile。
Kubernates:是更上层的管理者,比docker compose更复杂,可以批量管理多台服务器和docker容器和自动化部署。
常用命令
查看版本
docker -v
。查看常用命令docker -h
。(常用,但因机房环境选择离线方式)在线方式拉取镜像。冒号后面的是镜像基于的操作系统和版本号例如hello-world:alpine-v1.0.0,最新版用latest单词表示。
docker pull hello-world:latest离线方式下载镜像。 先将老师分发的准备好的镜像tar文件,宿主机中复制,粘贴到虚拟机中的图形化文件管理器。 然后执行载入离线镜像包的命令
docker load -i /root/hello-world.tar查看所有已下载或已导入镜像
docker image list返回如下所有下载的镜像名和镜像id值
REPOSITORY TAG IMAGE ID CREATED SIZE wordpress latest d55afd85574d 4 weeks ago 697MB nginx latest 60c8a892f36f 6 weeks ago 192MB hello-world latest d2c94e258dcb 18 months ago 13.3kB运行容器,启动镜像,会启动镜像中的操作系统并执行镜像制作时设置的默认命令。
docker run hello-world从hello-world镜像运行容器,这个容器很简单,会打印一些欢迎信息
Hello from Docker! This message shows that your installation appears to be working correctly. ... For more examples and ideas, visit: https://docs.docker.com/get-started/查看正在运行的容器
ps(process进程) -a(all) 查看正在运行的监听程序进程和已结束运行的所有容器。
返回信息
其它命令
初学时暂时记不住那么多命令,这些命令有一定规律,格式基本为docker 主功能 次级功能 参数 容器id ,在Windows开发机器上的Docker Desktop图形应用能让我们几乎不输入命令。
进入容器
docker attach <container-id>
日志
docker logs -f <container-id>
删除容器
docker rm <container-id>
删除镜像
docker image rm <image_name:tag>
课外
安装Docker Desktop for Windows。