s1eep123's blog.

docker使用

Word count: 1.6kReading time: 6 min
2022/08/09

概述

  1. Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

  2. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  3. 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

docker优点

  1. 相比配置各种复杂环境,docker将应用程序和环境配置分开。因此可以快速部署,测试代码,大大减少编写代码和在生产环境中运行代码之间的延迟。

docker架构

docker包括三个基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

image-20220901092554837

概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

docker安装

  1. 首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源:

    1
    2
    sudo apt update
    sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  2. 使用下面的 curl 导入源仓库的 GPG key:

    1
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  3. 将 Docker APT 软件源添加到你的系统:

    1
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  4. 想要安装 Docker 最新版本,运行下面的命令。

    1
    2
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io

docker配置国内镜像源

  1. 阿里云申请镜像地址https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

  2. touch /etc/docker/daemon.json

  3. vim /etc/docker/daemon.json,添加以下内容

    1
    2
    3
    {
    "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
    }
  4. systemctl reload docker

  5. systemctl restart dockerservice

docker基本操作

  1. 帮助命令

    1
    2
    3
    4
    5
    6
    7
    8
    #显示docker的版本信息
    docker version

    #显示docker的系统信息,包括镜像和容器数量
    docker info

    #显示命令帮助信息
    docker 命令 --help
  2. 镜像命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #查看所有本地的主机上的镜像
    docker images

    #在docker hub上搜索指定镜像,默认tag为latest
    docker search <image>:<tag>

    #下载指定镜像
    docker pull <image>:<tag>

    #删除指定镜像
    docker rmi -f <image ID>
  3. 容器命令

    使用容器命令之前,必须要有相应的镜像

    • 新建容器

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      #新建容器并使用
      docker run [可选参数] <image>
      --name="Name" 容器名字,用于区分容器
      -d 后台方式运行
      -it 使用交互式方式运行,进入容器查看内容
      -p 指定容器映射端口 -p 8080:8080
      -p ip:主机端口:容器端口
      -p 主机端口:容器端口
      -p 容器端口
      -P 随机指定端口
      -e 修改配置文件
    • 查看容器

      1
      2
      3
      4
      5
      #查看正在运行的容器
      docker ps

      #查看所有容器
      docker ps -a
    • 退出容器

      1
      2
      3
      4
      5
      #退出并停止交互容器
      exit或Ctrl+P

      #退出但不停止容器
      Ctrl+P+Q
    • 删除容器

      1
      2
      3
      4
      5
      #删除容器(不能删除正在运行的容器,若强制删除则需加上-f参数)
      docker rm

      #强制删除所有容器
      docker rm -f $(docker ps -aq)
    • 启动和停止容器

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      #启动容器
      docker start id

      #重启容器
      docker restart id

      #停止容器
      docker stop id

      #强制停止
      docker kill id
  4. 其他命令

    • 后台启动容器

      1
      docker run -d ubuntu
    • 查看日志

      1
      docker logs -tf --tail <num> <id>
    • 查看容器进程信息

      1
      docker top id
    • 进入当前正在运行容器

      1
      2
      3
      4
      5
      6
      7
      通常容器是在后台运行,但有时需要进入容器修改配置

      #方式一,进入容器开启新的终端
      docker exec -it id bash

      #方式二,进入容器正在执行的终端
      docker attach id bash
    • 查看CUP状态

      1
      docker stats id
  5. 举例

    • 部署Nginx

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
        #搜索镜像
      docker search nginx

      #拉取镜像
      docker pull nginx

      #查看镜像
      docker images
      root@ubuntu:/home/xiaoh# docker images
      REPOSITORY TAG IMAGE ID CREATED SIZE
      nginx latest 605c77e624dd 2 weeks ago 141MB

      #后台启动镜像
      docker run -d --name nginx01 -p 1234:80 nginx

      #测试是否启动
      curl 127.0.0.1:1234
      <h1>Welcome to nginx!</h1>

      - 部署Tomcat

      #拉取镜像
      docker pull tomcat

      #后台启动镜像
      docker run -d -p 3456:8080 –name tomcat01 nginx

      #进入容器
      docker exec -it tomcat01 /bin/bash

      #发现缺少linux命令、缺少webapps。原因是阿里云默认下载最小镜像,所有其他不必要的资源都会被剔除,只保证最小可运行的环境。

      #复制webapps
      cp -r webapps.dist/* webapps
      ```

CATALOG
  1. 1. 概述
  2. 2. docker优点
  3. 3. docker架构
  4. 4. docker安装
  5. 5. docker配置国内镜像源
  6. 6. docker基本操作