镜像构建

构建指令
docker build 当前的目录是构建的上下文
docker build 默认查找当前目录中的Dockerfile作为构建输入,也可以通过-f指定
docker build PATH指定构建上下文

构建缓存
docker会缓存中有没有可用的已存在的镜像,只有不存在时才会重新构建
通过判定Dockerfile中的指令

  • ADD 和 COPY 比较文件的checksum
  • RUN 简单比较参数与现存镜像中的指令是否一致
  • 底层的缓存失效,会引发上层的都失效

如何强制重新构建

docker进程管理

docker run 创建并运行容器

  1. docker run [参数] IMAGE [CMD] [ARG]

参数

  1. --name
  2. 指定容器的名称
  3. -t|--tty=true
  4. 分配伪tty终端,默认为false
  5. -i|--interactive=ture
  6. 容器以交互式模式运行
  7. -d|--detach
  8. 让命令在后台运行
  9. --rm
  10. 命令结束后docker退出自动销毁
  11. -h,--hostname
  12. 容器的主机名
  13. --ip=""
  14. 设定容器IP
  15. -P, --publish-all=true|false
  16. 为所有的端口映射
  17. -p, --publish=[]
  18. 映射指定端口
  19. ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
  20. -w, --workdir=""
  21. 指定容器的工作目录
  22. --restart=always
  23. --add-host=xxx:10.180.8.1
  24. 修改/etc/hosts文件
  25. --dns
  26. 设置DNS

退出时,使用[ctrl + D],这样会结束docker当前线程,容器结束; 可以使用[ctrl + P][ctrl + Q]退出而不终止容器运行。

docker start 启动终止的容器

选项

  1. -a, --attach
  2. 启动后附加
  3. --help Print usage
  4. -i, --interactive
  5. 附加到容器的标准输入

docker restart 重新启动运行的容器

选项

  1. -t, --time=10
  2. 发出终止信号前等待的时间

docker stop 停止运行的容器

选项

  1. -t, --time=10
  2. 发出终止信号前等待的时间

docker attach 进入启动的容器

当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

nsenter 命令

nsenter 工具在 util-linux 包2.23版本后包含。

  1. yum install -y util-linux

使用方法

  1. PID=$(docker inspect --format "{{ .State.Pid }}" <container>)
  2. nsenter --target $PID --mount --uts --ipc --net --pid

建议使用 bashrc_docker

  1. wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker
  2. echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc

使用方法

  1. alias docker-pid="sudo docker inspect --format '{{ .State.Pid }}'"
  2. alias docker-ip="sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}'"

docker-enter

  1. docker-enter <container> [cmd]

如果后边跟上命令,指令命令后会退出,相当于

  1. nsenter --target 63424 --mount --uts --ipc --net --pid env -i ls

docker容器

docker ps 查看容器状态

参数

  1. -a, --all
  2. 显示所有容器
  3. -f, --filter value
  4. --format string Pretty-print containers using a Go template
  5. -n, --last int Show n last created containers (includes all states) (default -1)
  6. -l, --latest
  7. 显示最新创建的容器
  8. --no-trunc
  9. 不截断显示
  10. -q, --quiet
  11. -s, --size

docker rm 删除停止的容器

选项

  1. -f, --force
  2. 强制删除正在运行的容器
  3. -l, --link
  4. 移除特殊的连接
  5. -v, --volumes
  6. 移除volumes

示例

  1. # 删除所有停止的容器
  2. docker rm $(docker ps -a -q)

docker镜像

docker images 查看镜像

docker rmi 删除镜像

  1. -f ,--force 强制

docker cp file :filepath 复制文件到镜像

docker logs

  1. -f|--follow 是否一直输出
  2. --since[=SINCE] Show logs since timestamp
  3. -t|--timestamps 时间戳
  4. --tail[="all"] 倒数多少条

docker inspect 查看容器配置信息

镜像导入导出

docker save

打包镜像存储文件将保存完整记录,体积也要大
docker save的应用场景是,如果你的应用是使用docker-compose.yml编排的多个镜像组合,但你要部署的客户服务器并不能连外网。这时,可以使用docker save将用到的镜像打个包,然后拷贝到客户服务器上使用docker load载入。

从命令行帮助可以看出,docker save是用来将一个或多个image打包保存的工具。
例如我们想将镜像库中的postgres和mongo打包,那么可以执行:

  1. docker save -o images.tar postgres:9.6 mongo:3.4

docker export

容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态)
docker export需要指定container,不能像docker save那样指定image或container都可以。

  1. docker export -o postgres-export.tar postgres

docker save和docker export的区别

总结一下docker save和docker export的区别:

  1. docker save保存的是镜像(image),docker export保存的是容器(container);
  2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
  3. docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

docker load 和docker import

  1. docker load -i postgres-export.tar
  2. docker import postgres-save.tar postgres

docker import可以指定IMAGE[:TAG],可以为镜像指定新名称。

push 和pull

  1. # 根据提示进行输入用户信息
  2. root@aliyun:~# docker login
  3. # 生成的认证信息存放位置
  4. root@aliyun:~# cat .docker/config.json
  5. {
  6. "auths": {
  7. "https://index.docker.io/v1/": {
  8. "auth": "aGl5YW5nOkNWQDA4OTU1Nl9jb20="
  9. }
  10. }
  11. }
  12. # docker push <repositry>/<images_name>:<tag>

docker清理

prune 命令用来删除不再使用的 docker 对象。

  1. 删除所有未被 tag 标记的镜像(dangling):
  2. docker image prune
  3. 删除所有未被容器使用的镜像:
  4. docker image prune -a
  5. 删除所有停止运行的容器:
  6. docker container prune
  7. 删除所有未被挂载的卷:
  8. docker volume prune
  9. 删除所有网络:
  10. docker network prune
  11. 删除 docker 所有资源:
  12. docker system prune

network

参考1

  1. docker network ls
  2. docker network inspect bridge
  3. docker network create --driver bridge --subnet 192.168.100.0/24 --ip-range 192.168.100.0/ 24 my-bridge-network

其他

docker history 命令来查看它的构建命令,如图可以看到运行的启动脚本,暴露的端口等信息。还可以加 —no-trunc查看完整命令。