• 初始 Docker【介绍以及安装】


    Docker


    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

    一、Docker概述


    一款产品:开发–上线 两套环境:应用环境、应用配置

    项目部署的问题

    开发–运维:在我的电脑可以运行,他人的电脑不可运行

    环境配置是十分麻烦的,每一个机器都要部署环境(集群 Redis、ES、Hadoop…)

    发布一个项目 (jar + (Redis MySQL jdk ES…)),项目能不能带上环境安装打包

    java – apk – 发布(应用商店) – 安装即可用

    java – jar(环境) – 打包项目带上环境(镜像) – (Docker仓库:商店) – 下载我们发布的镜像 – 直接运行即可

    官网:https://www.docker.com/

    在这里插入图片描述

    Docker 的思想就来自于集装箱

    JRE – 多个应用(端口冲突)

    隔离:Docker核心思想,打包装箱!每一个箱子都是互相隔离的

    Docker 通过隔离机制,可以将服务器利用到极致

    1.1 Docker的历史


    2010年,几个搞IT的年轻人在美国成立了一家公司 dotCloud

    主要做一些 pass 的云计算服务,LXC有关的容器技术,容器技术被命名为Docker

    主要基于 PaaS(Platform as a Service,平台及服务)平台为开发者提供服务

    2013年,dotCloud 的 CEO Solomon Hykes决定把 dotCloud 内部使用的 Container 容器技术单独拿出来开源,2013年3月发布Docker的V0.1版本,并且基本保持每月一个版本的迭代速度,到了8月,Docker已经足够火爆,并广受好评,各种各样的技术论坛和技术峰会都开始热烈讨论与推荐Docker,这时Docker才只发布到V0.6版本

    2014年6月9日,Docker终于发布了V1.0版本,并举办了DockerCon2014大会,大会上来自google、ibm、Redhat、rackspace等公司的核心人物均发表了主题演讲,纷纷表示支持并加入Docker的阵营

    优点

    • 十分轻巧
    • 虚拟化技术
    • 隔离
    • 镜像运行
    • 内存消耗较小
    • 秒级启动
    • 开源

    1.2 Docker概念

    Docker 是基于 Go 语言开发的,开源项目

    官网:https://www.docker.com/

    在这里插入图片描述

    文档地址:https://docs.docker.com/

    仓库地址:https://hub.docker.com/

    1.3 Docker 能干吗

    之前的虚拟机技术

    在这里插入图片描述

    虚拟机技术缺点:

    • 资源占用十分的
    • 冗余步骤多
    • 启动慢

    容器化技术

    容器化技术不是模拟一个完整的操作系统

    在这里插入图片描述

    比较Docker 和虚拟机技术的不同

    • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
    • 容器内的应用直接运行在宿主机的内核中,容器中是没有自己的内核的,也没有虚拟硬件,即轻便了很多
    • 每个容器间是互相隔离的,每个容器内都有一个属于自己的文件系统。互不影响

    DevOps(开发、运维)

    应用更快速的交付和部署

    传统:一堆帮助文档,安装程序

    Docker:打包镜像发布测试,一键运行

    更便捷的升级和扩容

    使用了Docker之后,部署应用就和搭积木一样

    更简单的系统运维

    在容器化之后,我们的开发,测试环境都是高度一致的

    更高效的计算资源利用

    较少的内核使用更多的服务运行

    Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例!服务器的性能可以被压榨到机制

    1.4 Docker 的安装

    Docker 的基本组成

    在这里插入图片描述

    镜像(image):

    Docker 镜像就好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像 => run => tomcat 容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)

    容器(container)

    Docker 利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的

    启动,停止,删除,基本命令

    目前就可以把这个容器理解为就是一个简易的 Linux 系统

    仓库(repository)

    仓库就是存放镜像的地方

    仓库分为共有仓库私有仓库

    安装 Docker

    环境准备

    • Linux 的基础
    • CentOS 7
    • 使用 Xshell 链接远程服务器进行操作

    Linux 环境查看

    # 系统内核时 3.10 以上的
    [root@vinjcent ~]# uname -r
    3.10.0-1160.el7.x86_64
    
    # 系统版本
    [root@vinjcent ~]# 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
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    下载地址:https://docs.docker.com/get-docker/

    在这里插入图片描述

    卸载有关docker的文件

    在这里插入图片描述

    # 1.卸载旧的版本
    yum remove -y docker \
                        docker-client\
                        docker-client-latest\
                        docker-common docker-latest\
                        docker-latest-logrotate\
                        docker-logrotate docker-selinux\
                        docker-engine-selinux\
                        docker-engine
    # 2.需要的安装包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 3.设置镜像的仓库
    yum-config-manager \
    	--add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo		# 推荐使用阿里云镜像
        
    # 更新yum软件包索引
    yum makecache fast
    
    # 4.安装Docker   docker-ce  社区版   -ee  企业版
    yum -y install docker-ce docker-ce-cli containerd.io
    
    # 5.启动 Docker
    systemctl start docker
    
    # 6.查看 Docker 状态
    systemctl status docker
    
    
    • 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 version
    
    • 1
    • 2

    在这里插入图片描述

    # 运行hello-world
    docker run hello-world
    
    • 1
    • 2

    在这里插入图片描述

    # 查看下载的hello-world镜像
    [root@vinjcent ~]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    hello-world   latest    feb5d9fea6a5   8 months ago   13.3kB
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    卸载 docker

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

    1.5 回顾 HelloWorld 流程

    在这里插入图片描述

    1.6 底层原理

    Docker 是怎么工作的?

    Docker 是一个 Client - Server 结构系统,Docker 的守护进程运行在主机上。通过 Socket 从客户端访问

    DockerServer 接收到 Docker - Client 的指令,就会执行这个命令

    在这里插入图片描述

    Docker 为什么会比 VM 快?

    1、Docker 有着比虚拟机更少的抽象层

    2、Docker 利用的是宿主机的内核,vm 需要 Guest OS

    在这里插入图片描述

    所以说,新建一个容器的时候,Docker 不需要像虚拟机那样重新加载一个操作系统的内核,避免引导。虚拟机时加载 Guest OS,分钟级别的,而 Docker 是利用宿主机的操作系统,省略了这个复杂的过程,秒级运行

    Docker容器LXCVM
    虚拟化类型OS虚拟化OS虚拟化硬件虚拟化
    性能物理机性能物理机性能5%~20%损耗
    隔离性NS 隔离NS 隔离
    QoSCgroup 弱Cgroup 弱
    安全性
    Guest OS只支持 Linux只支持 Linux全部
    可迁移性

    1.7 Docker 的常用命令

    帮助命令

    docker version	# 显示 docker 的版本信息
    docker info		# 显示 docker 的系统信息,包括镜像和容器的数量
    docker 命令  --help	# 万能命令
    docker system prune		# 删除没有在用的镜像和容器
    
    • 1
    • 2
    • 3
    • 4

    命令文档地址:https://docs.docker.com/engine/reference/run/

    在这里插入图片描述

    镜像命令

    docker images

    在这里插入图片描述

    选项

    名称,简写默认描述
    --all,-a显示所有图像(默认隐藏中间图像)
    --digests显示摘要
    --filter,-f根据提供的条件过滤输出
    --format使用 Go 模板打印漂亮的图像
    --no-trunc不要截断输出
    --quiet,-q仅显示图像 ID
    [root@vinjcent /]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    hello-world   latest    feb5d9fea6a5   8 months ago   13.3kB
    
    ### 解释
    REPOSITORY		# 镜像的仓库源
    TAG				# 镜像的标签
    IMAGE ID		# 镜像的id
    CREATED			# 镜像的创建时间
    SIZE			# 镜像的大小
    
    ### 可选项
    [root@vinjcent /]# docker images --help
    
    Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
    
    List images
    
    Options:
      -a, --all             Show all images (default hides intermediate images)		# 列出所有镜像
          --digests         Show digests
      -f, --filter filter   Filter output based on conditions provided
          --format string   Pretty-print images using a Go template
          --no-trunc        Don't truncate output
      -q, --quiet           Only show image IDs			# 只显示镜像id
    
    
    • 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

    docker search 搜索镜像

    # 可以使用帮助命令
    [root@vinjcent /]# docker search --help
    
    Usage:  docker search [OPTIONS] TERM
    
    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
    
    # 可选项,通过收藏过滤
    [root@vinjcent /]# docker search mysql --filter=STARS=3000
    NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql     MySQL is a widely used, open-source relation…   12720     [OK]       
    mariadb   MariaDB Server is a high performing open sou…   4881      [OK]    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    MySQL

    在这里插入图片描述

    docker pull --help 下载命令

    [root@vinjcent /]# docker pull --help
    
    Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    
    Pull an image or a repository from a registry
    
    Options:
      -a, --all-tags                Download all tagged images in the repository
          --disable-content-trust   Skip image verification (default true)
          --platform string         Set platform if server is multi-platform capable
      -q, --quiet                   Suppress verbose output
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    ### 下载镜像 docker pull 镜像名:tag   tag为版本号
    # 如下载 mysql 镜像
    [root@vinjcent /]# docker pull mysql
    Using default tag: latest		# 如果不写 tag,默认就是latest最新版本
    latest: Pulling from library/mysql
    c1ad9731b2c7: Already exists 	# 分层下载,docker image 的核心 联合文件系统
    54f6eb0ee84d: Pull complete 
    cffcf8691bc5: Pull complete 
    89a783b5ac8a: Pull complete 
    6a8393c7be5f: Pull complete 
    af768d0b181e: Pull complete 
    810d6aaaf54a: Pull complete 
    2e014a8ae4c9: Pull complete 
    a821425a3341: Pull complete 
    3a10c2652132: Pull complete 
    4419638feac4: Pull complete 
    681aeed97dfe: Pull complete 
    Digest: sha256:548da4c67fd8a71908f17c308b8ddb098acf5191d3d7694e56801c6a8b2072cc		# 签名,防伪标志
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest		# 真实地址
    
    # docker pull mysql   ===>  docker pull docker.io/library/mysql:latest
    
    ### 指定版本下载,指定的版本必须是在官方文档中的版本
    [root@vinjcent /]# docker pull mysql:5.7
    5.7: Pulling from library/mysql
    c1ad9731b2c7: Already exists 
    54f6eb0ee84d: Already exists 
    cffcf8691bc5: Already exists 
    89a783b5ac8a: Already exists 
    6a8393c7be5f: Already exists 
    af768d0b181e: Already exists 
    810d6aaaf54a: Already exists 
    81fe6daf2395: Pull complete 
    5ccf426818fd: Pull complete 
    68b838b06054: Pull complete 
    1b606c4f93df: Pull complete 
    Digest: sha256:7e99b2b8d5bca914ef31059858210f57b009c40375d647f0d4d65ecd01d6b1d5
    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
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    查看镜像和删除镜像

    ### 查看镜像
    [root@vinjcent /]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    mysql         5.7       2a0961b7de03   2 weeks ago    462MB
    mysql         latest    65b636d5542b   2 weeks ago    524MB
    hello-world   latest    feb5d9fea6a5   8 months ago   13.3kB
    
    ### 删除镜像
    # 单个删除
    [root@vinjcent /]# docker rmi -f 2a0961b7de03		# 根据镜像id删除
    Untagged: mysql:5.7
    Untagged: mysql@sha256:7e99b2b8d5bca914ef31059858210f57b009c40375d647f0d4d65ecd01d6b1d5
    Deleted: sha256:2a0961b7de03c7b11afd13fec09d0d30992b6e0b4f947a4aba4273723778ed95
    Deleted: sha256:2fbd454d39f146da1c0747174089b983c1cf1da7a062384e5a71a94f540141ab
    Deleted: sha256:60ce6f6a8d71e66bd7ca1dae1f84a5faedfb993c1a0f352b90597b73eb94d56e
    Deleted: sha256:226a653f6ee6b0184d7a6304f29976dc89b0e54e2eec2027d0e3cf87cbe8f2af
    Deleted: sha256:218468cc1e9e25a831221617115da837798856793eb7decb3b089c8a1b5bd98f
    
    # 批量删除指定id镜像
    [root@vinjcent /]# docker rmi -f 容器id 容器id 容器id 容器id
    
    # 批量删除全部镜像
    [root@vinjcent /]# docker rmi -f $(docker images -aq)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

    容器命令

    说明:有了镜像才可以创建容器,Linux,下载一个CentOS镜像来测时学习

    [root@vinjcent /]# docker pull centos
    
    • 1

    新建容器并启动

    docker run [可选参数] image
    
    # 参数说明
    --name="Name"		# 容器名字 tomcat01  tomcat02,用来区分容器
    -d					# 后台方式运行
    -it					# 使用交互方式运行,进入容器查看内容
    -p					# 指定容器的端口 -p 8080:8080
    	-p ip:[主机端口]:[容器端口]
    	-p [主机端口]:[容器端口]	# 常用
    	-p [容器端口]
    	[容器端口]
    -P					# 随机指定端口
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    测试

    在这里插入图片描述

    # 测试  启动并进入容器
    [root@vinjcent /]# docker run -it centos /bin/bash
    [root@9ed34e2034df /]# ls		# 查看容器内部的centos 基础版本 很多命令都是不完善的
    bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    
    # 从容器中推出主机
    [root@9ed34e2034df /]# exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    列出所有的运行的容器

    [root@vinjcent /]# docker ps [命令]
    		# 列出当前正在运行的容器
    -a		# 列出当前正在运行的容器 + 带出历史运行过的热熔器
    -n=?	# 显示最近创建的容器
    -q		# 只显示容器的编号
    
    
    # 命令
    [root@vinjcent /]# docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    [root@vinjcent /]# docker ps -a
    CONTAINER ID   IMAGE          COMMAND       CREATED        STATUS                     PORTS     NAMES
    9ed34e2034df   centos         "/bin/bash"   2 hours ago    Exited (0) 2 minutes ago             flamboyant_kilby
    c0427f357a6b   feb5d9fea6a5   "/hello"      27 hours ago   Exited (0) 27 hours ago              vibrant_golick
    ffcd711ddecf   feb5d9fea6a5   "/hello"      8 weeks ago    Exited (0) 8 weeks ago               elastic_bassi
    [root@vinjcent /]# docker ps -aq
    9ed34e2034df
    c0427f357a6b
    ffcd711ddecf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    退出容器

    exit		# 直接退出容器并停止
    Ctrl + P + Q	# 容器不停止退出
    
    • 1
    • 2

    删除容器

    docker rm [容器id]		# 删除指定的容器  不能删除正在运行的容器,如果需要强制删除需要加上"-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.8 常用的其它命令

    后台启动容器

    # 命令 docker run -d 镜像名
    [root@vinjcent /]# docker run -d centos
    
    # 问题: docker ps 发现 centos 停止了
    # docker 容器使用后台运行,就必须要有一个前台进程, docker 发现没有应用,就会自动停止
    # nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查看日志

    [root@vinjcent /]# docker logs -f -t --tail [条数] [容器]
    
    # 容器,没有日志,需要自己编写一段脚本
    [root@vinjcent /]# docker run -d centos /bin/sh -c "while true;do echo vinjcent;sleep 1;done"
    4d8476f0bb140a04e214410c5e1fa5d27d72d27ddfb9a1a2698d94c297c889d6
    
    [root@vinjcent /]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
    4d8476f0bb14   centos    "/bin/sh -c 'while t…"   4 seconds ago   Up 3 seconds             busy_newton
    
    ### 显示日志
    # 参数
    # -tf 显示日志 + 时间戳
    # --tail [number] 要显示日志条数
    [root@vinjcent /]# docker logs -t -f --tail 10 4d8476f0bb14
    2022-06-14T13:58:39.356795996Z vinjcent
    2022-06-14T13:58:40.359859541Z vinjcent
    2022-06-14T13:58:41.363560885Z vinjcent
    2022-06-14T13:58:42.366830529Z vinjcent
    2022-06-14T13:58:43.370121873Z vinjcent
    2022-06-14T13:58:44.373577217Z vinjcent
    2022-06-14T13:58:45.377856761Z vinjcent
    2022-06-14T13:58:46.381298105Z vinjcent
    2022-06-14T13:58:47.385041650Z vinjcent
    2022-06-14T13:58:48.388769594Z vinjcent
    2022-06-14T13:58:49.392300637Z vinjcent
    2022-06-14T13:58:50.396323781Z vinjcent
    2022-06-14T13:58:51.400915426Z vinjcent
    2022-06-14T13:58:52.403562670Z vinjcent
    
    
    • 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

    查看容器中进程信息

    [root@vinjcent /]# docker top 225ba423dae7
    UID                 PID                 PPID                C                   STIME               TTY             
    root                28576               28557               0                   22:04               ?               
    root                28679               28576               0                   22:04               ?               
    
    • 1
    • 2
    • 3
    • 4

    查看镜像元数据

    ### 命令
    # 测试
    [root@vinjcent /]# docker inspect 225ba423dae7
    [
        {
            "Id": "225ba423dae77a8b56fa9c377cf658c8576ad998d5520ca1c8784b87fa495ce7",
            "Created": "2022-06-14T14:04:21.513093526Z",
            "Path": "/bin/sh",
            "Args": [
                "-c",
                "while true;do echo vinjcent;sleep 1;done"
            ],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 28576,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2022-06-14T14:04:21.790054038Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
            "ResolvConfPath": "/var/lib/docker/containers/225ba423dae77a8b56fa9c377cf658c8576ad998d5520ca1c8784b87fa495ce7/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/225ba423dae77a8b56fa9c377cf658c8576ad998d5520ca1c8784b87fa495ce7/hostname",
            "HostsPath": "/var/lib/docker/containers/225ba423dae77a8b56fa9c377cf658c8576ad998d5520ca1c8784b87fa495ce7/hosts",
            "LogPath": "/var/lib/docker/containers/225ba423dae77a8b56fa9c377cf658c8576ad998d5520ca1c8784b87fa495ce7/225ba423dae77a8b56fa9c377cf658c8576ad998d5520ca1c8784b87fa495ce7-json.log",
            "Name": "/quirky_elbakyan",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {},
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "CgroupnsMode": "host",
                "Dns": [],
                "DnsOptions": [],
                "DnsSearch": [],
                "ExtraHosts": null,
                "GroupAdd": null,
                "IpcMode": "private",
                "Cgroup": "",
                "Links": null,
                "OomScoreAdj": 0,
                "PidMode": "",
                "Privileged": false,
                "PublishAllPorts": false,
                "ReadonlyRootfs": false,
                "SecurityOpt": null,
                "UTSMode": "",
                "UsernsMode": "",
                "ShmSize": 67108864,
                "Runtime": "runc",
                "ConsoleSize": [
                    0,
                    0
                ],
                "Isolation": "",
                "CpuShares": 0,
                "Memory": 0,
                "NanoCpus": 0,
                "CgroupParent": "",
                "BlkioWeight": 0,
                "BlkioWeightDevice": [],
                "BlkioDeviceReadBps": null,
                "BlkioDeviceWriteBps": null,
                "BlkioDeviceReadIOps": null,
                "BlkioDeviceWriteIOps": null,
                "CpuPeriod": 0,
                "CpuQuota": 0,
                "CpuRealtimePeriod": 0,
                "CpuRealtimeRuntime": 0,
                "CpusetCpus": "",
                "CpusetMems": "",
                "Devices": [],
                "DeviceCgroupRules": null,
                "DeviceRequests": null,
                "KernelMemory": 0,
                "KernelMemoryTCP": 0,
                "MemoryReservation": 0,
                "MemorySwap": 0,
                "MemorySwappiness": null,
                "OomKillDisable": false,
                "PidsLimit": null,
                "Ulimits": null,
                "CpuCount": 0,
                "CpuPercent": 0,
                "IOMaximumIOps": 0,
                "IOMaximumBandwidth": 0,
                "MaskedPaths": [
                    "/proc/asound",
                    "/proc/acpi",
                    "/proc/kcore",
                    "/proc/keys",
                    "/proc/latency_stats",
                    "/proc/timer_list",
                    "/proc/timer_stats",
                    "/proc/sched_debug",
                    "/proc/scsi",
                    "/sys/firmware"
                ],
                "ReadonlyPaths": [
                    "/proc/bus",
                    "/proc/fs",
                    "/proc/irq",
                    "/proc/sys",
                    "/proc/sysrq-trigger"
                ]
            },
            "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/bd417e616c9350f6c83b33a29393f7009e0733c43fdd964f6f3715af347bbc6d-init/diff:/var/lib/docker/overlay2/7a6824197cd5c69855ee6ae929dd7fb9eb3773080d16a86cc17199fcea237f26/diff",
                    "MergedDir": "/var/lib/docker/overlay2/bd417e616c9350f6c83b33a29393f7009e0733c43fdd964f6f3715af347bbc6d/merged",
                    "UpperDir": "/var/lib/docker/overlay2/bd417e616c9350f6c83b33a29393f7009e0733c43fdd964f6f3715af347bbc6d/diff",
                    "WorkDir": "/var/lib/docker/overlay2/bd417e616c9350f6c83b33a29393f7009e0733c43fdd964f6f3715af347bbc6d/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [],
            "Config": {
                "Hostname": "225ba423dae7",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/sh",
                    "-c",
                    "while true;do echo vinjcent;sleep 1;done"
                ],
                "Image": "centos",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {
                    "org.label-schema.build-date": "20210915",
                    "org.label-schema.license": "GPLv2",
                    "org.label-schema.name": "CentOS Base Image",
                    "org.label-schema.schema-version": "1.0",
                    "org.label-schema.vendor": "CentOS"
                }
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "27b6231180fb44f4ac6f15743619308ad2ab1d0692d2ff772daccbb4c5296dc2",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {},
                "SandboxKey": "/var/run/docker/netns/27b6231180fb",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "e71be273d72baa53f78105199d45b7471a7faab0dd8be4084443598ff6b40366",
                "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:02",
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "5c78d917314066e9abeddb8ff3d39a1e2a709937e0dce02315d6f5267868e1ab",
                        "EndpointID": "e71be273d72baa53f78105199d45b7471a7faab0dd8be4084443598ff6b40366",
                        "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    
    
    • 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
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211

    在这里插入图片描述

    1.9 进入当前正在运行的容器

    # 通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
    
    # 命令
    docker exec -it [容器id] /bin/bash
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    # docker exec		# 进入容器后开启一个新的终端,可以在里面操作(常用)
    # docker attach		# 进入容器正在执行的终端,不会启动新的进程
    
    • 1
    • 2

    从容器内拷贝文件到主机上

    docker cp [容器id]:容器内路径 目的的主机
    
    # 查看当前主机目录下
    [root@vinjcent home]# ls
    totoro  vinjcent.java
    [root@vinjcent home]# docker ps
    CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
    38c0bf42df15   centos    "/bin/bash"   About a minute ago   Up About a minute             lucid_shannon
    # 进入 docker 容器内部
    [root@vinjcent home]# docker attach 38c0bf42df15
    [root@38c0bf42df15 /]# cd /home 
    [root@38c0bf42df15 home]# ls
    # 在容器内新建一个文件夹
    [root@38c0bf42df15 home]# touch test.java
    [root@38c0bf42df15 home]# exit
    exit
    [root@vinjcent home]# docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    [root@vinjcent home]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                      PORTS     NAMES
    38c0bf42df15   centos    "/bin/bash"   2 minutes ago   Exited (0) 19 seconds ago             lucid_shannon
    # 将这个文件拷贝出来到主机上
    [root@vinjcent home]# docker cp 38c0bf42df15:/home/test.java /home
    [root@vinjcent home]# ls
    test.java  totoro  vinjcent.java
    
    # 拷贝是一个手动的过程,未来使用 -v 卷的技术,推荐使用数据卷技术,可以实现自动同步主机和容器的目录
    
    • 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.10 小结

    在这里插入图片描述

    常用 Docker 命令

    命令文档

    docker attach [OPTIONS] CONTAINER		# 当前 shell 下 attach 链接指定运行环境
    docker build [OPTIONS] PATH | URL | -	# 通过 Dockerfile 定制镜像
    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]	# 提交档期那容器为新的镜像
    docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-		# 从容器中拷贝指定文件或者目录到宿主机中
    docker create [OPTIONS] IMAGE [COMMAND] [ARG...]		# 创建一个新的容器,同run,但不启动容器
    docker diff CONTAINER		# 查看 docker 容器变化
    docker events [OPTIONS]		# 从 docker 服务获取容器实时事件
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]		# 在已存在的容器上运行命令
    docker export [OPTIONS] CONTAINER			# 导出容器的内容流作为一个 tar 归档文件[对应import]
    docker history [OPTIONS] IMAGE				# 展示一个镜像的形成史
    docker image COMMAND			# 列出系统当前镜像
    docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]	# 从 tar 包中的内容创建一个新的文件系统映像[对应export]
    docker info [OPTIONS]		# 显示系统相关信息
    docker inspect [OPTIONS] NAME|ID [NAME|ID...]			# 查看容器详细信息
    docker kill [OPTIONS] CONTAINER [CONTAINER...]			# kill 指定 docker 容器
    docker load [OPTIONS]		# 从一个 tar 包中加载一个镜像[对应save]
    docker login [OPTIONS] [SERVER]				# 注册或者登录一个 docker 源服务器
    docker logout [SERVER]		# 从当前 Docker register 退出
    docker logs [OPTIONS] CONTAINER				# 输出当前容器日志信息
    docker port CONTAINER [PRIVATE_PORT[/PROTO]]			# 查看映射端口对应的容器内部源端口
    docker pause CONTAINER [CONTAINER...]					# 暂停容器
    docker ps [OPTIONS]			# 列出容器列表
    docker pull [OPTIONS] NAME[:TAG|@DIGEST]				# 从 docker 镜像源服务器拉取指定镜像或者库镜像
    docker push [OPTIONS] NAME[:TAG]						# 推送指定镜像或者库镜像至 docker 源服务器
    docker restart [OPTIONS] CONTAINER [CONTAINER...]		# 重启运行的容器
    docker rm [OPTIONS] CONTAINER [CONTAINER...]			# 移除一个或者多个容器
    docker rmi [OPTIONS] IMAGE [IMAGE...]					# 移除一个或多个镜像[无容器使用该镜像才可删除,否则需要删除相关容器才可继续或 -f 强制删除]
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]			# 创建一个新的容器并运行一个命令
    docker save [OPTIONS] IMAGE [IMAGE...]					# 保存一个镜像为一个 tar 包[对应 load]
    docker search [OPTIONS] TERM							# 在 docker hub 中搜索镜像
    docker start [OPTIONS] CONTAINER [CONTAINER...]			# 启动容器
    docker stop [OPTIONS] CONTAINER [CONTAINER...]			# 停止容器
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]		# 给源中镜像打标签
    docker top CONTAINER [ps OPTIONS]						# 查看容器中运行的进程信息
    docker unpause CONTAINER [CONTAINER...]					# 取消暂停容器
    docker version [OPTIONS]								# 查看 docker 版本号
    docker wait CONTAINER [CONTAINER...]					# 截取容器停止时的退出状态值
    
    • 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
  • 相关阅读:
    GitHub 毕业年鉴「GitHub 热点速览 v.22.20」
    phpStorm Xdebug调试 加FireFox浏览器
    KT148A语音芯片按键版本一对一触发播放常见的问题集锦FAQ_V4
    【THM】Exploit Vulnerabilities(利用漏洞)-
    数据输出(进制、小数位,左对齐右对齐
    QT day1登录界面设计
    CentOS7.9安装elasticsearch-8.3.1和window 10安装elasticsearch-8.3.1
    Tomcat安装 + 引入依赖
    自然语言处理基础
    【入门-03】时钟系统
  • 原文地址:https://blog.csdn.net/Wei_Naijia/article/details/125542206