Docker 命令和运行原理简单剖析
Docker 运行原理简单剖析
Docker是CS架构,Docker的守护进程运行在主机,通过socket从客户端进行访问.
Docker server端:接受到C端指令,执行命令
Docker常用命令
-
帮助命令
docker version #显示版本号
docker info #显示系统信息,包括镜像和容器数量等
docker --help #帮助命令
docker save #镜像备份 针对镜像或者tar包
docker load #镜像备份加载 针对镜像或者tar包 -
镜像命令
-
docker images 查看dokcer上的所有镜像命令
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-q, --quiet Only show image IDs
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
其中-f不太用,a和q比较常用,也可以组合起来使用,输出所有的镜像id;
过滤标志-f or –filter格式为key=value。如果超过一个过滤,那么就传递多个标志[如–filter “foo=bar” –filter “bif=baz”]。
目前支持的过滤有:
dangling [布尔值 true或false]
label (label=或label==)
before ([:], or ) – 过滤出指定镜像之前的镜像
since ([:], or ) – 过滤出指定镜像之后的镜像 -
docker search 搜索命令
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
例:docker search mysql -f stars=5000 -
docker pull 拉取 下载命令, 也可以docker pull 镜像名字:tag 选择固定版本的镜像,版本需要网页上去看,支持哪些版本
例:docker pull mysql:5.7
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--platform string Set platform if server is multi-platform capable
-q, --quiet Suppress verbose output
-
docker rmi 删除镜像
例:docker rmi 容器ID1 容器ID2,也可以在-f后加其他运算条件的参数,例:docker rmi -f $(docker images -aq) 把所有的docker id传到$()这个变量接收器中,删除所有!!,$() 也可以被``代替
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
docker rmi -f 镜像名:tag 镜像明2:tag
一次性删除多个
docker rmi -f $(docker images -qa)
一次性删除全部 -
docker ps 查看容器进程
Options: -a, --all Show all containers (default shows just running)也可以看到历史记录 -f, --filter filter Filter output based on conditions provided --format string Pretty-print containers using a Go template -n, --last int Show n last created containers (includes all states) (default -1) 例: docker ps -an=1 -l, --latest Show the latest created container (includes all states) --no-trunc Don't truncate output -q, --quiet Only display container IDs -s, --size Display total file sizes
-
docker tag 给镜像创建一个tag标签
不会对原来镜像有更改,会重新创建一个镜像使用新的tag
-
docker login 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub 先-u 在输入密码
Options:
-p, --password string Password
--password-stdin Take the password from stdin
-u, --username string Username -
docker push进行发布 发布的时候尽量带自己的tag版本信息
Options:
-a, --all-tags Push all tagged images in the repository
--disable-content-trust Skip image signing (default true)
-q, --quiet Suppress verbose output -
虚玄镜像
docker image ls 可以看到镜像名和标签都是none的可以理解为虚玄镜像,一般建议删除(docker image prune).
- 容器命令
说明:有了镜像才创建容器,开始下载一个linux
docker pull centos:tag
-
新建容器并启动
docker run [可选参数] image
参数说明
--name="name" 容器名字 tomacat
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 主机端口:容器端口 -p 8080:8080 还可以设置端口映射
-P 随机指定端口
例:docker run -it centos /bin/bash
docker run -it --rm tomcat:9.0
在run里面加入--rm,可以让容器运行后就自行删除,通常用于测试环境
例:docker run -it --name tomcat01 -p 3344:8080 tomcat /bin/bash
--restart Docker restart参数用于指定自动重启docker容器策略,包含3个选项:no,on-failure[:times],always,unless-stopped
docker run --restart=no [容器名]
no 默认值,表示容器退出时,docker不自动重启容器
docker run --restart=on-failure:3 [容器名]
on-failure 若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
docker run --restart=always [容器名]
always 容器退出时总是重启
docker run --restart=unless-stopped [容器名]
unless-stopped 容器退出时总是重启,但不考虑Docker守护进程启动时就已经停止的容器
docker update --restart=always [容器名]
如果容器启动时没有设置–restart参数,则通过下面命令进行更新: -
退出容器
exit #直接退出容器
Ctrl+p+q #容器不退出 -
删除容器
docker rm 容器id #不能删除正在运行的容器
docker rm -f $(docker ps -aq) / `docker ps -aq` #强制删除所有容器包括正在运行的
docker ps -a -q|xrags docker rm #删除所有容器包括正在运行的 -
启动和停止容器的操作
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id -
后台启动容器
docker run -d 容器名称/id
注意点 docker ps 发现centos停止了
docker容器使用后台运行,就必须要有一个前台进程,否则docker发现没应用就会自动停止
nginx 容器启动后,发现没有提供服务,就会立刻停止 -
显示日志
docker logs -ft
我们可以用--tail 10 查看历史记录, 比如我们docker run -d centos /bin/bash -c "while true;do echo kuang;sleep 1;done" 让他每一秒输出 haha
然后可以用docker logs -ft --tail 10 容器id 可以查看到最后面10行的运行记录
-
查看容器使用情况
docker system df
-
查看容器进程信息
docker top 容器id
-
查看容器元信息
docker inspect 容器id
例:docker inspect 958fe6a7db8b -
进入正在运行的容器
方式1:docker exec -it 容器id
例:docker exec -it 958fe6a7db8b /bin/bash方式2:docker attach-it 容器id
例:docker attach 958fe6a7db8b
区别exec 进入容器后重新开启一个终端,而attach 是进入之前那个终端. 而退出的时候,exec进入的时候exit退出容器不会直接退出,而attach的话exit容器会直接退出.建议使用exec -
容器内文件复制到主机
docker 容器文件拷贝不需要容器运行,只要容器在,数据就可以复制,哪怕没有运行
docker cp 容器id:容器内路径 目的路径
例:docker cp 6556856f5e9d:/home/rongqinei/rongqinei.py /bin
export 导出容器压缩包
docker export 容器id > 文件名.tar
docker export 58714004fe41 > test.tar
把tar包导入成镜像
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 镜像用户,镜像名,镜像版本号都是自定义的,会导成镜像
cat test.tar | docker import - aaa/centos:7 -m "测试用"