学习视频来自:【狂神说Java】Docker最新超详细版教程
1 学习内容概要
Docker概述
Docker安装
Docker命令
· 容器命令
· 操作命令
Docker镜像
容器数据卷
DockerFile(微服务构建成镜像)
Docker网络原理(Docker是基于网络的)
IDEA整合Docker(将微服务整合到系统,到此时得到一个单机版docker)
Docker Compose(集群同时编排管理多个服务)
Docker Swarm(集群的管理)
CI/CD jenkins(持续集成和持续部署)
2 docker概述
docker出现的原因:
开发和上线的环境不同,应用环境应用配置,出现开发和运维的矛盾:我在我这儿可以运行,在别人那儿就不能运行,版本更新导致服务失效等。
开发和运维之间需要很强的沟通,于是开发即运维
环境配置问题:麻烦,每一台机器需要配置环境(radis,mysql集群,hadoop集群等)费时费力麻烦,还不能解决跨平台的问题
-->发布一个项目能不能带上环境安装打包
传统方式:开发给jar包,运维来做部署的事情
现在:开发打包部署上线,一套流程做成
docker提出了解决方案
java--apk--发布--某人使用--安装即可用。
java--jar(环境)--打包项目带上环境(镜像)--docker仓库:商店--下载我们发布的项目--直接运行即可。
JRE 可能有多个应用使用,可能会造成端口占用冲突,会报错,出现配置错误连接错误等,原来都是交叉共用的。
docker方案实现的核心思想是隔离,打包隔离,在logo中每个箱子是相互隔离的。同时放在系统中不会产生冲突。
docker可以使得服务器的使用效率利用到极致。
3 docker的历史
2010年 美国几个it年轻人成立了 dotCloud,做一些pass的云计算服务,LXC有关的容器技术,他们将自己的技术(容器化技术)命名为docker,将此技术开源下去(因为公司刚刚开始,docker刚刚诞生没有引起行业的主义,不开源公司就活不下去)。2013年docker开源,越来越多的人发现了docker的优点,变得十分火。
IaaS是Infrastructure as a server的缩写,意思是基础设施即服务。又云端公司把IT环境的基础设施建设好, 然后直接对外出租硬件服务器或者虚拟机。
PaaS是Platform as a Server的缩写,意思是平台即服务,即把运行用户所需的软件的平台作为服务出租。
SaaS是Software as a Server的缩写,意思是软件即服务。把软件租出去,用户连安装都不需要了。
DaaS是Date as a Server的缩写,意思是数据即服务。云端公司负责建立全部的IT环境,收集用户需要的基 础数据并且做数据分析,最后对分析结构或者算法提供编程接口,让数据成为服务。
火的原因?docker十分的轻巧!进行比较:
在容器技术出现之前使用的是虚拟机技术
虚拟机:在windows中安装Vmware,通过这个软件可以虚拟出来一台或者多台电脑!虚拟机十分的笨重,使用空间很大,很麻烦,做多个隔离的话就需要开启多个虚拟机,很笨重。得到的虚拟机之间是隔离的。
docker的隔离,用的是一种镜像机制,只是隔离的是最核心的环境而不是一个完整的虚拟机(最核心的环境4m+jdk+mysql)运行该镜像就可以了,十分的小巧。
虚拟机:几个G,开启分钟级
docker:几个M、KB,秒级启动
虚拟机是一种虚拟化技术,docker也是一种虚拟化技术。
docker是基于Go语言开发的开源项目
文档:docker文档特别详细
4 docker 能做什么
虚拟机技术
虚拟化技术的缺点:
1、资源占用十分多
2、冗余步骤多
3、启动很慢
容器化技术
容器化技术不是模拟的一个完整的操作系统
比较Docker和虚拟化技术的不同
-
传统虚拟机,虚拟出一个硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
-
容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们使用的硬件,所以相对就轻便了
-
每个容器之间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响
DevOps(开发、运维)
应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:一键运行打包镜像,发布测试
更便捷的升级和扩缩容
使用了Docker之后,我们的部署应用就像搭积木一样,将各个部件进行堆积
项目打包为一个镜像,方便扩展 服务器A-->服务器B
一个服务器上可以运行多个容器,并且容器之间也可以交互
更简单的运维系统
在容器化之后,我们的开发和测试环境是高度一直
更高效的计算资源利用
一个服务器可以运行多个应用
Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例
服务器的性能可以被更高效的利用
5 Docker中的名词概念
docker的基本组成
左边可以理解为客户端,中间理解为服务器,右边理解为仓库
镜像(image):
docker镜像类似于一种模板,可以通过这个模板来创建容器服务,tomcat镜像==>run==>tomcat01容器(提供服务)
通过这个镜像可以创建多个容器(最终服务或者项目运行就是在容器中的)
容器(container):
Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。
启动、停止,删除等基本命令来操作
可以把这个容器的理解为一个简易的linux系统
仓库(repository):
仓库就是存放镜像的地方
分为公有仓库和私有的仓库
公有:
Docker Hub等(默认是国外的)
阿里云、华为云等都有容器服务(国内的话就要配置镜像加速,不然从国外特别慢)
6 docker安装
环境查看
# 系统内核是3.10以上
[root@iZuf63ifc44ezcc77ll054Z /]# uname -r
3.10.0-957.21.3.el7.x86_64
# 系统版本
[root@iZuf63ifc44ezcc77ll054Z /]# 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"
安装
# 先卸载旧的docker
[root@VM-4-12-centos ~]# yum remove docker \
> docker-client \
> docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
> docker-logrotate \
> docker-selinux \
> docker-engine-selinux \
> docker-engine \
> docker-ce
Loaded plugins: fastestmirror, langpacks
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-selinux
No Match for argument: docker-engine-selinux
No Match for argument: docker-engine
No Match for argument: docker-ce
No Packages marked for removal
# 需要的安装包
yum install -y yum-untils
# 设置镜像的仓库为阿里云的镜仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 结果如下
[root@VM-4-12-centos ~]# yum-config-manager \
> --add-repo \
> http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
# 更新yum软件包索引
yum makecache fast
# 安装docker相关的依赖 docker-ce 社区版 docker-ee 企业版
yum install docker-ce docker-ce-cli containerd.io
# 启动docker
systemctl start docker
# 使用docker version测试是否安装成功
docker version
结果如下图所示
# hello-world
docker run hello-world
# 查看一下下载的hello-world镜像是否存在
docker images
# 了解卸载
# 1 卸载依赖
yum remove docker-ce docker-ce-cli container.io
# 2 删除资源
rm -rf /var/lib/docker
# /var/lib/docker是docker的默认工作路径
7 配置镜像加速(这里使用的腾讯云)
腾讯云官方给出的镜像加速教程,以CentOS 7 为例
# 执行以下命令,打开 /etc/docker/daemon.json 配置文件。
vim /etc/docker/daemon.json
# 按 i 切换至编辑模式,添加以下内容,并保存。
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
# 执行以下命令,重启 Docker 即可。
sudo systemctl restart docker
8 Run的流程和Docker原理
docker run的流程
用之前hello-world的例子来理解
首先在本地寻找hello-world镜像,发现本地没有这个镜像,于是到Docker Hub上拉取(pull)镜像,发现有hello-world镜像供下载,于是下载到本地并运行,在界面打印出Hello from docker!
Docker的底层原理
docker是如何工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问
DockerServer接收到Docker-Client的指令,就会执行这个指令。
Docker为什么比VM快?
1、Docker有着比虚拟机更少的抽象层
2、Docker利用的是宿主机的内核,VM需要的是Guest OS
在新建一个容器的时候,docker不需要像虚拟机一项重新加载一个操作系统的内核,避免引导性的操作,虚拟机加载Guest OS,分钟级;而Docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级。
docker具有很强的可迁移性。
9 镜像的常用命令
帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 help # 万能帮助命令
帮助文档的位置
镜像命令
docker images 查看所有本地主机上的镜像
[root@VM-4-12-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 10 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像大小
# 可选项
[root@VM-4-12-centos ~]# 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
# 常用-a和-q,显示所有 只显示id
docker search 搜索镜像
在docker hub网页中可以搜索镜像
例如网页中搜索和查看mysql
[root@VM-4-12-centos ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12976 [OK]
mariadb MariaDB Server is a high performing open sou… 4972 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 594 [OK]
percona Percona Server is a fork of the MySQL relati… 583 [OK]
······
# 可选项,通过搜索来过滤
--filter=STARS=3000 #搜索出来的镜像的STAR大于3000的
[root@VM-4-12-centos ~]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12976 [OK]
mariadb MariaDB Server is a high performing open sou… 4972 [OK]
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
[root@VM-4-12-centos ~]# 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
[root@VM-4-12-centos ~]# docker pull mysql
Using default tag: latest #如果不写tag,默认就是latest
latest: Pulling from library/mysql
32c1bf40aba1: Pull complete # 分层下载,docker image的核心 联合文件系统
3ac22f3a638d: Pull complete
b1e7273ed05e: Pull complete
20be45a0c6ab: Pull complete
410a229693ff: Pull complete
1ce71e3a9b88: Pull complete
c93c823af05b: Pull complete
c6752c4d09c7: Pull complete
d7f2cfe3efcb: Pull complete
916f32cb0394: Pull complete
0d62a5f9a14f: Pull complete
Digest: sha256:ce2ae3bd3e9f001435c4671cf073d1d5ae55d138b16927268474fc54ba09ed79 #签名,防伪标志
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真是地址
#等价于
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
[root@VM-4-12-centos ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
66fb34780033: Pull complete
ef4ccd63cdb4: Pull complete
d6f28a94c51f: Pull complete
7feea2a503b5: Pull complete
71dd5852ecd9: Pull complete
2ff5c3b24fd5: Pull complete
88a546386a61: Pull complete
65b18297cf83: Pull complete
d64f23335fb8: Pull complete
6ba4171261fa: Pull complete
96dcc6c8de93: Pull complete
# 分层下载的好处:如果不同的镜像中具有相同的依赖,则不会重复下载,而是显示Already exist,极大的节省了内存,相同的部分就共用
指定版本下载需要在docker hub中存在,可以查询一下,例如mysql就有以下版本
docker rmi 删除镜像
# 删除指定的镜像
[root@VM-4-12-centos ~]# docker rmi -f 7b94cda7ffc7
Untagged: mysql:latest
Untagged: mysql@sha256:ce2ae3bd3e9f001435c4671cf073d1d5ae55d138b16927268474fc54ba09ed79
Deleted: sha256:7b94cda7ffc7c59b01668e63f48e0f4ee3d16b427cc0b846193b65db671e9fa2
Deleted: sha256:5941a477484b80a594761cb828f993b574a1ac2cd741300503209752f7790466
······
# 删除多个镜像
[root@VM-4-12-centos ~]# docker rmi -f 镜像id 镜像id 镜像id...
# 删除全部镜像
[root@VM-4-12-centos ~]# docker rmi -f $(docker images -aq)
Untagged: mysql:5
Untagged: mysql:5.7
Untagged: mysql:5.7.39
Untagged: mysql@sha256:b3a86578a582617214477d91e47e850f9e18df0b5d1644fb2d96d91a340b8972
Deleted: sha256:3147495b3a5ce957dee2319099a8808c1418e0b0a2c82c9b2396c5fb4b688509
Deleted: sha256:326f57ec4510699d8f5e3286acab31c7fc5ff52030615178fc61a4e4e2666792
Deleted: sha256:d5d890fe2493dddb27d7a9afe6efc2deab86a3d0d14bb55d61130ea92552234d
Deleted: sha256:7fe3127c1b80dad856024ddbe4962beaadc360578de21cc24ff3f65898472ded
Deleted: sha256:dff3729e0a6b6be8c74937ee796802973b5b4164042d517174a57026b77c8c60
Deleted: sha256:f80a7c9d6763bc45d9f4a75b54304b9bb801d5c87d0848a22229f62a5b7a9dfc
Deleted: sha256:27e299d6421f0c88f5f5c82cac2f51884e28351240838cd835a133628a1b03bc
Deleted: sha256:9c23e82c5e50b4a1ba1978cb47a5028061609ddd0057c774bbf722e4b518a7c6
Deleted: sha256:23da32aa7c7218232a08036f50e8e60417f89d172a8381309e221680497e223f
Deleted: sha256:5a7d5cbcd5f100b4e3f3ce6f53766ca33c6464e86e29f6da96a070f9cd3deab2
Deleted: sha256:8a6b5d70d43734f669f9c99f8c0d92923520787eca7c91a7a161d0a7064d85c8
Deleted: sha256:9ba403017e5ec778c95a5c4673f9d9c36ddf94e30fcb47959142a9e89d6606ea
Untagged: hello-world:latest
Untagged: hello-world@sha256:53f1bbee2f52c39e41682ee1d388285290c5c8a76cc92b42687eecf38e0af3f0
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Error: No such image: 3147495b3a5c
Error: No such image: 3147495b3a5c
[root@VM-4-12-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# 此时使用docker images查看发现没有镜像
10 容器的常用命令
说明:我们有了镜像之后才可以创建容器
下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="Name" # 容器名字 tomcat01 tomcat02,用来区分容器
-d # 后台方式运行
-it # 使用交互方式运行,进入容器查看内容
-p # 指定容器的端口 -p 8080:8080
# -p ip:主机端口:容器端口
# -p 主机端口:容器端口
# -p 容器端口
# 容器端口
-P # 随机指定端口
# 测试,启动并进入容器
[root@VM-4-12-centos ~]# docker run -it centos /bin/bash
[root@bd3abbc72431 /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
# 从容器中返回主机
[root@bd3abbc72431 /]# exit
exit
[root@VM-4-12-centos ~]#
下载centos镜像并启动进入容器,截图如下所示:
列出所有运行的容器
# docker ps 命令
# 列出当前正在运行的容器
-a # 列出当前正在运行的容器+带出的历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
[root@VM-4-12-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@VM-4-12-centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd3abbc72431 centos "/bin/bash" 4 minutes ago Exited (0) 2 minutes ago elegant_gauss
fb945a540f37 feb5d9fea6a5 "/hello" 19 hours ago Exited (0) 19 hours ago determined_meitner
退出容器
exit # 直接退出容器并退出
Ctrl+P+Q # 容器不停止退出
删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果强制删除 rm -rf
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 # 强制停止当前容器
11 日志、元数据、进程的查看(常用的其他命令)
后台启动容器
# 命令 docker run -d 镜像名!
[root@VM-4-12-centos ~]# docker run -d centos
b799bf3a72696da0f14363756335986c6788d932c922354ed3f58de8398cc83b
[root@VM-4-12-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@VM-4-12-centos ~]#
# 问题:docker ps发现后台启动的centos停止了
# 原因:docker容器使用后台运行,必须要有一个前台进程,容器docker发现没有发现对外提供服务的应用,就会自动停止
# 例如nginx,容器启动后发现自己没有提供服务,就会立刻停止,表现为没有程序了
查看日志
# help中的解释
[root@VM-4-12-centos ~]# docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
...
-f, --follow Follow log output
-t, --timestamps Show timestamps
...
# 自己编写一段shell脚本,来使得日志中有东西可以看
docker run -d centos /bin/sh -c "while true;do echo zhuozhuo;sleep 1;done"
# 显示日志
docker logs -tf --tail number # 显示指定条数的日志
-tf #
--tail number # 要显示的日志条数
[root@VM-4-12-centos ~]# docker logs -tf --tail 10 ee19dd2372af
2022-08-08T07:07:54.315017861Z zhuozhuo
2022-08-08T07:07:55.317300463Z zhuozhuo
...
查看容器中的进程信息 ps
# 命令 docker top 容器id
[root@VM-4-12-centos ~]# docker top ee19dd2372af
UID PID PPID C STIME TTY TIME
root 26051 26031 0 15:06 ? 00:00:00
root 27902 26051 0 15:13 ? 00:00:00
查看镜像的元数据
docker inspect 容器id
# 测试
[root@VM-4-12-centos ~]# docker inspect ee19dd2372af
[
{
"Id": "ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad",
"Created": "2022-08-08T07:06:19.729228051Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo zhuozhuo;sleep 1;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 26051,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-08-08T07:06:20.101389472Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad/hostname",
"HostsPath": "/var/lib/docker/containers/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad/hosts",
"LogPath": "/var/lib/docker/containers/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad/ee19dd2372afb6205ba70b397d300c63b575b0db991f665769e4b4ae380bb6ad-json.log",
"Name": "/modest_hypatia",
"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/e63e0972ecb068f71af4dcc819bfa438aff1c93e94ecc6b895440f3d99fa83f5-init/diff:/var/lib/docker/overlay2/930b392da73f51f16105376ead18cf58bd9e26045d8df408f1daf44ad8158671/diff",
"MergedDir": "/var/lib/docker/overlay2/e63e0972ecb068f71af4dcc819bfa438aff1c93e94ecc6b895440f3d99fa83f5/merged",
"UpperDir": "/var/lib/docker/overlay2/e63e0972ecb068f71af4dcc819bfa438aff1c93e94ecc6b895440f3d99fa83f5/diff",
"WorkDir": "/var/lib/docker/overlay2/e63e0972ecb068f71af4dcc819bfa438aff1c93e94ecc6b895440f3d99fa83f5/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "ee19dd2372af",
"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 zhuozhuo;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": "83d109738148cc82b1e2e5e510b2cb4db9f355f93adce27d88830369e8bad961",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/83d109738148",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "6419b259dd696adc2e1607a0f271ef3e41a3ac1b79a2fb36a6499bc9e330546a",
"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": "3dee7204f23a636e6e890ec66c62cc8ace99fb5181b5b35c834290415c7414d5",
"EndpointID": "6419b259dd696adc2e1607a0f271ef3e41a3ac1b79a2fb36a6499bc9e330546a",
"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
}
}
}
}
]
[root@VM-4-12-centos ~]#
12 进入容器和拷贝的命令
进入容器
# 我们通常的容器都是使用后台方式运行的,需要进入容器修改一些配置
# 命令
docker exec -it 容器id bashShell
# 测试
[root@VM-4-12-centos ~]# docker exec -it ee19dd2372af /bin/bash
[root@ee19dd2372af /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 07:06 ? 00:00:00 /bin/sh -c while true;do echo zhuozhuo;sleep 1;done
root 1007 0 0 07:23 pts/0 00:00:00 /bin/bash
root 1029 1 0 07:23 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/
root 1030 1007 0 07:23 pts/0 00:00:00 ps -ef
# 命令二
docker attach 容器id
[root@VM-4-12-centos ~]# docker attach ee19dd2372af
zhuozhuo
zhuozhuo
zhuozhuo
zhuozhuo
#当前正在执行的代码...
# docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach # 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
[root@178c87fe1ac0 /]# [root@VM-4-12-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
178c87fe1ac0 centos "/bin/bash" 6 seconds ago Up 6 seconds recursing_chebyshev
# 查看当前主机目录文件
[root@VM-4-12-centos ~]# cd /home
[root@VM-4-12-centos home]# ls
lighthouse
[root@VM-4-12-centos home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
178c87fe1ac0 centos "/bin/bash" 6 minutes ago Up 6 minutes recursing_chebyshev
# 进入docker容器内部
[root@VM-4-12-centos home]# docker attach 178c87fe1ac0
[root@178c87fe1ac0 /]# cd /home
[root@178c87fe1ac0 home]# ls
# 在容器内新建一个文件
[root@178c87fe1ac0 home]# touch wyz.java
[root@178c87fe1ac0 home]# exit
exit
# 将docker中的文件拷贝出来到主机上
[root@VM-4-12-centos home]# docker cp 178c87fe1ac0:/home/wyz.java /home
[root@VM-4-12-centos home]# ls
lighthouse wyz.java
# 拷贝是一个手动过程,以后我们可以使用 -v 卷的技术来实现自动同步 /home -> /home
小结
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://wangyuanzhuo.top/docker%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0-1/
adult dating
If some one wishes expert view regarding blogging and site-building after that i propose him/her to visit this webpage, Keep up the pleasant job. Juan Stolt
Loveme
You are my breathing in, I possess few blogs and occasionally run out from to brand. Charlie Vancamp
Loveme
Fantastic site you have below, i do agree on some matters however, but not all. Elisha Strider
hidden cam
This article will help the internet visitors for creating new weblog or even a weblog from start to end. Loyd Dambach
adult dating
I truly appreciate this blog article. Really looking forward to read more. Much obliged. Boris Mongiovi
bedava bitcoin
Everything is very open with a very clear description of the challenges. Tracey Prawl