docker 使用笔记

docker 使用笔记

docker 创建容器
  • docker create -it ubuntu:latest 创建一个ubuntu容器,该容器没有启动
  • 可以使用 docker start 命令来启动
docker 创建并启动容器
  • docker run ubuntu /bin/echo 'hello world' 基于镜像新建并启动容器,输出 ‘hello world’ 后容器自动终止

创建容器时 docker 在后台运行的标准操作是

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
  2. 利用镜像创建并启动一个容器。
  3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
  5. 从地址池配置一个IP地址给容器。
  6. 执行用户指定的应用程序。
  7. 执行完毕后容器被终止。
启动一个 ubuntu bash终端,允许用户进行交互
  • docker run -t -i ubuntu /bin/bash
  • 其中 -t 选项让docker分配一个伪终端并绑定到容器的标准输入上
  • -i 表示容器的标准输入保持打开。
  • ctrl+d 或 exit 命令退出
使用 -d 参数让docker运行的容器在后台以守护态 (Daemonized) 形式运行
查看后台运行的容器
  • docker ps 命令查看后台运行的容器。
  • docker logs 命令获取容器的输出信息 docker logs 容器ID
终止容器
  • docker stop 命令终止一个运行的容器 docker stop 容器ID
  • 可以使用 docker ps -a -q 命令看到处于终止状态的容器ID信息,处于终止状态的容器,可以使用 docker start 重新启动
  • docker restart 容器ID 可以关闭并启动一个容器
  • 使用 nsenter 工具进入容器
进入容器
  • 可以使用 docker attach 进入容器(后台运行)中。
  • 但是使用 attach 命令有时候并不方便。多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
docker 1.3版本起 提供了更加方便的工具 exec
  • 可以直接在容器运行命令。
  • docker exec -ti 容器ID /bin/bash
使用 ps -ef 可以看到容器中运行的进程
删除容器
  • 可以使用 docker rm 删除处于终止状态的容器。
  • docker rm -f 容器ID 强制删除一个运行中的容器。
  • -f 强制删除 -l 删除容器链接 -v 删除容器挂载的数据卷。
导出容器
  • 导出容器是指导出一个已经创建的容器到一个文件,不管此时容器是否处于运行状态,都可以使用 docker export 命令
  • 格式 docker export CONTAINER
导入容器
  • 导入文件可以使用 docker import 命令导入,成为镜像。
  • 例如 cat test_for_run.tar | docker import - test/ubuntu:v1.0

docker 网络基础配置

  • docker在运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数来指定端口映射。
  • -P (大写)标记时,docker会随机映射一个49000~49900的端口至容器内部开放的网络端口
  • -p (小写)则可以指定要映射的端口,且在一个指定端口上只可以绑定一个容器。支持格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
查看映射端口配置
  • 使用 docker port 来查看当前映射端口配置
容器互联
  • 使用 --link 参数可以让容器之间安全的进行交互
  • docker run -d -P --name web --link db:db training/webapp python app.py 此时db容器和web容器建立互联关系。
  • –link参数格式为 --link name:alias ,其中name是要链接的容器名称,alias是这个连接的别名
使用env命令查看web容器的环境变量
  • docker run --rm --name web2 --link db:db tranining/webapp env

Dockerfile 创建镜像

  • dockerfile 使用 # 号注释
dockerfile分为四部分
  1. 基础镜像信息
  2. 维护者信息
  3. 镜像操作指令
  4. 容器启动时执行指令
指令
指令格式
  • 指令格式为 INSTRUCTION arguments, 指令包括 FROM MAINTAINER RUN 等
1. FROM
  1. FROM 第一条指令必须为 FROM 指令,同一个dockerfile创建多个镜像时,可以使用多个FROM指令(每个镜像一次)
  2. 格式为 FROM 或 FROM :
2. MAINTAINER
  • 格式为 MAINTAINER , 指定维护者信息
3. RUN
  • 格式为 RUN 或 RUN [‘executable’, ‘param1’, ‘param2’]。
  • 前者将在shell终端中运行命令,即 /bin/sh -c;后者则使用exec执行。指定使用其他终端可以通过第二种方式实现
  • 命令较长时使用\来换行
4. CMD
  • 支持三种格式
  1. CMD [‘executable’, ‘param1’, ‘param2’] 使用exec执行,推荐
  2. CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用
  3. CMD [‘param1’, ‘param2’] 提供给ENTRYPOINT的默认参数
  • 启动容器时执行的命令,每个dokcerfile只能有一条CMD命令,如指定多条命令,最后一条会被执行
5. EXPOSE
  • 格式为 EXPOSE […] 例 EXPOSE 22 80 443
  • 告诉dokcer服务器容器暴露的端口号,供互联系统使用。启动容器时需要使用 -P 或 -p 参数指定端口。
6. ENV
  • 格式为ENV 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
创建镜像
  • 可以通过docker build命令来创建镜像
  • 格式 docker build [选项] 路径
  • 该命令将读取指定路径(包括子目录)的dockerfile,并将该路径下所有内容发送给docker服务器,由服务端来创建镜像。建议放置dockerfile的目录为空目录
  • 指定镜像标签信息使用 -t 选项
  • docker build -t build_repo/first_image /tmp/docker_builder/ 指定dockerfile所在路径为 /tmp/docker_builder/,并且希望生成镜像标签为 build_repo/first_image。
创建镜像

显示镜像构建过程,即docker镜像的反向过程 (回溯镜像)

  1. docker history --no-trunc=true nginx:1.17 > nginx-dockerfile
### 如何在Docker容器中访问和使用笔记本电脑内置摄像头 为了使Docker容器能够访问主机上的硬件设备,比如笔记本电脑的内置摄像头,通常需要确保几个方面配置正确。这不仅涉及到了解如何启动具有适当权限的容器,还涉及到宿主机上必要的驱动程序和支持。 #### 启动带有USB支持的Docker容器 为了让Docker容器可以访问外部设备如摄像头,在创建或运行容器需指定`--privileged=true`选项来赋予更高的权限[^3]。然而更推荐的做法是指定具体的设备而不是给予整个特权模式: ```bash docker run -it --device=/dev/video0:/dev/video0 ubuntu bash ``` 这条命令中的`/dev/video0`代表的是Linux系统下第一个检测到的视频捕捉设备(即摄像头)。如果不确定具体路径可以在宿主机执行`v4l2-ctl --list-devices`查看所有可用视频设备及其对应的节点名称。 对于某些情况可能还需要安装额外软件包以便于操作这些多媒体资源,例如FFmpeg用于处理音视频流数据或是VLC player作为播放工具等。 #### 配置Docker守护进程以允许USB设备传递 有即使指定了特定设备文件也未必能成功获取图像帧序列,这就需要进一步调整Docker Daemon配置使其接受来自USB接口的数据传输请求。编辑位于/etc/docker/daemon.json内的JSON对象加入如下字段: ```json { "default-ulimits": { "nofile": {"Name":"nofile","Hard":65535,"Soft":65535} }, "features": {"apparmor":false}, "insecure-registries":["localhost:5000"] } ``` 请注意上述设置可能会降低安全性因此仅建议开发测试环境中应用;生产环境应谨慎评估风险后再做决定。 另外值得注意的一点是在Windows或者macOS平台上由于架构差异实现方式会有所不同,这里主要讨论基于Linux系统的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值