• Docker的入门基础和使用


    1、Docker架构

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器

    • Docker 客户端(Client) : Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
    • Docker 主机(Host) :一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

    Docker 包括三个基本概念:

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

    2、Docker安装

            安装略

    安装完成后启动docker:

    sudo systemctl start docker

    测试是否启动成功: 

    3、仓库配置

    国内从 DockerHub 拉取镜像有时会特别慢,此时可以配置镜像加速器

    Docker 官方和国内很多云服务商都提供了国内加速器服务,比如:

    • 阿里云的加速器:https://help.aliyun.com/document_detail/60750.html
    • 网易加速器:http://hub-mirror.c.163.com
    • Docker官方中国加速器:https://registry.docker-cn.com
    • ustc 的镜像:https://docker.mirrors.ustc.edu.cn
    • daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)

    配置国内加速器镜像:

    在/etc/docker/daemon.json文件(如果文件不存在则需要新建)添加如下配置:

    1. {
    2. "registry-mirrors":["http://hub-mirror.c.163.com"]
    3. }

    然后重新启动服务:

    1. systemctl daemon-reload
    2. systemctl restart docker

    4、镜像查看和拉取

    4.1 查询镜像:hello-world

    docker search hello-world

    4.2 拉取镜像:hello-world

    docker pull hello-world:latest

    4.3 查看本地仓库已经pull下的镜像

    4.4 运行镜像:hello-world

    docker run hello-world

    注意:如果在没有镜像的时候直接docker run hello-world也是可以的;它会先检查本地是否有这个镜像,没有的话会先从指定仓库中拉取。

    5、容器实例-Ubuntu

    5.1 从ubuntu镜像中输出hello world        

            Docker 允许在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。这里同样是个Hello World,不同在于它是在容器内部运行的。

    docker run ubuntu:latest /bin/echo "hello world"

    各个参数的含义:

    • docker: Docker 的二进制执行文件。
    • run: 与前面的 docker 组合来运行一个容器。
    • ubuntu:latest 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
    • /bin/echo "Hello world": 在启动的容器里执行的命令

            以上命令完整的意思可以解释为:Docker 以 ubuntu 最新的(默认是latest) 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

    5.2 运行交互式的容器

            通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力。

    1. docker run -i -t ubuntu:latest
    2. echo 'hello world'

    参数解析:

    • -t: 在新容器内指定一个伪终端或终端。
    • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

    运行 exit 命令或者使用 CTRL+D 来退出容器

    5.3 运行容器至后台模式

     查看正在运行的容器:

    1. docker container ls
    2. docker ps

    显示5.2中执行的程序不在容器中执行,目前没有正则执行的镜像。

    需要-d参数,来让容器实例在后台运行:

    docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"

            在输出中,没有看到期望的 "hello world",而是一串长字符,这个长字符串叫做容器 ID,对每个容器来说都是唯一的,可以通过容器 ID 来查看对应的容器发生了什么。

    再次通过docker ps 来查看目前是否有正在执行的容器:

    输出详情介绍:

    • CONTAINER ID: 容器 ID。
    • IMAGE: 使用的镜像。
    • COMMAND: 启动容器时运行的命令。
    • CREATED: 容器的创建时间。
    • STATUS: 容器状态(状态有7种)。created(已创建)、restarting(重启中)、 running(运行中)、 removing(迁移中)、 paused(暂停)、 exited(停止)、 dead(死亡)
    • PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
    • NAMES: 自动分配的容器名称。

    通过docker logs 命令,查看指定容器内的标准输出:

    docker logs 187ec8cbe5b1

    关闭正在启动的容器:

    docker stop 187ec8cbe5b1

  • 相关阅读:
    SJ/T 11294-2018 防静电地坪涂料检测
    Latex 爬过的坑(5)——解决 IEEE 模板论文作者对齐问题
    TCP_IP协议
    [Vulnhub] Simple CuteNews-CMS+Kernel权限提升
    pycharm中做web应用(13)基于Django和mysql 做用户登录验证3
    2023-10-07 LeetCode每日一题(股票价格跨度)
    死锁的原因及解决方法
    SpringBoot邮件服务spring-boot-starter-mail
    2023软件测试面试题汇总
    软件测试3年以为的躺平了,没想到还得内卷,这题太难了...
  • 原文地址:https://blog.csdn.net/weixin_44799217/article/details/127722416