服务器配置教案 Help

9-2 容器化、Docker1

===

概念

容器:(container)在系统层级进行虚拟化,更加轻量级。 Docker:容器化领域最流行的软件,已经成为运维行业的事实标准和基础设施。英语直译为'码头工人',logo是一只可爱的鲸鱼🐳。

虚拟化vs容器化:

9 2 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上成熟并且镜像太大。

9 2dockerdesktop

Docker官方文档-桌面版安装

Docker官方文档-CE社区命令行版安装

官方文档非常清楚,虽然是英文,但比所有的博客文章都清楚,在Docker Engine CE安装文档中可以看到 主要两种安装方式:

  • dnf。dnf是yum的继任者,之前的文档是教yum的,主要步骤是添加docker软件源地址 、更新源、dnf install。

  • 从rpm安装包安装。跟平时上课从安装包安装的方式一样。

安装Docker Engine CE

  1. (可选,跳过)卸载旧版本。 yum remove docker-ce docker-ce-cli containerd.io

  2. 解压缩

tar -zxvf docker-installer.tar.gz
  1. 安装

rpm -iv --nodeps --force ./docker-installer/*.rpm
  1. 检查结果,执行docker命令,查看版本

docker -v

返回

Docker version 26.1.3, build b72abbb

配置

(跳过)不需修改配置。
换源:
安装后一般要更换为国内镜像源,因为镜像很多很大动辄几百兆,从国外服务器下载太慢,其它原因有被GWF封可能怕出口带宽不够,因此需要换源。整个过程类似CentOS换repo软件源。
docker换源参考文章
docker换源最佳实践

# (可选,一般安装完就有这个文件夹) 1. mkdir -p /etc/docker # 直到下面的EOF是一个完整的命令,创建配置文件并写入镜像源地址。 2. sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://dockerproxy.net", "https://docker.mirrors.ustc.edu.cn" ] } EOF # 重载配置 3. systemctl daemon-reload # 重启docker 4. systemctl restart docker

启动服务

1. systemctl start docker 2. systemctl enable 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容器和自动化部署。

常用命令

  1. 查看版本docker -v 。查看常用命令docker -h

  2. (常用,但因机房环境选择离线方式)在线方式拉取镜像。冒号后面的是镜像基于的操作系统和版本号例如hello-world:alpine-v1.0.0,最新版用latest单词表示。

    docker pull hello-world:latest

    课外,docker镜像导出为tar文件

  3. 离线方式下载镜像。 先将老师分发的准备好的镜像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
  4. 运行容器,启动镜像,会启动镜像中的操作系统并执行镜像制作时设置的默认命令。

    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/
  5. 查看正在运行的容器
    ps(process进程) -a(all) 查看正在运行的监听程序进程和已结束运行的所有容器。

docker ps -a

返回信息

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8715a5bebfb4 hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago blissful_ardinghelli
  1. 其它命令


    初学时暂时记不住那么多命令,这些命令有一定规律,格式基本为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。

Last modified: 25 十一月 2024