14-docker
1. 👍docker的三部分
容器:一个轻量化的虚拟机
- 哪三部分?
- docker engine:服务端,管理一系列资源的生命周期
- Client:一个命令行程序
- Registry:镜像仓库,管理镜像
- 每一部分有哪些部分构成?
2. docker子命令
2.1. 👍run
文件:写时复制,不修改就用底层linux的文件,修改复制一份就放到上一层
--rm
: 退出时删除容器--it
: 进入命令行终端-d
: 后台运行容器,并返回容器 ID-i
: 交互模式运行容器,通常与 -t 同时使用-t
: 为容器重新分配一个伪输入终端,通常与 -i 同时使用-p
: 指定(发布)端口映射- 格式为:主机(宿主)端口:容器端口
-P
: 随机端口映射,容器内部端口随机映射到主机的高端口--name="nginx-lb"
: 为容器指定一个名称-e username="ritchie"
: 设置环境变量- 可以用环境变量给容器初始化/传入特定参数,在微服务中很常用
- 例:给mysql容器传
MYSQL_ROOT_PASSWORD
--env-file=c:/templ /tl .txt
: 从指定文件读入环境变量--expose = 2000-2002
: 开放(暴露)一个端口或一组端口,用于指出容器内可能对外暴露的端(不一定映射)- 如果加上-P则会建立外部端口映射
--link <name or id>:alias
:链接两个容器,使得他们可以相互通信右边可以写在本地属性文件,可以在不修改命令的情况下把远程容器映射到本地容器
-v c:/templ :/data
: 绑定一个卷- 左边时本机路径,右边是容器路径
--rm
: 退出时自动删除容器
如何在镜像中查看网卡信息和ip地址?
1 | docker run --rm -it busybox |
--link
的例子:docker run -d --name node --link selenium_hub:hub selenium/node-chrome-debug
。创建并启动名为node的容器,并把该容器和名为selenium_hub的容器链接起来。hub是该容器在link下的别名(alias),通俗易懂的讲,站在node容器的角度,selenium_hub和hub都是1cbbf6f07804容器的名字,并且作为容器的hostname,node用这2个名字中的哪一个都可以访问到1cbbf6f07804容器并与之通信(docker通过DNS自动解析)。
2.2. inspect
查看详细信息
docker image
和docker container
都有inspect
子命令
3. 👍镜像分层
- 写时复制 COW(Copy-On-Write)
- 需要修改底层文件时才会复制一份到上层,然后进行修改
- 否则一直共享底层文件
- docker history <image name> 查看镜像的层
4. 数据的存储方式
- 数据卷 Volume:docker自管理
- bind mounts:存储在宿主机的任意位置
- 临时文件系统 tmpfs(temporary file system):存储在宿主机内存中
docker volume子命令可以管理数据卷
5. 导入导出镜像
- 备份镜像
- 保存:docker save -o 文件名.tar 镜像
- 导入
6. dangling镜像
dangling镜像:没有tag的镜像
查看:docker image ls -f dangling=true
删除dangling镜像:docker image prune -f
7. Docker System
- docker system df 命令,类似于 Linux上的 df 命令,用于查看 Docker 的磁盘使用情况
- RECLAIMABLE 指可回收的,对 image, 指的是没有被容器使用的镜像
- 查看系统日志:docker system events
8. 👍容器网络
不同Network Driver的区别:Network drivers overview | Docker Docs
- none网络,
--net=none
- 不为 Docker Container 创建任何的网络环境,容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。
- host网络,
--net=host
- 共享宿主机的网络
- bridge网络,
--net=bridge
- Docker 守护进程创建了一个虚拟以太网桥
docker0
,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。 - 例:docker0的linux bridge
- Docker 守护进程创建了一个虚拟以太网桥
- container网络,
--net=container:NAME_or_ID
- 新创建的容器共享其他容器的网络
- 共享相同的ip地址和端口号,类似k8s的pod
docker run --network=my-net
:在同一个network里的多个容器可以相互通信docker network connect <network> <container>
上图中host为宿主机,docker0为网关,docker1和docker2为容器
host eth0:宿主机网卡
9. Vscode中基于docker容器开发
C/C++:底层开发,嵌入式,性能要求高
Java:
Python
JS:前端开发,服务端,基于JS的测试工具
Gadle:并发构建,性能优于maven
- 标题: 14-docker
- 作者: Charlie
- 创建于 : 2023-12-14 18:12:00
- 更新于 : 2024-07-05 12:55:04
- 链接: https://chillcharlie357.github.io/posts/33399bea/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论