弱小和无知不是生存的障碍,傲慢才是。
只要学不死,就往死里学!
发布一个项目( jar + ( Redis MySQL jdk ES )),项目能不能都带上环境安装打包!
之前在服务器配置一个应用的环境Redis MySQL jdk ES Hadoop ,配置超麻烦了,不能够跨平台。Windows,最后发布到Linux !
传统:开发jar,运维来做!
现在:开发打包部署上线,—套流程做完!
java – apk --发布 (应用商店) ----张三使用apk —安装即可用!
java -.- jar(环境.).…打包项目带上环境(镜像 ) -( Docker仓库:商店 )–下载我们发布的镜像—直接运行即可!
Docker的思想就来自于集装箱!
JRE–多个应用(端口冲突) —原来都是交叉的!
隔离:Docker核心思想!打包装箱!每个箱子是互相隔离的。水果―生化武器
Docker通过隔离机制,可以将服务器利用到极致!
2010年,几个搞IT的年轻人,就在美国成立了一家公司dotcloud做一些pass的云计算服务! LXC有关的容器技术!
他们将自己的技术(容器化技术)命名就是Docker !
Docker刚刚诞生的时候,没有引起行业的注意! dotCloud,就活不下去!
开源
开发源代码!
2013年,Docker开源!
Docker越来越多的人发现了docker的优点!火了,Docker每个月都会更新一个版本!2014年4月9日,Docker1.0发布!
Docker为什么这么火?十分的轻巧!
在容器技术出来之前,我们都是使用虚拟机技术!
虚拟机∶在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
vm:linux centos原生镜像(一个电脑!)隔离,需要开启多个虚拟机!
docker:隔离,镜像〔最核心的环境4m + jdk + mysq1)十分的小巧,运行镜像就可以了!小巧!
https://www.docker.com/
最下面选 docs:https://docs.docker.com/
docker镜像:https://hub.docker.com/
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
编程语言 Go
一个完整的Docker有以下几个部分组成:
Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
虚拟机技术缺点∶1、资源占用十分多2、冗余步骤多3、启动很慢!
容器:
Kernel + 多个容器(每个容器是 lib+app)
容器化技术不是模拟的一个完整的操作系统
比较Docker和虚拟机技术的不同:
DevOps (开发、运维)
应用更快速的交付和部署传统:一堆帮助文档,安装程序
Docker :打包镜像发布测试,一键运行更便捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样!
项目打包为一个镜像,扩展服务器A!服务器B更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。更高效的计算资源利用∶
Docker是内核级别的虚拟化,可以再一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
客户端 client
服务器 docker_host
仓库 registry
镜像( image ) :
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像-===>run ==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container ) :
Docker利用容器技术,独立运行一个或者—个组应用,通过镜像来创建的。启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统
仓库( repository ) :仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库!Docker Hub(默认是国外的)
阿里云…都有容器服务器(配置镜像加速! )
安装Docker
环境准备
1、需要会一点点的Linux的基础2、centOs 7
3、我们使用Xshell 连接远程服务器进行操作!
环境查看
#系统内核是 3.10 以上的
[root@kuangshen /]# uname -r
3.10.0-1062.12.1.e17.x86_64
[root@kuangshen /]# cat /etc/os-release
NAME=""centos Linux"
VERSION="7 (core)"
https://docs.docker.com/engine/install/centos/
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo #国外的太慢了
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #推荐使用
#更新yum软件包索引
yum makecache fast
#这是最新的,老师的不带 plugin
#docker-ce社区 ee企业版
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7
docker-ce.x86_64 3:18.09.0-3.el7
## 我的查看,最新的为 3:20
docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin
systemctl start docker
sudo docker run hello-world
docker version
docker version
Client: Docker Engine - Community
Version: 20.10.22
API version: 1.41
Go version: go1.18.9
#老师的是:19.03.8。go版本为:12.17
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 15 months ago 13.3kB
sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 这是docker 默认工作路径
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
(6) 安装加速镜像
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://0wrdwnn6.mirror.aliyuncs.com"]
}
EOF
-- 重新载入,并重启
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker会在本机寻找镜像
到断本机是否有这个镜像
去Docker Hub上下载
Hub上 是否可以找到
Docker是什么工作的?
Docker是一个Client - Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!DockerServer接收到Docker-Client的指令,就会执行这个命令!
客户端
Docker为什么比VM快?
1、Docker有着比虚拟机更少的抽象层。
2、docker利用的是宿主机的内核,vm需要 在搭建一个环境 os.
虚拟机——先装 硬件(虚拟的)——在硬件上跑服务。
Docker——安装docker 引擎——所有的服务 运行在docker引擎上
所以说,新建一个容器的时候,docker不需要想虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker 是利用宿主机的操作系统吗,省略了这个复杂的过程,秒级。
GuestOS:VM(虚拟机)里的的系统(OS)
docker是 隔离性:NS隔离
VM虚拟机是 完全的虚拟的一个电脑。隔离性更强。
NS 应该是 namespace 吧
docker version
docker info ##显示docker的系统信息..包括境像和容器的数量
docker命令 --help #万能命令
#官网 命令地址
https://docs.docker.com/reference/
docker images #查看所有本地的主机上的镜像
docker images --help
Name, shorthand | Default | Description |
---|---|---|
--all , -a |
Show all images (default hides intermediate images) | |
--digests |
Show digests | |
--filter , -f |
Filter output based on conditions provided | |
--format |
Pretty-print images using a Go template | |
--no-trunc |
Don’t truncate output | |
--quiet , -q |
Only show image IDs |
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 15 months ago 13.3kB
#解释
REPOSITORY镜像的仓库源
TAG境像的标签
IMAGE ID镜像的id
CREATED镜像的创建时间
SIZE镜像的大小
#可选项
-a,--all 称列出所有镜憬
-q,--quiet #只显示镜像的id
docker images -aq #显示所有的镜像ID
docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13668 [OK]
docker search mysql --filter=STARS=5000 #stars >= 5000的
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
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 mysql # 镜像名[:tag]
docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete #分层下载,docker iamge的核心联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
# 和这个命令相同
docker pull docker.io/library/mysql:latest
# 5.7版本是存在的
docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists #已经存在 公用的层,不会重复下载
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi删除镜像
i #就是images
docker rmi -f +镜像id 或 名字
docker rmi -f 镜像id 镜像id #删除多个
docker rmi -f $(docker images -aq) #查出所有镜像 并删除
force
n.
暴力,武力;力,力量;自然力;(有某目的)一群人;有影响力的人(或事);影响力;武装部队;警察部门;风力
v.
强迫;用力推;使发生;勉强做出
docker pull centos
docker run
docker run[可选参数] image
#参数说明
--name="Name"
容器名字tomcato1 tomcato2,用来区分容器
-d
后台方式运行
-it
使用交互方式运行T进入容器查看内容
-p
指定容器的端口-p 8080:8080
-p 主机端口:容器端口《常用》
-p ip:主机端口:容器端口
-p 容器端口
容器端
-P #大P
随机指定端口
docker run -it centos /bin/bash
# root@41060f704cf5 默认主机名为 镜像ID
exit #退出容器
-i, --interactive Keep STDIN open even if not attached 保持STDIN打开,即使没有附加
-t, --tty Allocate a pseudo-TTY 分配伪tty
#docker ps命令 #列出当前正在运行的容器
-a#列出当前正在运行的容器+带出历史运行过的容器
-n=?#显示最近创建的容器
-q#只显示容器的编号
docker ps -aq
exit#直接容器停止并退出
ctrl +P +Q #容不停止退出
docker start 41060f704cf5
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id #强制停止当前容器
# pause 暂停容器
# unpause 取消暂停容器
diff #查看docker容器变化
events #从 docker服务获取容器实时事件
docker exec -it 41060f704cf5 /bin/bash #开启一个新的窗口
#进入容器后开启一个新的终端,可以在里面操作〔常用)
docker exec -it tomcat01 /bin/bash #使用容器名字,也能进入。
#进入容器正在执行的终端,不会启动新的进程!
docker attach 523c3da6dba4 #进入正在运行的命令行
attach
英
/əˈtætʃ/
v.
系上,贴上,连接;附上(附件);赋予,认为……具有; 和……在一起,缠着; 附带(条件);附属,依附;与……有关联;委派;扣押(债务人或其财产);使依恋
docker rm 容器id #不能删除正在运行的容器,如果要强制删除rm -f
docker rm -f $(docker ps -aq)
docker ps -a -q | xargs docker rm #也是删除所有
# -q, --quiet Only display container IDs
#命令
docker run -d 镜像名!
docker run -d centos
#问题docker ps,发现centos停止了
#常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务.就会立刻停止,就是没有程序了
docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g.
42m for 42 minutes)
-n, --tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative
(e.g. 42m for 42 minutes)
docker logs -f -t --tail 10 c3630e5cb206
# Follow log output 跟踪
# --timestamps Show timestamps
# --tail 必须 + 行数
docker run -d centos /bin/sh -c "while true; do echo kuangshen; sleep 1;done" #自己模拟日志
while true;
do echo kuangshen;
sleep 1;
done
docker top dce7b86171bf #容器ID
docker top 523c3da6dba4
UID PID PPID C STIME TTY root 32063 32043 0 02:18 ?
docker inspect --help
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Return low-level information on Docker objects
Options:
-f, --format string Format the output using the given Go template
-s, --size Display total file sizes if the type is container
--type string Return JSON for specified type
inspect
英
/ɪnˈspekt/
v.
检查,审视;检阅,视察;进行检查,进行视察
docker inspect 523c3da6dba4
[
{
"Id": "523c3da6dba46f5206963de5cb9741f4e8b9b2e4cf48a78a03214e39955b613b",
"Created": "2023-01-09T07:18:16.099878957Z",
"Path": "/bin/sh",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 32063,
"ExitCode": 0,
"Error": "",
"StartedAt": "2023-01-09T07:18:16.413427589Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0d"
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "ee3c31d14c0bdb9f6691ce5c8777a18b520d0c7e6060570d1150268f87af6c00",
"EndpointID": "b20e539b3b86546b62f837bee19cd5282e5c35101671a3480a81a2025824f11f",
"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
}
}
docker cp 065ebf34869a:/home/test.java /home
docker cp 容器id:容器内路径 目的的主机路径
#拷贝是一个手动过程,未来我们使用-v卷的技术,可以实现,自动同步/home /home (两个 容器内和现实的home 打通)
docker pull nginx
#-p宿主机端口﹔容器内部端口
docker run -d --name nginx01 -p 3344:80 nginx #映射到本地的3344
curl localhost:3344
docker exec -it cda39ce07e69 /bin/bash
whereis nginx
cd /etc/nginx
思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦,我要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改? -v数据卷!
docker run -it --rm tomcat:9.0
#我们之前的启动都是后台.停止了容器之后,容器还是可以查到
docker run -it --rm.一般用来测试,用完即删除。关了后,就找不到了。
# 容器会删除,镜像 还是在的。
docker run -d -p 3355:8080 --name tomcat01 tomcat
docker exec -it tomcat01 /bin/bash
cd /usr/local/tomcat/webapps #目录是空的
# 从这里复制一份
cp -r webapps.dist/* webapps
http://192.168.44.147:3355/ #即可出现Tomcat欢迎页
思考问题:我们以后要部署项目,如果每次都要进入容器是不是十分麻烦﹖我要是可以在容器外部提供一个映射路径,webapps ,我们在外部放置项目,就自动同步到内部就好了!
#去掉网络配置 --net somenetwork
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
# tag 装 7.6.2
#启动了Linux就卡住了docker stats查看cpu的状态
curl localhost:9200
#environment
#赶紧关闭,增加内存的限制,修改配置文件 -e环境配置修改
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms128m -Xmx1024m" -e "discovery.type=single-node" elasticsearch:7.6.2
Docker图形化界面管理工具!提供一个后台面板供我们操作!
portainer
'pɔ:teinə/
n.
集装箱岸吊,码头货柜起重机
Rancher ( CI/CD再用)
# 百度的
docker run -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /app/portainer_data:/data --restart always --privileged=true portainer/portainer-ce
# 老师的
# -v是挂载。里面的数据,挂载到本机
docker run -d -p 8088:9000
--restart always
-v /var/run/docker.sock:/var/run/docker.sock
--privileged=true
portainer/portainer
# 连在一起
docker run -d -p 8088:9000 --restart always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
甚至允许你在docker容器中启动docker容器。
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接跑起来!如何得到镜像:
Docker镜像加载原理UnionFS(联合文件系统)
UnionFS(联合文件系统):Union文件系统(UnionFS )是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性︰一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
Git控制版本记录
安装了centos 1
安装了docker 2
安装了jdk3
联合文件系统:我们下载的时候看到的一层层就是这个!
镜像加载原理:
Docker镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot fle system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root file system),在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu , Centos等等。
虚拟机是分钟级别.容器是秒级!
分层理解
分层的镜像
我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层一层的在下载!
思考:为什么Docker镜像要采用这种分层的结构呢?
最大的好处,我觉得莫过于是资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。
查看镜像分层的方式可以通过docker image inspect命令!
理解︰
所有的Docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层
举一个简单的例子,假如基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
该镜像当前已经包含3个镜像层,如下图所示(这只是一个用于演示的很简单的例子)。
docker inspect redis #可看到分层信息
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:2edcec3590a4ec7f40c1f",
"sha256:9b24afeb7c2f21e513ca77ad5f115c079b57cb",
"sha256:4b8e2801e0f956a4253685246b82766ea1",
"sha256:529cdb636f61e95ab91a6040796150b4522372",
"sha256:9975392591f2774d260f45025ec3cc9b18ed",
"sha256:8e5669d8329bcce950199b582f6e94952"
]
这种情况下,上层镜像层中的文件覆盖了底层镜像层中的文件。这样就使得文件的更新版本作为一个新镜像层添加到镜像当中。Docker通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。
Linux上可用的存储引擎有AUFS、Overlay2、Device Mapper、Btrfs以及ZFS。顾名思义,每种存储引擎都基于Linux中对应的文件系统或者块设备技术,并且每种存储引擎都有其独有的性能特点。
Docker在Windows上仅支持windowsfilter一种存储引擎,该引擎基于NTFS文件系统之上实现了分层和CoW[1].下图展示了与系统显示相同的三层镜像。所有镜像层堆叠并合并,对外提供统一的视图。
Docker镜像都是只读的,当容器启动时,
个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!
docker commit 提交容器成为一个新的副本
#命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker commit -a="kuangshen" -m="add webapps app" 687ba2ee4c87 tomcat02:1.0
docker run -it -p 8080:8080 tomcat
# 进入容器,复制一份
cp -r webapps.dist/* webapps
# 提交新的镜像
什么是容器数据卷
docker的理念回顾
将应用和环境打包成一个镜像!
数据﹖如果数据都在容器中,那么我们容器删除,数据就会丢失!需求∶数据可以持久化MySQL,容器删了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!|
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
docker run -it -v /home/ceshi:/home centos /bin/bash
docker inspect 0a949ac33283
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi", #主机内地址
"Destination": "/home", #容器内地址
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
# 之后这个两个文件夹,相当于是同一个文件夹,相互同步。同步的过程,双向绑定
# 在容器内 新建一个文件。在主机内/home/ceshi 即可看到。
# 假如在/home/ceshi 增删改,
# 启动后 进入 这个docker 容器(不启动 没法进入容器),查看 /home
# 两边的文件 也是相同的
再来测试!
1、停止容器
2、宿主机上修改文件
3、启动容器
4、容器内的数据依旧是同步的!
volume
英
/ˈvɒljuːm
n.
体积,容积;总数,总量;音量,响度;(厚,多)
inspect
英
/ɪnˈspekt/
v.
检查,审视;检阅,视察;进行检查,进行视察
好处﹔我们以后修改只需要在本地修改即可,容器内会白动同步!
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
# -e 配置环境
docker run -d -p 3310:3306
-v /home/mysql/conf:/etc/mysql/conf.d
-v /home/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
--name mysql01 mysql:5.7
docker run -d -P --name nginx01 -v /etc/nginx nginx
# -P 随机端口
# -v /etc/nginx 只指定容器名,匿名挂载
docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes #查看
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
#查看所有的volume的情况
docker volume ls
# 结果如下
local e0bbcc1188663dede63c1aaf1da1360bb698020f37e785807112956b4bbdc479
#这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径!
#没有指定 主机的目录,就是起个名字。
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls #可以看到。叫做 具名挂载。
DRIVER VOLUME NAME
local juming-nginx
docker volume inspect juming-nginx
[
{
"CreatedAt": "2023-01-09T08:53:03-05:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]
# 所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes / xxxxl_data
cd /var/lib/docker/ #这里是 docker的工作目录
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的`具名挂载`
如何确定是具名挂较还是匿名挂载,还是指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载!
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
# 或者 rw。通过-v容器内踣径:rorw改变读写权限。
ro readonly
rw readwrite
#一旦这个了设置了容器权限,容器对我们挂载出来的内容就有限定了!
# ro只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
初识DockerFile
Docker网络
Docker Compose
Docker Swarm
CI\CD