学习docke从curd开始,查看和删除都比较简单,我们只需要把精力主要集中到新建和修改上
增
docker run/start/stop/restart/pull/push
docker run -t -i --name test -p 8080:80 ubuntu:18.04 /bin/bash
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d, –detach:用于在后台运行容器并打印容器ID。
-e、-env:用于设置容器中的环境变量。
-h, –hostname:用于更改容器的主机名。
-i, –interactive:用于与容器交互
–isolation:用于指定容器隔离技术
-l, –lable:用于向容器添加元数据。
–link:它添加到另一个容器的链接
–log-driver:用于指定容器的日志驱动,覆盖默认的日志驱动
–log-opts:用于指定日志驱动程序的选项。
-m, –memory: 用于以字节为单位设置内存限制
–mount:用于将文件系统挂载到容器
–name:用于指定容器的名称
–network:用于将容器连接到与默认网络不同的网络
-p, –publish: 用于将容器的端口发布到主机
-P, --publish-all:大写p 暴露一个端口随机映射到主机端口
–restart:它允许我们为容器指定重启策略
-rm:它在容器退出或停止运行时立即删除容器
-t, –tty: 它分配终端并且主要与’-i’选项一起使用。
-v, –volume:用于将volume绑定到容器上进行持久化存储
-w, –workdir: 允许设置容器的工作目录
# 这几个命令的使用格式基本一样,而且参数也基本都能看明白
docker start 容器名称/容器id
docker pull/push 镜像名称
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从 registry 下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
改
修改镜像和容器相关操作
docker export/import/load/save/cp/commit/tag/build
# 把test 容器打包成nginx.tar导出到本地的目录下
docker export -o nginx.tar test
docker export test > nginx.tar
# 把nginx.tar 导入成镜像test/nginx:v1,由容器再次变成镜像
# 重要的事情说三遍:重要 重要 重要
# 在试nginx的时候根据容器重新导入生成的镜像,再次启动的时候不执行dockerfile上的命令,你需要手动的输入,所以启动的时候注意根据自己的需要启动
docker import nginx.tar test/nginx:v1
# 把当前目录下的index.html 复制到容器中的项目目录下,覆盖掉原来的首页
docker cp ./index.html test:/usr/share/nginx/html/index.html
# 把项目中的目录拷贝出来
docker cp test:/usr/share/nginx/html/index.html ./
docker commit -m="" -a="" 容器ID 新的镜像名称:[version]
#
docker tag 源镜像ID 目标镜像名称
#使用dockerfile 构建一个镜像
docker build [OPTIONS] PATH | URL | -
--build-arg,设置构建时的变量
--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust,默认true。设置该选项,将对镜像进行验证
--file, -f,Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation,默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label,为生成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q`,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器
查
查看镜像和容器
docker images/ps/logs/inspect/exec/attach/top
# 列出当前服务器上的所有镜像
docker images -a -q
# -q, --quiet Only show image IDs
# -q 只显示镜像的id
# -a, --all Show all images
# -a 列出所有的镜像
docker ps -a -q
# -q, --quiet Only show image IDs
# -q 只显示容器的id
# -a, --all Show all images(默认只显示正在运行容器)
# -a 列出所有的容器(默认只显示正在运行容器)
docker logs -f 容器名称/容器id
# -f 持续关注日志输出,相当于tail -f
docker logs test
docker logs 66c3c91febd2
#
# 显示详细的容器信息
docker inspect 容器名称/容器id
docker inspect test/66c3c91febd2
# 使用后不会显示命令行提示符,可以直接输入Linux命令,然后就会显示终端的命令提示符
# 使用exit退出容器会停止退出容器,我们一般使用docker exec命令
docker attach 容器名称/容器id
# 进入容器后退出容器但是不会导致容器退出
docker exec -it 容器名称/容器id
# top列出镜像中运行的所有进程
docker top 容器名称/容器id
docker top test/66c3c91febd2
删
删除镜像和容器
docker rm/rmi
# 强制删除所有的镜像
docker rmi -f `docker images -aq`
docker rmi -f $(docker images -aq)
#-f, --force Force the removal of a running container (uses SIGKILL)
# 强制删除所有的容器
docker rm -f `docker ps -aq`
docker rm -f $(docker ps -aq)