docker学习笔记

101 阅读13分钟

声明:根据b站up主狂神说java的视频来记录的学习笔记,视频讲解非常详细,有时间可以去观看狂神的视频 环境:Ubuntu20.24

Docker概念

Docker为什么出现?

一个产品:开发 ----> 上线 两套环境 应用环境(django或者数据库) 应用配置(端口或者连接)

角色: 开发人员 --- 运维人员

问题:我在我的电脑上可以正常运行

原因:配置十分繁琐,每一个机器都要部署环境(集群)

解决:

比如发布一个项目 jar+环境(mysql/redis/jdk) ,此时将项目和环境同时打包,docker作用就是同时打包

例子:

Python --- apk ---- 发布(应用商城)---- 个人在应用商城下载即可用

Python ---镜像(打包的项目和环境) ---- Docker仓库(商店) ----- 下载发布的镜像直接使用

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

Docker历史

2010年左右 几个年轻人在美国创办了一家公司 dotcloud

主要做云计算服务,核心技术就是容器技术

13年左右将容器技术进行了开源,从此火了起来,广为流传

为什么会火

容器技术出现之前一直用的虚拟机(同属于虚拟技术)

vm: linux centos虚拟一个镜像(相当于一个电脑) 多个系统需要开启多个虚拟机  占用空间几个G 开启需要几分钟
容器: linux centos 隔离  镜像(linux核心部分几M+环境mysql+django...)  十分小巧 直接启动镜像就可以

官网:www.docker.com/

文档:docs.docker.com/ 超级详细

Docker能做什么?

之前的虚拟技术利用虚拟机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRxHYaTi-1635325945880)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024122347846.png)]

虚拟机缺点

  • 模拟一个完整的操作系统资源占用率非常大

  • 启动速度比较慢

  • 对于小型任务冗余功能比较多

容器技术

并不是模拟一个完整的操作系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DlCZWqfq-1635325945885)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024123152450.png)]

虚拟机技术与容器技术比较

  • 虚拟机技术虚拟的是整个操作系统,也虚拟了硬件,相对资源占用率比较大
  • 容器技术虚拟的是核心内容,并没有虚拟硬件也没有虚拟内核,容器的程序运行在宿主机内核上,所以轻便
  • 容器间互相隔离,每个容器内都有自己的文件系统互相独立

DevOps(开发、运维)

更快速的实现交付和部署

传统:一推文档,逐个安装

docker:一起打包环境和项目

更快速的实现更新和扩容

更新镜像,易扩展

更简单的运维

开发和测试环境高度一致

更好的资源利用

隔离性好,同一个主机可以运行多个容器

Docker基本组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7MheWlgn-1635325945889)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024153632984.png)]

镜像(image):

镜像类似于一个模板,通过这个模板可以创建容器服务,tomcat镜像 ==> run ==> tomcat01容器(提供服务),通过这个镜像可以创建多个容器(所有的服务都是运行在容器之中)

容器(container)

通过镜像可以创建容器,一个容器可以独立运行一组或者一个应用

简单的理解可以理解为一个mini的linux

仓库(registry)

存储镜像的地方

仓库分为私有仓库和公有仓库

Docker安装

安装Docker

前期准备

1、有一定的linux基础,会使用基本命令

2、基于Ubuntu20.04安装docker

查看环境

# 系统内核版本
keep@keep:~/Desktop$ sudo uname -a
Linux keep 5.11.0-37-generic #41~20.04.2-Ubuntu SMP Fri Sep 24 09:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

# 系统配置
keep@keep:~/Desktop$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

根据docker官方文档来逐步安装:docs.docker.com/

1、卸载之前的旧版本

sudo apt-get remove docker docker-engine docker.io containerd runc

2、安装配置仓库

# 更新资源
 sudo apt-get update
# 安装相关库
 sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
    
    
# 添加GPG秘钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
# 添加仓库稳定配置
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 

3、安装docker

sudo apt-get update
# 此处包括docker客户端 docker核心  docker客户端 docker容器    ce社区版  ee 企业版
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 也可以安装指定版本
#sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

4、使用docker查看是否安装成功

docker version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTqSKuwr-1635325945892)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024170620069.png)]

5、测试hello_world

sudo docker run hello-world

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u3DRf2wD-1635325945894)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024170832815.png)]

6、查看镜像

sudo docker images

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3fQLFUB6-1635325945896)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024171028941.png)]

了解:卸载docker

# 卸载依赖
 sudo apt-get purge docker-ce docker-ce-cli containerd.io

# 卸载配置文件
 sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd

# /var/lib/docker配置文件所在位置

阿里云加速器

1、登录阿里云

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87JYXpg5-1635325945898)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024172154158.png)]

2、找到阿里云容器镜像服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uwksmIH6-1635325945899)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024172214541.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNwD9r9t-1635325945900)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024172252585.png)]

3、选择系统添加配置

# 创建文件
sudo mkdir -p /etc/docker
# 指定阿里云网址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://9g6gex19.mirror.aliyuncs.com"]
}
EOF
# 重新加载镜像以及docker
sudo systemctl daemon-reload
sudo systemctl restart docker

回顾hellworld流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vgWisCe-1635325945902)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211024182345757.png)]

Docker底层原理

Docker是怎么样工作的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVjAlTif-1635325945903)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211026144353010.png)]

docker是CS架构,client-Server模式,Docker守护进程运行在主机上。通过socket从客户端访问,DockerServer接收到客户端DockerClient的指令就会执行这个命令

Docker为什么比VM快?

1、docker有更小的抽象层

2、docker利用宿主机的内核,Vm利用的是guestos.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ITFWQ0N-1635325945904)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211026144619042.png)]

docker在新建一个容器的时候,docker不需要像VM虚拟机一样加载一个操作系统内核(guestOS),而是利用宿主机上的操作系统,省略复杂的过程

Docker常用命令

帮助命令

docker version      # 显示docker版本号
docker info         # 显示详细信息
docker 命令 --help   # 查看帮助文档

帮助文档官方地址:docs.docker.com/engine/refe…

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DrVOQbRz-1635325945905)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211026152200899.png)]

镜像命令

docker images 查看镜像

keep@keep:~/Desktop$ sudo docker images
[sudo] password for keep: 
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   4 weeks ago   13.3kB

# 解释
REPOSITORY       # 镜像仓库源
TAG              # 镜像标签
IMAGE ID         # 镜像id
CREATED          # 创建时间
SIZE             # 镜像大小

# 可选项
keep@keep:~/Desktop$ sudo docker images --help
.....
  -a, --all            # 显示所有镜像
  -q, --quiet          # 只显示镜像ID
  

docker search 搜索镜像

keep@keep:~/Desktop$ sudo docker search mysql   # 查询镜像
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11587     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4407      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   856                  [OK]
percona                           Percona Server is a fork of the MySQL relati… 
........

# 可选项  通过搜藏来过滤
-- filter=STARS=3000 # 搜出来的镜像是STARS大于3000的
keep@keep:~/Desktop$ sudo docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   11587     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4407      [OK] 



docker pull 下载镜像

# 下载镜像 docker pull 镜像名[:tag]
keep@keep:~/Desktop$ sudo docker pull mysql
Using default tag: latest  # 默认是latest最新版本
latest: Pulling from library/mysql
b380bbd43752: Pull complete   # 分层下载 docker image 的核心 联合文件系统
f23cbf2ecc5d: Pull complete 
30cfc6c29c0a: Pull complete 
b38609286cbe: Pull complete 
8211d9e66cd6: Pull complete 
2313f9eeca4a: Pull complete 
7eb487d00da0: Pull complete 
4d7421c8152e: Pull complete 
77f3d8811a28: Pull complete 
cce755338cba: Pull complete 
69b753046b9f: Pull complete 
b2e64b0ab53c: Pull complete 
Digest: sha256:6d7d4524463fe6e2b893ffc2b89543c81dec7ef82fb2020a1b27606666464d87
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址

# 下载指定版本
keep@keep:~/Desktop$ sudo docker pull mysql:5.7 
5.7: Pulling from library/mysql
b380bbd43752: Already exists 
f23cbf2ecc5d: Already exists 
30cfc6c29c0a: Already exists 
b38609286cbe: Already exists 
8211d9e66cd6: Already exists 
2313f9eeca4a: Already exists 
7eb487d00da0: Already exists 
a71aacf913e7: Pull complete 
393153c555df: Pull complete 
06628e2290d7: Pull complete 
ff2ab8dac9ac: Pull complete 
Digest: sha256:2db8bfd2656b51ded5d938abcded8d32ec6181a9eae8dfc7ddf87a656ef97e97
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi 删除镜像

keep@keep:~/Desktop$ # sudo docker rmi -f 容器ID  # 删除指定容器
keep@keep:~/Desktop$ # sudo docker rmi -f 容器ID  容器ID 容器ID # 删除指定容器
keep@keep:~/Desktop$ # sudo docker rmi -f $(sudo docker images -aq) # 删除指定容器

keep@keep:~/Desktop$ sudo docker images 
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
mysql         5.7       938b57d64674   7 days ago    448MB
mysql         latest    ecac195d15af   7 days ago    516MB
hello-world   latest    feb5d9fea6a5   4 weeks ago   13.3kB
keep@keep:~/Desktop$ sudo docker rmi 938b57d64674 # 删除指定id镜像
Untagged: mysql:5.7
Untagged: mysql@sha256:2db8bfd2656b51ded5d938abcded8d32ec6181a9eae8dfc7ddf87a656ef97e97
Deleted: sha256:938b57d64674c4a123bf8bed384e5e057be77db934303b3023d9be331398b761
Deleted: sha256:d81fc74bcfc422d67d8507aa0688160bc4ca6515e0a1c8edcdb54f89a0376ff1
Deleted: sha256:a6a530ba6d8591630a1325b53ef2404b8ab593a0775441b716ac4175c14463e6
Deleted: sha256:2a503984330e2cec317bc2ef793f5d4d7b3fd8d50009a4f673026c3195460200
Deleted: sha256:e2a4585c625da1cf4909cdf89b8433dd89ed5c90ebdb3a979d068b161513de90

Docker容器命令

前提:这里先下载一个CentOS镜像来测试学习,在CentOS中运用容器

sudo docker pull centos

新建容器并使用

docker run [可选项] image

# 参数说明
--name="Name" 容器名字 tomcat1 tomcat2 用来区分容器
-d            后台方式运行
-it           使用交互方式运行 进入容器查看内容
-p            指定容器的端口 -p 8080:8080
	-p  ip:主机端口:容器端口
	-p  主机端口:容器端口(常用)
	-p  容器端口
-p            随机指定端口
	
# 测试
keep@keep:~/Desktop$ sudo docker run -it  centos /bin/bash
[root@2197375f05f2 /]# ls   # 查看内部的CentOS,基础版本,很多命令都不是完善的
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 从容器中退出
[root@2197375f05f2 /]# exit
exit
keep@keep:/$ ls
bin    dev   lib    libx32      mnt   root  snap      sys  var
boot   etc   lib32  lost+found  opt   run   srv       tmp
cdrom  home  lib64  media       proc  sbin  swapfile  usr

列出所有的运行容器

# docker ps 命令
	   # 列出所有当前运行的容器
-a     # 列出所有运行以及运行过的容器
-n=?  # 显示最近创建的容器
-q     #只显示容器编号

keep@keep:/$ # sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
keep@keep:/$ # sudo docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                       PORTS     NAMES
2197375f05f2   centos        "/bin/bash"   4 minutes ago   Exited (127) 2 minutes ago             zen_margulis
09a189464eb0   hello-world   "/hello"      2 days ago      Exited (0) 2 days ago                  admiring_jepsen

退出容器

exit           #直接退出容器
Ctrl + P + Q   # 退出不停止

sudo docker attach 容器id  # 重新进入没有停止的容器

删除容器

docker rm  容器id   # 删除指定容器,默认运行的容器无法删除
sudo docker rm  -f  $(sudo docker ps -aq)  # 删除所有容器
sudo docker ps  -a -q | xargs rm  删除所有容器

启动和停止容器

docker start 容器id   # 启动容器
docker restart 容器id # 重启容器
docker stop  容器id   # 停止容器
docker kill 容器id    # 强制停止容器

常用的其他命令

后台启动容器

# 通过docker run -d 镜像名
keep@keep:/$ sudo docker run -d centos

# 问题docker ps 发现CentOS 停止了

# 常见的坑:docker 容器使用后台运行 就必须要有一个前台进行,docker发现没有应用,就会停止运行
# Nginx 容器启动后,发现自己没有提供服务,就会立即停止,就是没有程序了

查看日志

docker logs -f -t --tail 容器

# 编写一个自动运行的脚本

docker run -d centos /bin/sh -c "while true;do echo bcm; sleep 1;done"

# 显示日志
-tf     # 显示日志
--tail number # 显示日志条数 
sudo docker logs -tf --tail 10 容器id

查看容器中的进程信息 ps

keep@keep:/$ sudo docker top 86e6539b983f
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                6179                6161                31                  11:13               ?                   00:03:37            /bin/sh -c 

查看容器的原数据

# 命令 docker inspect 容器id
keep@keep:~/Desktop$ sudo docker inspect 86e6539b983f
[
    {
        "Id": "86e6539b983f0c2242e9a2360e5ba5500c939b1c19cf01d55882dc5378f6e567",
        "Created": "2021-10-27T03:13:43.703275785Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo bcm; sheep 1;done"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 137,
            "Error": "",
            "StartedAt": "2021-10-27T03:13:44.201922661Z",
            "FinishedAt": "2021-10-27T03:25:46.775231237Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/86e6539b983f0c2242e9a2360e5ba5500c939b1c19cf01d55882dc5378f6e567/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/86e6539b983f0c2242e9a2360e5ba5500c939b1c19cf01d55882dc5378f6e567/hostname",
        "HostsPath": "/var/lib/docker/containers/86e6539b983f0c2242e9a2360e5ba5500c939b1c19cf01d55882dc5378f6e567/hosts",
        "LogPath": "/var/lib/docker/containers/86e6539b983f0c2242e9a2360e5ba5500c939b1c19cf01d55882dc5378f6e567/86e6539b983f0c2242e9a2360e5ba5500c939b1c19cf01d55882dc5378f6e567-json.log",
        "Name": "/gracious_engelbart",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "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/e40cf6f7f715126d04ec55a1970e021b1a2a306e1dce3cdbe8e76fdfd21182a5-init/diff:/var/lib/docker/overlay2/96caa539b21b898c36baeb20e3becdd0122963e652180fe354dfb40ca2b88219/diff",
                "MergedDir": "/var/lib/docker/overlay2/e40cf6f7f715126d04ec55a1970e021b1a2a306e1dce3cdbe8e76fdfd21182a5/merged",
                "UpperDir": "/var/lib/docker/overlay2/e40cf6f7f715126d04ec55a1970e021b1a2a306e1dce3cdbe8e76fdfd21182a5/diff",
                "WorkDir": "/var/lib/docker/overlay2/e40cf6f7f715126d04ec55a1970e021b1a2a306e1dce3cdbe8e76fdfd21182a5/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "86e6539b983f",
            "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 bcm; sheep 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": "8dcc306d7666cb394948421ba00b56f61011ee43a1d36226ebb3889976de267f",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/8dcc306d7666",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "a4713100cbde851032b0eceb3f4733d32d161f9ee26d51cc91a3d4acd88c80d6",
                    "EndpointID": "",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前正在运行的容器

# 命令: 

# 方式一:docker exec -it 容器id 运行位置

# 测试
keep@keep:~/Desktop$ sudo docker exec -it 23c2a140a772 /bin/bash
[root@23c2a140a772 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 方式二:docker attach 容器id
# 测试
keep@keep:~/Desktop$ sudo docker attach 23c2a140a772
[root@23c2a140a772 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var


# docker exec -it 容器id 运行位置     进入容器后开启一个端口,可以在里面操作
# docker attach 容器id			   进入容器正在执行的终端

从容器内拷贝文件到容器外

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

# 进入容器
keep@keep:~/Desktop$ sudo docker attach 23c2a140a772
[root@23c2a140a772 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#新建一个测试文件
[root@23c2a140a772 /]# cd home/
[root@23c2a140a772 home]# touch bcm.py
[root@23c2a140a772 home]# ls
bcm.py
[root@23c2a140a772 home]# read escape sequence

# 拷贝文件到容器外
keep@keep:~/Desktop$ sudo docker cp 23c2a140a772:/home/bcm.py ./
keep@keep:~/Desktop$ ls
bcm.py  dump.rdb  redis-4.0.9.tar.gz

# 拷贝是一个手动的,之后会通过数据卷的技术实现自动同步

小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i2DatS2I-1635325945906)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211027170155106.png)]