Docker 常用操作
Build, share and run modern applications anywhere. – Docker
Docker 是一个针对开发者、架构师、DevOps 和 IT 的容器解决方案。
本篇主要记录日常开发中一些常用操作。
容器
启动一个容器并进入容器里
docker run -ti alpine:latest /bin/sh
常用参数解释:
-t
: 伪终端模式-i
: 打开标准输入-d
: 后台运行-p
: 映射端口-v
: 挂载目录
创建一个容器但是不启动它
docker create --name test001 alpine:latest /bin/sh -c "while true; do date; sleep 2; done"
启动/重启/删除一个容器
docker start test001
docker restart test001
docker rm test001
注意:删除操作需要先将容器关闭
进入容器内部
docker attach test001
执行容器内的命令
docker exec -ti --user root test001 /bin/sh
参数解释:
--user
指定用户
宿主/容器相互拷贝
docker cp test001:/etc/passwd /tmp/passwd
docker cp /tmp/passwd test001:/cat/passwd
暂停/恢复一个容器
docker pause test001
docker unpause test001
可以使用 docker logs -f test001
验证其状态
关闭/删除容器
docker stop test001
或者直接 Kill 掉容器
docker kill test001
等待容器结束并打印退出码
docker wait test001
删除镜像
docker rm test001
列出运行中的容器
docker ps
可以加 -a
参数列出所有容器
查看容器运行状况(CPU/MEM/IO/NET等)
docker stats
查看容器内进程状态
docker top test001
查看容器端口信息
docker port test001
查看容器日志信息
docker logs -f test001
参数解释:
-f
持续输出
查看容器/镜像元数据
docker inspect test001
更改容器名称
docker rename test001 test111
docker rename test111 test001 # 将名称改回来
查看容器文件更改
docker diff test001
更改容器配置
注意:不支持 Windows 系统
docker run -dit --name test002 -m 100M alpine /bin/sh
docker update -m 80M test002
导入/导出
容器 (export/import):
docker export -o /tmp/test001-copy.tar test001 # 单个导出
docker import /tmp/test001-copy.tar test001-copy
docker images
镜像 (save/load):
docker save -o /tmp/test001-copy2.tar test001-copy:latest alpine:latest # 可多个镜像
docker load -i /tmp/test001-copy2.tar
区别:
export
针对容器,导出内容不包含中间层信息,适用于制作基础镜像save
针对镜像,可多个一起导出import
导入容器到镜像,可重新命名load
导入镜像,无法命名
镜像
查看镜像列表
docker images
删除镜像
docker rmi test001-copy
注意:删除镜像需要依赖此镜像的容器都删除后才能操作
给镜像打标签
docker tag alpine:latest my/alpine:latest
镜像历史
docker history my/alpine:latest
从容器创建一个新镜像
docker commit -p -a "test" -m "test content" test001 my/test002:latest
docker images | grep my/
参数说明:
-p
: commit 时暂停-a
: 提交镜像作者-m
: 提交镜像说明-c
: 使用 Dockerfile 创建
事件查看
docker events --filter 'container=test001'
docker events --filter 'image=alpine'
docker events --filter 'container=test' --filter 'container=d9cdb1525ea8'
docker events --filter 'type=volume'
docker events --filter 'type=network'
docker events --filter 'type=container' --format 'Type=\{\{.Type\}\} Status=\{\{.Status\}\} ID=\{\{.ID\}\}'
全部以 JSON 输出
docker events --format '\{\{json .\}\}'
更多自定义可以参考:https://docs.docker.com/engine/reference/commandline/events/
资源
列出所有数据卷
docker volume ls
创建/删除数据卷
docker volume create test-volume
docker volume rm test-volume
查看数据卷信息
docker volume inspect test-volume
挂载数据卷
docker run -ti --name test003 --mount type=volume,source=test-volume,target=/data alpine /bin/sh
挂载目录
docker run -ti --name test004 -v /tmp/docker/data:/data alpine /bin/sh
网络列表
docker network ls
创建/删除网络
docker network create -d bridge test-bridge
docker network rm test-bridge
容器指定网络
docker run -ti --name test005 --network=test-bridge alpine /bin/sh
容器设置 CPU 和内存限制
docker run -ti --name test006 --cpus=1 -m 100M alpine /bin/sh
插件
将数据卷通过存储到远程
docker plugin install --grant-all-permissions vieux/sshfs
docker volume create --driver vieux/sshfs -o sshcmd=test@192.168.5.242:/data/docker/sshvolume -o password=youpassword ssh-volume
docker run -ti --name test009 --mount type=volume,volume-driver=vieux/sshfs,source=ssh-volume,target=/data alpine /bin/sh
其它
删除历史不使用的镜像
docker images | grep none | awk '{ print $3; }' | xargs docker rmi
更多
- https://docs.docker.com/engine/reference/commandline/docker/