docker0-常规操作

问君哪得清如许,为有源头活水来

1,帮助命令

docker version
docker info
docker 命令 --help

2,仓库\镜像(增删查)

docker pull ~							默认下载tag为latest的镜像
docker pull ~:***						下载tag为***的镜像(要保证远程仓库有该tag的镜像)
============================================================================================================
docker rmi -f ~							通过名称/ID删除镜像(不指定tag,默认删除latest)
docker rmi -f ~:***
docker rmi -f IMAGEID
docker rmi -f ID ID ID					        删除多个images
docker rmi -f $(docker images -aq)		                删除所有的images
============================================================================================================
docker images							查看所有本地镜像
docker images -a/--all					        显示所有本地镜像
docker images -q/--quiet				        只显示本地镜像的ID

docker search ~							搜索镜像~		https://registry.hub.docker.com/
docker search ~ --filter=stars=5000		                根据收藏数搜索镜像(搜索收藏数在指定数目之上的镜像)

3,容器(运行起来的镜像)(增删查启停)

docker run ~							启动镜像
docker run --name "Name" ~ 				        给容器命名以加以区分
docker run -d ~ 						后台运行(必须要有前台进程,否则会自动停止)
docker run -i/-t/-it ~ 					        交互方式运行(-t表示让docker分配一个为终端(pseudo-tty)并绑定到容器的标准输入上,-i表示让容器的标准输入保持打开)										      
exit/ctrl+d/ctrl+p+q/ctrl+c				        从容器退回主机(容器停止退出/停止退出/不停止退出/不停止退出)
docker run -p 	~						指定端口
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口				        主机端口与容器端口映射(一般域名解析默认80端口,容器端口可以在docker hub查询)
	-p 容器端口
docker run -P ~							随机指定端口
============================================================================================================
docker rm id							删除容器(不能删除正在运行的容器)
docker rm -f id							强制删除(可以删除正在运行的容器	)
docker rm -f $(docker ps -aq)			                删除所有的容器
docker ps -a -q|xargs docker rm			                删除所有的容器
============================================================================================================
docker ps							查看正在运行的容器
docker ps -a							查看正在运行以及历史运行过的容器
docker ps -n=**							查看最近创建的**个容器
docker ps -q							只显示容器的编号
============================================================================================================
docker start id							启动容器
docker restart id 						重启容器
docker stop id							停止容器(先发 SIGTERM 信号给容器,允许其在一定时间(默认 10s)内进行一些操作,	若这段时间内容器未停止,则发送 SIGKILL 信号强行杀掉容器)
docker kill id							停止容器(直接发送 SIGKILL 信号杀掉容器)

当使用docker run命令创建启动容器时,Docker在后台运行的标准操作有下面几个步骤

1、检测本地是否存在指定的镜像,不存在就从公有仓库下载

2、利用镜像创建并启动一个容器

3、分配一个文件系统,并在只读的镜像层外面挂载一层可读写层

4、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去

5、从地址池配置一个IP地址给容器

6、执行用户指定的应用程序

7、执行完毕后终止容器

4,容器日志、进程、元数据、镜像变更历史的查看

docker logs	容器id					   打印容器日志信息(可通过--help查看options)
docker logs -f -t 容器id				           显示时间戳(ctrl+c退出)
docker logs 容器id -f -t --tail num

docker top 容器id				           查看容器内部进程信息

docker inspect 容器id					   查看容器元数据(十分详细)

docker history 镜像id					   查看镜像的变更历史(镜像是如何根据dockerfile一步步构建的,可以看暴露的端口、卷挂载、工作目录等)

5,进入正在运行的容器和拷贝

docker exec -it id bashshell(/bin/bash)	   进入容器后开启一个新的终端,可以进行操作(docker exec -it id 命令/比如还可以跟ip addr看容器网络配置)

docker exec -it 容器id ~		                   exec指令的含义是在目标容器中执行指令~

docker attach id				   进入容器正在执行的终端,不启动新的进程

docker cp 容器id:容器内路径 目的主机路径		   从容器内拷贝文件到主机上

6,创建新的镜像

docker2-镜像原理及创建新的镜像

'''commit'''
docker commit -m='提交的容器信息' -a='作者' 容器id 目标镜像名:tag		commit与git本地类似

'''dockerfile'''
写一个dockerfile文件
docker build -f ~(dockerfile) -t ~(image名称):tag .

'''上传镜像到dockerhub'''
docker login -u -p							 登录
docker push 名字/镜像:tag					         镜像命名时/前面的部分要与dockerhub用户名一致(不行就用tag改)

7,目录挂载/数据卷

docker run -it -v 主机目录:容器目录							和-p类似
是否成功可以通过 docker inspect 中的Mounts查看

===========================================================================================
匿名挂载
docker run -v 容器目录									不指定名字就直接是容器内的目录
docker volume ls									查看所有卷的名称
docker volume insepct 卷的名称							        查看卷的具体信息(其中Mountpoint就是卷的挂载位置)
										       (如果要看容器的挂在情况,docker inspect 容器id 看Mounts)					
具名挂载(常用)
docker run -v 名称:容器目录							        为容器内目录指定名称(名称不加/,与主机目录不同)
										        我的服务器上,匿名和具名卷都挂载在/var/lib/docker/volumes(不指定主机目录都在这)																		     
													   
指定路径挂载
docker run -v /主机路径:容器目录						                指定容器在主机的挂在路径(主机路径以/开头)

===========================================================================================
ro/rw 改变读写权限:一旦设置了权限,容器对挂载出来的内容就有限定了
ro:read only										只读,该路径只能通过宿主机操作,容器内无法操作
rw:read write										读写(默认),容器对宿主机上的该路径可操作
例子
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx

===========================================================================================
docker run --volumes-from 容器id 镜像					                多个容器数据同步(数据卷容器,父目录中同步的目录要挂载在主机上)

8,docker网络,容器编排,集群部署

docker4-docker网络,容器编排,集群部署

ip addr										   获取当前ip地址
docker exec -it 容器id ip addr						   	   获取容器ip地址

--link										   实现容器名进行容器间通信
docker network ls								   显示网络信息
docker network insepect 网络id						   	   显示其中一个网络的具体信息

docker network create --driver ~ --subnet ~ --gateway ~ ~	                   创建网络
docker run -d -P --name ~ --net ~ tomcat					   --net设置使用哪个网络运行容器
docker network connect [OPTIONS] NETWORK CONTAINER			           容器连通网络

9,下载镜像并运行容器的一般步骤

  1. docker search搜索镜像 或者去docker hub搜索 (可以在hub看run时需要输入的命令)
  2. docker pull下载镜像
  3. docker run启动容器

10,run时可选项总结

-d							后台运行
-it							交互运行
-p 主机端口:容器端口			                端口映射
-v 主机目录:容器目录			                目录挂载
-e							环境配置

11,一些技巧

docker run -it --rm ~						用于测试,用完即删除
docker stats							查看cpu的状态
-e								修改配置
一个例子:
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2 

docker rm -f 运行中的容器id					直接停止并删除运行中的容器

docker rm -f $(docker ps -aq)				        清除所有容器
docker rmi -f $(docker images -aq)			        清除所有镜像

12,docker配置gpu深度学习开发环境

主要参考:
2021年 Windows10 环境下使用WSL和Docker 配置深度学习环境- 可使用任意版本的 Ubuntu+CUDA image 以及踩坑记录
WIN10与WSL ubuntu文件互通
辅助参考:
Windows系统WSL2 的ubuntu子系统安装 docker、nvidia-docker调用GPU
cudnn镜像_Docker:小白入门 + 搭建GPU版PyTorch Docker镜像

附录1-docker全景

posted @ 2021-06-21 19:32  tensor_zhang  阅读(126)  评论(0编辑  收藏  举报