Docker(一)【介绍以及安装】

一、Docker概述

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


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

项目部署的问题

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

环境配置是十分麻烦的,每一个机器都要部署环境(集群 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"

🌈 下载地址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

# 配置镜像加速,可以在
# https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 
# 这个地方获取自己的阿里云镜像,是免费的噢
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
	"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF

# 7.重新加载docker运行的配置文件
sudo systemctl daemon-reload

# 8.启动docker
sudo systemctl restart docker

# 9.开机时时自动启动
sudo systemctl enable docker

  • 安装成功
# 版本命令查看
docker version

在这里插入图片描述

# 运行hello-world
docker run hello-world

在这里插入图片描述

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

在这里插入图片描述

  • 卸载 docker
# 卸载docker依赖
yum remove docker-ce-cli container-io
# 删除资源
rm -rf /var/lib/docker

# /var/lib/docker   docker的默认工作路径

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		# 删除没有在用的镜像和容器

🌈 命令文档地址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

  • 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]    

在这里插入图片描述

  • 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
### 下载镜像 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

  • 查看镜像和删除镜像
### 查看镜像
[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)

在这里插入图片描述

容器命令

  • 说明:有了镜像才可以创建容器,Linux,下载一个CentOS镜像来测试
[root@vinjcent /]# docker pull centos

新建容器并启动

docker run [可选参数] image

# 参数说明
--name="Name"		# 容器名字 tomcat01  tomcat02,用来区分容器
-d					# 后台方式运行
-it					# 使用交互方式运行,进入容器查看内容
-p					# 指定容器的端口 -p 8080:8080
	-p ip:[主机端口]:[容器端口]
	-p [主机端口]:[容器端口]	# 常用
	-p [容器端口]
	[容器端口]
-P					# 随机指定端口

测试

在这里插入图片描述

# 测试  启动并进入容器
[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

在这里插入图片描述

  • 列出所有的运行的容器
[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
  • 退出容器
exit		# 直接退出容器并停止
Ctrl + P + Q	# 容器不停止退出
  • 删除容器
docker rm [容器id]		# 删除指定的容器  不能删除正在运行的容器,如果需要强制删除需要加上"-f"
docker rm -f $(docker ps -aq)	# 批量删除所有容器
docker ps -a -q|xargs docker rm # 删除所有的容器
  • 启动和停止容器的操作
docker start [容器id]		# 启动容器
docker restart [容器id]	# 重启容器
docker stop [容器id]		# 停止当前正在运行的容器
docker kill [容器id]		# 强制停止当前容器

1.8 常用的其它命令

  • 后台启动容器
# 命令 docker run -d 镜像名
[root@vinjcent /]# docker run -d centos

# 问题: docker ps 发现 centos 停止了
# docker 容器使用后台运行,就必须要有一个前台进程, docker 发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
  • 查看日志
[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

  • 查看容器中进程信息
[root@vinjcent /]# docker top 225ba423dae7
UID                 PID                 PPID                C                   STIME               TTY             
root                28576               28557               0                   22:04               ?               
root                28679               28576               0                   22:04               ?               
  • 查看镜像元数据
### 命令
# 测试
[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.9 进入当前正在运行的容器

# 通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

# 命令
docker exec -it [容器id] /bin/bash

在这里插入图片描述

# docker exec		# 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach		# 进入容器正在执行的终端,不会启动新的进程
  • 从容器内拷贝文件到主机上
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.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...]					# 截取容器停止时的退出状态值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naijia_OvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值