docker 使用笔记
docker 创建容器
docker create -it ubuntu:latest
创建一个ubuntu容器,该容器没有启动- 可以使用
docker start
命令来启动
docker 创建并启动容器
docker run ubuntu /bin/echo 'hello world'
基于镜像新建并启动容器,输出 ‘hello world’ 后容器自动终止
创建容器时 docker 在后台运行的标准操作是
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
- 利用镜像创建并启动一个容器。
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
- 从地址池配置一个IP地址给容器。
- 执行用户指定的应用程序。
- 执行完毕后容器被终止。
启动一个 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分为四部分
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
指令
指令格式
- 指令格式为 INSTRUCTION arguments, 指令包括 FROM MAINTAINER RUN 等
1. FROM
- FROM 第一条指令必须为 FROM 指令,同一个dockerfile创建多个镜像时,可以使用多个FROM指令(每个镜像一次)
- 格式为 FROM 或 FROM :
2. MAINTAINER
- 格式为 MAINTAINER , 指定维护者信息
3. RUN
- 格式为 RUN 或 RUN [‘executable’, ‘param1’, ‘param2’]。
- 前者将在shell终端中运行命令,即 /bin/sh -c;后者则使用exec执行。指定使用其他终端可以通过第二种方式实现
- 命令较长时使用\来换行
4. CMD
- 支持三种格式
- CMD [‘executable’, ‘param1’, ‘param2’] 使用exec执行,推荐
- CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用
- 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镜像的反向过程 (回溯镜像)
docker history --no-trunc=true nginx:1.17 > nginx-dockerfile