1 简介

Docker是一个用于开发、部署和运行应用程序的开源平台,它基于容器化技术,能够将应用及其依赖项打包成一个独立的容器,从而实现应用的快速部署和迁移。
docker中有3个重要的概念:

  • 镜像(Image):是一个只读的模板,包含了运行应用程序所需的所有文件系统、代码、运行时环境、库和依赖项等。可以把它看作是应用程序的 “蓝图”,例如一个包含了 Nginx/Redis服务的镜像。
  • 容器(Container):是镜像的一个运行实例。基于同一个镜像可以创建多个容器,每个容器都是相互隔离的,拥有自己独立的文件系统、进程空间等。就像根据一份 “蓝图” 建造出多个相互独立的 “房子”。
  • 仓库(Repository):是用于存储和分发镜像的地方,类似于代码仓库。常见的公共仓库有 Docker Hub,你可以在上面找到各种官方和社区维护的镜像,也可以搭建自己的私有仓库。

2. 环境安装

Ubuntu系统使用命令安装:sudo apt install docker
CentOS系统使用:yum install docker

  • 更改仓库源:
    编辑 vim /etc/docker/daemon.json 这个文件,若没有就创建对应路径和文件。
    输入内容:

    {
      "registry-mirrors": [
          "https://docker.1panel.live",
          "https://hub.rat.dev"
      ]
    }

3. 示例展示

1. 拉取镜像

本例拉取一个centos镜像,不指定版本,默认拉取最新的
命令: docker pull centos , 这一步可能比较慢,看网络环境。

拉取成功后,我们可以使用docker images查看本地以及拉取的镜像。

2. 创建容器

在前一个步骤中已经从仓库中拉取了centos的镜像,现在我们根据这个镜像制作容器。

命令: docker run -d --name centos_young centos sleep infinity

  • -d : 表示容器是后台执行的
  • --name centos_young : centos_young是我们要创建的容器名字(名字随便起,不指定会给一个随机的名字),后面这个“centos” 是镜像名字,表示我们要从哪个镜像为基础来创建容器。
  • sleep infinity: 让容器持续运行,避免容器启动后立即退出; 或者容器有一个一直执行的程序,可以不加这个选项

3. 查看状态

执行创建容器命令后,会输出一个容器ID(一串字符),然后我们是docker ps -a 可以查看我们所有的容器状态,信息有:容器ID,镜像名字,创建时间,状态, 端口, 容器名字

容器ID:用于区分不同容器,如图中蓝色框里面的,后面我们要指定某个容器操作,就可以根据容器ID执行命令。docker ps -a 输出的容器ID是我们我们创建容器时候返回回来的一串字符串的前面部分。
状态:Up表示容器正在运行,Exit表示容器已经退出。

4.以交互模式进入容器

  • 执行命令:docker exec -it centos_young bash 或者 docker exec -it 容器ID bash 便能以交互模式进入容器,然后执行命令等操作。
  • 进入容器后:我们可以看到前面的用户名字变成:root@6be23953473d (@后面的内容就是容器ID)。然后我们就可以在容器中执行命令或者其他操作了。

5. 退出容器

在容器中输入:exit 即可退出。退出后路径前面用户名又变回宿主机的名字了。

6. 删除容器

删除容器前,要确保容器是停止状态的。先执行命令:docker stop centos_young,命令执行成功后可以看到容器状态由Up变为Exit了。

删除容器:docker rm centos_young执行命令成功后,使用docker ps -a查看容器,便没有这个容器了。

7. 删除镜像

在依赖该镜像创建的容器已经stop了便可以使用docker rmi 镜像名字,删除后,使用docker images查看镜像便没有该镜像存在了。

4. 常用命令

  • Dockerfile构建镜像
    docker build: 命令根据 Dockerfile构建新的Docker镜像,例如这个命令docker build -t my-ubuntu-image ./会根据当前路径Dockerfile里面的内容进行构建镜像。Dockerfile的用法可以网上搜一下。
    例如:Dockerfile文件的如下,构建一个centos进行。

    # 使用 CentOS 基础镜像
    FROM centos:latest
    
    # 更新系统并安装常用工具
    RUN yum update -y && \
      yum install -y vim wget curl && \
      yum clean all
    
    # 设置工作目录
    WORKDIR /app
    
    # 定义容器启动时执行的命令
    CMD ["/bin/bash"]    
  • 容器状态

    启动 :docker start 容器名字
    停止:docker stop 容器名字
    重启:docker restart 容器名字
  • 查看容器输出的日志:

    docker logs 容器名字
  • 数据卷管理命令

    列出数据卷:docker volume ls 命令用于列出 Docker 数据卷。
    创建数据卷:docker volume create 命令用于创建新的 Docker 数据
    删除数据卷:docker volume rm 命令用于删除指定的数据卷。
  • 拷贝数据

    docker cp 容器ID:容器内的路径 主机目录路径
    docker cp 主机目录路径 容器ID:容器内的路径
  • 将镜像保存为tar文件

    docker save -o 文件名.tar 镜像名
    从tar中加载镜像: docker save -o 文件名.tar 镜像名
  • 创建一个交互式容器可选参数【常用】

    例如创建一个交互式的 Ubuntu 容器:docker run -it -p 8080:80 -v /host/path:/container/path --name my_ubuntu ubuntu bash
    常用选项:
    -d:让容器在后台运行。
    -p:进行端口映射,如-p 8080:80将主机的 8080 端口映射到容器的 80 端口。
    -v:挂载数据卷,如-v /host/path:/container/path。
    --name:为容器指定名称。
  • 网络相关命令

    查看网络:
    显示 Docker 网络的相关信息: docker network ls
    创建网络:docker network create 网络名
    将容器接入指定的网络: docker network connect 网络名 容器名或容器ID
    使容器脱离指定网络: docker network disconnect 网络名 容器名或容器ID

    5.应用场景

  • 快速部署应用:通过 Docker 可以将应用及其依赖打包成镜像,快速部署到不同的环境中,大大缩短了应用的上线时间。
  • 微服务架构:在微服务架构中,每个微服务可以打包成一个独立的容器,通过容器编排工具(如 Kubernetes)进行管理,实现微服务的快速部署、扩展和容错。
  • 持续集成和持续部署(CI/CD):在 CI/CD 流程中,使用 Docker 可以方便地构建、测试和部署应用,确保代码的快速迭代和高质量交付。
  • 开发环境隔离:开发人员可以使用 Docker 创建与生产环境一致的开发环境,避免因环境差异导致的问题

本文由mdnice多平台发布


Linux编程用C
1 声望0 粉丝