本文最后更新于 2023-11-05,文章内容可能已经过时。

Docker——容器化部署(基础篇)

前言

Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

优点:

Docker是一个快速交付应用、运行应用的技术:

  1. 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统1

  2. 运行时利用沙箱机制形成隔离容器,各个应用互不干扰。

  3. 启动、移除都可以通过一行命令完成,方便快捷。

[1]: 因为Docker是将依赖、运行环境一起打包的,而 Docker容器在任何操作系统上都是一致的,所以就有效避免了测试部署环境和开发环境不一致可能出现的各种问题(开发能跑,测试部署跑不起来的问题得到了有效解决),这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

Docker结构:

  • 服务端:接收命令或远程请求,操作镜像或容器

  • 客户端:发送命令或者请求到Docker服务端

Docker和虚拟机
请输入图片描述
docker是一个系统进程;虚拟机是在操作系统中的操作系统

docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

镜像、容器、仓库

镜像(Image):

镜像就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器,相当于容器的“源代码”。

Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):

容器是用镜像创建的运行实例。

镜像中的应用程序运行后形成的进程就是容器。只是Docker会给容器做隔离,对外不可见。

仓库(Repository):

仓库就是集中存放镜像文件的场所。

最大的公开仓库是 Docker Hub(https://hub.docker.com/)

联合文件系统

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

安装运行

docker官网传送门

  • 安装docker之前先安装gcc以及gcc的c++支持

$ yum -y install gcc

$ yum -y install gcc-c++

以centos为例:

在docker文档中找到Docker Engine,然后在Install中找到centos的文档,就可以找到安装命令。

  • 若之前有安装过docker,需要先卸载旧版:

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  • 根据文档提示,首次安装需要安装引擎库:

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

官网提供的stable镜像仓库为https://download.docker.com/linux/centos/docker-ce.repo国内访问速度较慢,所以上面用到地址是阿里云的镜像地址

  • 更新yum包索引(可选)

$ yum makecache fast
  • 最后安装docker引擎

$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

  • 启动docker

$ sudo systemctl start docker
  • 测试运行hello-world镜像,测试docker是否正确安装

$ sudo docker run hello-world

首次运行可能会提示找不到镜像,docker会自动下载镜像,然后在控制台看到Hello from Docker!即为成功


请输入图片描述

  • 卸载docker

停止docker

$ sudo systemctl stop docker
  • 卸载docker

$ sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 删除docker路径下文件

$ sudo rm -rf /var/lib/docker
$ sudo rm -rf /var/lib/containerd

配置加速器

配置镜像加速器,可以提升docker访问速度。各大云服务器厂商均有提供容器镜像服务。

腾讯云:

在容器镜像服务中找到镜像加速,按照提示配置即可。

阿里云:

在阿里云官网找到容器镜像服务,创建一个个人版实例

然后选择镜像加速器,根据下方的操作文档配置加速器

常用命令

  • 启动docker: systemctl start docker

  • 停止docker: systemctl stop docker

  • 重启docker: systemctl restart docker

  • 查看docker状态: systemctl status docker

  • 开机启动: systemctl enable docker

  • 查看docker概要信息:docker info

  • 查看docker总体帮助文档: docker --help

镜像常用命令

图片

查看镜像

docker images [OPTIONS]

可选参数:

-a:列出本地所有的镜像(含历史映像层)

-q:只显示镜像ID

实例:

$ docker search --limit 5 ahzoo

查找镜像

docker search [OPTIONS] 镜像名字

可选参数:

--limit: 只列出N个镜像,默认为25

示例:

$ docker search --limit 5 ahzoo

下载镜像

docker pull 镜像名字[:TAG]

TAG:镜像标签,一般是版本号,默认为latest

$ docker pull 镜像名字

## 等价于:
$ docker pull 镜像名字:latest

查看镜像/容器/数据卷所占的空间

$ docker system df 

删除镜像

删除指定镜像:docker rmi 镜像ID

删除多个镜像:docker rmi -f 镜像名1:TAG 镜像名2:TAG

示例:

## 删除全部镜像
$ docker rmi -f $(docker images -qa)