声明:根据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...) 十分小巧 直接启动镜像就可以
文档: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)]