• docker 快速入门指南



    前言

    大家好,我是洋子。在测试行业呆久了,或多或少都听说Kubernetesk8s)和Docker等容器技术,这股内卷的风已经早已吹到测试这边来了,扶我起来,我还能学!

    今天先介绍一下时下已经非常流行的Docker,为后续学习k8s打下基础,为什么我们要使用Docker,不妨先看下以下几个应用场景

    • 作为一个测试,我们可以使用Docker 快速部署测试环境,很方便的和持续集成CI流水线结合

    • Linux服务器上安装Mysql,除了可以使用yum安装外,还可以Docker安装Mysql,做到秒级别部署,再也不用担心编译安装繁琐的步骤和各种奇怪的问题

    • 甚至对于一些非常复杂的Web项目,如需要同时安装Java/Tomcat/MySQL/JDBC驱动等,手动部署非常麻烦,并且在做机器迁移时,又需要全部手动重新部署,而用Docker镜像创建出的容器,可复制出一样的环境,还可避免在Linux服务器A上可运行,在Linux服务器B上不可运行的情况

    虚拟机和容器技术

    在介绍Docker以前,先讲讲操作系统虚拟机容器技术

    和QQ、微信这些应用程序相比,操作系统是一个很重而且很笨的程序,比如Windows操作系统

    操作系统一般要占用很多资源,比如一个Win10操作系统,硬盘一般会占用20-40G,系统内存也要占用2-4G

    虚拟机里面也包含了操作系统。常见的虚拟机软件有VMwareVirtualBox等,通过Hypervisor(虚拟机监视器,是用来建立与执行虚拟机器的软件、固件或硬件)创建很多个虚拟机,这些虚拟机里面各自拥有自己的操作系统(Guest Operating System),然后再基于这些操作系统之上创建应用

    在这里插入图片描述

    因为虚拟机本身包含了操作系统,所以要占用挺多资源,因此使用虚拟机创建应用存在一定的资源浪费

    如下图,我的机器有16G内存,创建了3个虚拟机VM1、VM2、VM3,这3个虚拟机本身占用了2+1+4=7G内存,我们只有剩余总共9个G去部署应用,并且在每个虚拟机上能够部署的应用就更少了
    在这里插入图片描述
    我们需要使用的是操作系统里面部署的应用,而不是操作系统本身,有什么办法能杜绝资源浪费?

    肯定有的,容器技术就出现啦

    容器的英文是container,意思是集装箱,使用集装箱有以下好处:

    • 集装箱之间相互隔离
    • 快速装载和卸载
    • 反复使用

    容器技术就和集装箱类似,使用容器技术可以做到和虚拟机一样隔离应用,并且容器之间可以共享同一个操作系统,不用再像虚拟机那样各自创建一个操作系统,解决了资源浪费的问题

    Docker就是容器技术的一种实现,从Docker的icon可以看到,是一条小鲸鱼,上面摆放着各种集装箱
    在这里插入图片描述

    什么是Docker

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

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

    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 App),更重要的是容器性能开销极低,占用资源也更少,操作系统占用几G,容器只需要几M的内存

    Docker 从 17.03 版本之后分为 CE(Community Edition,社区版) 和 EE(Enterprise Edition,企业版),日常用社区版完全足够

    Docker官网:https://docs.docker.com/

    Docker基于C/S架构

    Docker架构使用的是常见的C/S架构,也就是分为客户端(Client)和服务端(Server)

    在这里插入图片描述
    Docker Client:客户端就是Docker命令行工具;用户直接操作Client,由Client向Server发送请求
    Docker Server:服务器端就是Docker守护进程(Docker daemon),它接收Client的请求,直接操作Docker组件,然后返回响应给Client

    从上图我们可以看到Docker有三大组件,分别是镜像(Image)容器(Containers)仓库(Registry)

    Docker三大组件

    1. 镜像(Image)

    使用计算机的我们,一般都在其他地方接触过镜像,比如重装电脑操作系统的镜像,Docker里面的镜像也类似,在Docker镜像当中,运行进程所需要的文件系统、依赖库、环境变量、启动参数等所有信息打包整合到了一起

    镜像和常见的tar、rpm、deb等安装包一样,都打包了应用程序,但最大的不同点在于它里面不仅有基本的可执行文件,还有应用运行时的整个系统环境

    这就让镜像具有了非常好的跨平台便携性和兼容性,能够让开发者在一个系统上开发(例如 Ubuntu),然后打包成镜像,再去另一个系统上运行(例如 CentOS),完全不需要考虑环境依赖的问题,是一种更高级的应用打包方式

    可以使用Dockerfile文件来自动构建Docker镜像,具体用法下篇文章会谈到

    1. 容器(Containers)

    容器是用Image镜像创建的运行实例。Docker 利用容器(Container)独立运行的一个或一组应用

    容器可以被启动、停止、删除(后面会介绍Docker的容器操作命令)。每个容器都是相互隔离的,可以理解成简易的Linux操作系统

    1. 仓库(repository)

    仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)

    仓库分为公开仓库(Public)和私有仓库(Private)两种形式,最大的公开仓库是 Docker Hub(https://hub.docker.com/)存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等

    Docker的使用方法

    想要使用Docker的前提条件,你需要准备一台云服务器,或者本地搭建好Linux虚拟机环境

    在Linux上安装Docker

    环境准备:Linux 要求内核 3.0 以上,我这里使用的阿里云服务器(CentOS 7),查看内核信息的命令如下:

    uname -r
    
    • 1
    [root@CentOS-s-1-CPU-1-GB work]# uname -r
    3.10.0-957.el7.x86_64
    
    • 1
    • 2

    查看系统配置

    cat /etc/os-release
    
    • 1
    [root@CentOS-s-1-CPU-1-GB ~]# cat /etc/os-release
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1. 卸载旧版本,如果服务器上没安装过 docker 就不用进行此步骤
    yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 下载依赖的安装包:
    yum install -y yum-utils
    
    • 1
    1. 设置镜像的仓库,官方文档中默认是国外的仓库,不推荐使用,这里推荐使用国内的,如下:
    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo  #国外的地址
        
        # 设置阿里云的Docker镜像仓库
    yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #国外的地址
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 更新 yum 软件包索引:
    yum makecache fast  # 注意:如果是 centos 8 版本则直接使用 yum makecache 即可
    
    • 1
    1. 安装 docker ,docker-ce 代表为社区版,而 ee 代表是企业版,此处安装社区版
    yum install docker-ce docker-ce-cli containerd.io
    
    • 1

    注意:版本为 centos 8 时执行上述命令时会报错,说的是 containerd.io >= 1.2.2-3,解决方法:

    (1)降低 docker 的版本;(2)如果不想降低 docker 版本,那么就更新 containerd.io 的版本:

    wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
    
    • 1
    yum install -y  containerd.io-1.2.6-3.3.el7.x86_64.rpm
    
    • 1

    然后重新执行:

    yum install docker-ce docker-ce-cli containerd.io
    
    • 1
    1. 启动 docker
    systemctl start docker
    # 查看当前版本号,是否启动成功
    docker version
    # 设置开机自启动
    systemctl enable docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 查看是否安装成功
    [root@CentOS-s-1-CPU-1-GB ~]# docker version
    Client: Docker Engine - Community
     Version:           20.10.17
     API version:       1.41
     Go version:        go1.17.11
     Git commit:        100c701
     Built:             Mon Jun  6 23:05:12 2022
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.17
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.17.11
      Git commit:       a89b842
      Built:            Mon Jun  6 23:03:33 2022
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.6.6
      GitCommit:        10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
     runc:
      Version:          1.1.2
      GitCommit:        v1.1.2-0-ga916309
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    显示 docker 的版本信息则说明 docker 安装成功,从版本信息可以看到Docker Client以及Docker Server我们都安装好了

    1. 配置阿里云镜像加速器,使用加速器可以提升获取Docker官方镜像的速度

    在这里插入图片描述
    依次执行这4条命令

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://bees04ft.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 测试运行 hello-world 镜像

    第一次运行会自动从镜像仓库中拉取最新镜像,然后再运行镜像

    docker run hello-world 
    
    • 1

    等待出现以下内容,说明 hello-world 镜像拉取并运行成功

    Hello from Docker!
    This message shows that your installation appears to be working correctly
    
    • 1
    • 2

    Docker 的安装步骤官方文档,也可以参考该文档安装Docker

    https://docs.docker.com/engine/install/centos/
    
    • 1

    Docker的卸载

    # 1. 卸载依赖
    yum remove docker-ce docker-ce-cli containerd.io
    # 2. 删除资源  . /var/lib/docker是docker的默认工作路径
    rm -rf /var/lib/docker
    
    • 1
    • 2
    • 3
    • 4

    Docker的常用命令总结

    基础命令

    docker version          #查看docker的版本信息
    docker info             #查看docker的系统信息,包括镜像和容器的数量
    docker 命令 --help       #帮助命令(可查看可选的参数)
    docker COMMAND --help
    
    • 1
    • 2
    • 3
    • 4

    命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/

    镜像命令

    1. docker images 查看本地主机的所有镜像
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
    
    #解释:
    1.REPOSITORY  镜像的仓库源
    2.TAG  镜像的标签
    3.IMAGE ID 镜像的id
    4.CREATED 镜像的创建时间
    5.SIZE 镜像的大小
    
    
    # 可选参数
    -a/--all 列出所有镜像
    -q/--quiet 只显示镜像的id
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    1. docker search 搜索镜像
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql
    NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   10308     [OK]
    mariadb                           MariaDB is a community-developed fork of MyS…   3819      [OK]
    mysql/mysql-server                Optimized MySQL Server Docker images. Create…   754                  [OK]
    percona                           Percona Server is a fork of the MySQL relati…   517       [OK]
    centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86
    mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   79
    centurylink/mysql                 Image containing mysql. Optimized to be link…   60                   [OK]
    
    
    #可选参数
    
    Search the Docker Hub for images
    
    Options:
      -f, --filter filter   Filter output based on conditions provided
          --format string   Pretty-print search using a Go template
          --limit int       Max number of search results (default 25)
          --no-trunc        Don't truncate output
          
          
    #搜索收藏数大于3000的镜像
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker search mysql --filter=STARS=3000
    NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql     MySQL is a widely used, open-source relation…   10308     [OK]
    mariadb   MariaDB is a community-developed fordockerk of MyS…   3819      [OK]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    1. docker pull 镜像名[:tag] 下载镜像
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql
    Using default tag: latest            #如果不写tag默认就是latest
    latest: Pulling from library/mysql
    6ec7b7d162b2: Pull complete          #分层下载,docker image的核心-联合文件系统
    fedd960d3481: Pull complete
    7ab947313861: Pull complete
    64f92f19e638: Pull complete
    3e80b17bff96: Pull complete
    014e976799f9: Pull complete
    59ae84fee1b3: Pull complete
    ffe10de703ea: Pull complete
    657af6d90c83: Pull complete
    98bfb480322c: Pull complete
    6aa3859c4789: Pull complete
    1ed875d851ef: Pull complete
    Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873 #签名
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest  #下载来源的真实地址  #docker pull mysql等价于docker pull docker.io/library/mysql:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    指定版本下载(如指定下载mysql 5.7 版本)

    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7
    5.7: Pulling from library/mysql
    6ec7b7d162b2: Already exists
    fedd960d3481: Already exists
    7ab947313861: Already exists
    64f92f19e638: Already exists
    3e80b17bff96: Already exists
    014e976799f9: Already exists
    59ae84fee1b3: Already exists
    7d1da2a18e2e: Pull complete
    301a28b700b9: Pull complete
    529dc8dbeaf3: Pull complete
    bc9d021dc13f: Pull complete
    Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173
    Status: Downloaded newer image for mysql:5.7
    docker.io/library/mysql:5.7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1. docker rmi 删除镜像
    #1.删除指定的镜像id
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id
    #2.删除多个镜像id
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  镜像id 镜像id 镜像id
    #3.删除全部的镜像id
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f  $(docker images -aq)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    容器命令

    说明:有了镜像才可以创建容器,下面是拉取centos 镜像来测试学习

    docker pull centos
    
    • 1

    新建容器,并运行该容器

    docker run [可选参数] image
    #参数说明
    --name="名字"           指定容器名字
    -d                     后台方式运行
    -it                    使用交互方式运行,进入容器查看内容
    -p                     指定容器的端口
    (
    -p ip:主机端口:容器端口  配置主机端口映射到容器端口
    -p 主机端口:容器端口
    -p 容器端口
    )
    -P                     随机指定端口(大写的P)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    进入容器

    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it centos /bin/bash
    [root@bd1b8900c547 /]# ls      
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    
    • 1
    • 2
    • 3

    退出容器

    #exit 停止并退出容器(后台方式运行则仅退出)
    #Ctrl+P+Q  不停止容器退出
    [root@bd1b8900c547 /]# exit
    exit
    [root@iZwz99sm8v95sckz8bd2c4Z ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5

    列出运行过的容器

    #docker ps 
         # 列出当前正在运行的容器
    -a   # 列出所有容器的运行记录
    -n=? # 显示最近创建的n个容器
    -q   # 只显示容器的编号
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps -a
    CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
    bca129320bb5   centos         "/bin/bash"   4 minutes ago   Exited (0) 3 minutes ago             optimistic_shtern
    bd1b8900c547   centos         "/bin/bash"   6 minutes ago   Exited (0) 5 minutes ago             cool_tesla
    cf6adbf1b506   bf756fb1ae65   "/hello"      5 hours ago     Exited (0) 5 hours ago               optimistic_darwin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    删除容器

    docker rm 容器id                 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
    docker rm -f $(docker ps -aq)   #删除所有的容器
    docker ps -a -q|xargs docker rm #删除所有的容器
    
    • 1
    • 2
    • 3

    启动和停止容器

    docker start 容器id          #启动容器
    docker restart 容器id        #重启容器
    docker stop 容器id           #停止当前运行的容器
    docker kill 容器id           #强制停止当前容器
    
    • 1
    • 2
    • 3
    • 4

    其他常用命令

    1. 日志的查看:
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs --help
    
    Usage:  docker logs [OPTIONS] CONTAINER
    
    Fetch the logs of a container
    
    Options:
          --details        Show extra details provided to logs
      -f, --follow         Follow log output
          --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
      -n, --tail string    Number of lines to show from the end of the logs (default "all")
      -t, --timestamps     Show timestamps
          --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
    
    常用:
    docker logs -tf 容器id
    docker logs --tail number 容器id #num为要显示的日志条数
    
    
    #docker容器后台运行,必须要有一个前台的进程,否则会自动停止
    #编写shell脚本循环执行,使得centos容器保持运行状态
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
    c703b5b1911ff84d584390263a35707b6024816e1f46542b61918a6327a570dc
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
    c703b5b1911f   centos    "/bin/sh -c 'while t…"   13 seconds ago   Up 10 seconds             pedantic_banach
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker logs -tf --tail 10 c703b5b1911f
    2020-12-27T03:34:07.255599560Z hi
    2020-12-27T03:34:12.257641517Z hi
    2020-12-27T03:34:17.259706294Z hi
    2020-12-27T03:34:22.261693707Z hi
    2020-12-27T03:34:27.262609289Z hi
    2020-12-27T03:34:32.267862677Z hi
    2020-12-27T03:34:37.270382873Z hi
    2020-12-27T03:34:42.272414182Z hi
    2020-12-27T03:34:47.274823243Z hi
    2020-12-27T03:34:52.277419274Z hi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    1. 查看容器中进程信息
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker top c703b5b1911f
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                11156               11135               0                   11:31               ?                   00:00:00            /bin/sh -c while true;do echo hi;sleep 5;done
    root                11886               11156               0                   11:43               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
    
    • 1
    • 2
    • 3
    • 4
    1. 查看容器的元数据
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker inspect 容器id
    
    • 1
    1. 进入当前正在运行的容器

    因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器修改配置

    方式一:

    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
    [root@c703b5b1911f /]# ls
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@c703b5b1911f /]# ps -ef      
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 03:31 ?        00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
    root       279     0  0 03:54 pts/0    00:00:00 /bin/bash
    root       315     1  0 03:56 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
    root       316   279  0 03:56 pts/0    00:00:00 ps -ef
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    方式二:

    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker attach c703b5b1911f
    
    • 1

    exec 和attach 命令两者的区别

    docker exec 进入容器后开启一个新的终端,可以在里面操作
    docker attach 进入容器正在执行的终端,不会启动新的进程

    1. 拷贝容器的文件到主机中

    docker cp 容器id:容器内路径 目的主机路径

    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
    [root@c703b5b1911f /]# cd home
    [root@c703b5b1911f home]# ls
    #touch 新建文件
    [root@c703b5b1911f home]# touch test.java
    [root@c703b5b1911f home]# ls
    test.java
    [root@c703b5b1911f home]# exit
    exit
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
    c703b5b1911f   centos    "/bin/sh -c 'while t…"   35 minutes ago   Up 35 minutes             pedantic_banach
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker cp c703b5b1911f:/home/test.java /home
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# ls /home
    hai  pan  test.java
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    结尾语

    Docker命令非常多,我们一次性可能也记不完,可以像学Linux命令一样,用到了相应命令再学习,Docker命令参考https://docs.docker.com/reference/

    想要系统学习Docker,推荐大家看一下B站《遇见狂神说》或者《尚硅谷》的Docker教程

    Docker 是目前非常流行的容器技术,很多公司在进行环境部署时都会使用到,下篇文章将给大家介绍一下Docker的实战经验,如编写Dockerfile文件构建镜像,使用Docker来安装Mysql,打包部署Web服务等实战教程

    如果你觉得这篇文章对你有帮助,麻烦点一下【赞】和【在看】

  • 相关阅读:
    docker 挂载宿主机文件到容器中
    MybatisPlus存储对象成MySQL的json数据类型
    easyexcel的使用
    基于STM32的循迹小车项目实战
    二进制安装docker
    Flutter 上字体的另类玩法:FontFeature
    扎实打牢数据结构算法根基,从此不怕算法面试系列之008 week01 02-08 通过常见算法,对常见的时间复杂度做梳理
    8.谈谈线程安全:活跃性问题(死锁、活锁、饥饿)
    SpringMVC如何处理表单提交与文件上传
    FL Studio 20音乐制作教程
  • 原文地址:https://blog.csdn.net/u011035397/article/details/125915048