本人系统为ubuntu18.04,用于深度学习使用

1 Docker下载

ubuntu版docker下载地址

按照方法一步一步下载即可

帮助手册:https://docs.docker.com/reference/   

2 基础命令

2.1 镜像命令

镜像是每个容器的底层,没有镜像无法创建容器

# docker 帮助
docker <IMAGE ID> --help 
docker version # 显示docker版本 
docker info # 显示docker详细信息

# 查看已安装库 
docker images
-a # 历史显示(曾经安过,现在删除了也会显示)
-q # 只显示镜像ID

# 搜索镜像
docker search <IMAGE NAME> 
--fiter=STARS=3000 # 搜索下载量(?)大于3000的

# 下载镜像
docker pull <IMAGE NAME>[:tag] #无版本默认最新版
# 例
docker pull ubuntu:18.04 # 下载18.04版本的ubuntu

# 删除对应ID的镜像
docker rmi -f <IMAGE ID> 
docker rmi -f $(dockerimages -aq) # 删除全部镜像

2.2 容器命令

# 新建容器并启动
docker run ['可选参数'] <IMAGE NAME>
# 参数说明
--name='Name" # 容器名字 ubuntu01 ubuntu02 区分容器
-d # 后台方式运行
-it # 交互方式运行,进入容器查看内容
-p # 指定容器端口 -p 8080:8080
""" 
格式 -p ip:主机端口:容器端口
     -p 主机端口:容器端口
	 -p 容器端口 
"""
# 例1. 交互式启动
docker run -it ubuntu:18.04 /bin/bash # 启动并进入容器,进入ubuntu,可运行linux命令
# 例2. 后台启动
docker run -d <IMAGE NAME>
# tips: 若下载的镜像有版本号,运行时带上版本号,默认运行是latest(最新版)

# 退出容器
exit # 停止并退出容器
Ctrl + P + Q # 退出不停止容器

# 列出所有容器
docker ps # 正在运行的
-a # 正在运行的 + 历史运行的
-n=? # 显示最近创建的容器 -n=1 个数
-q # 只显示容器的编号

# 删除容器
docker rm <CONTAINER ID> # 删除指定容器,不能删除正在运行的程序 
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器

# 启动和停止
docker start <CONTAINER ID> # 启动一个或多个已经被停止的容器
docker restart <CONTAINER ID> # 重启一个或多个已经被停止的容器
docker stop <CONTAINER ID> # 停止容器
docker kill <CONTAINER ID> # 强制停止容器

# 查看日志
docker logs
-tf --tail n <CONTAINER ID> # 字符形式显示n条日至信息

# 查看进程信息
docker top <CONTAINER ID> 

# 查看镜像和容器数据
docker inspect <CONTAINER ID> # 查看容器内数据 <重要!!!!!>
docker inspect <IMAGE ID> # 查看镜像数据

# 进入当前正在运行的容器
docker exec -it <CONTAINER ID> /bin/bash # 方式一 进入容器后开启新的终端
docker attach <CONTAINER ID> # 方式二 进入正在运行的终端

# 从容器内拷贝到主机
dock cp <CONTAINER ID:容器内路径> <主机目标路径> # 拷贝
# 例
docker cp 6b400aa2c02e:/home/hg.py /home/hgzhg
# 拷贝多个文件较为复杂,可采用挂载方式完成容器和宿主机的自动传输

2.3  挂载

***要点!!!***

2.3.1 容器数据卷介绍

容器之间数据共享,docker容器中产生的数据同步到本地。即为将容器内的目录挂载到Linux上,容器和主机的该目录中所有文件共享,即使关掉容器也可以往内部添加文件。

2.3.2 直接挂载

挂载 -v <宿主机目录>:<容器内目录>

docker run -it -v -p <宿主机目录>:<容器内目录> <IMAGE NAME> 
# 例
docker run -it -v /home/hgzhg/test:/home ubuntu:18.04 /bin/bash

将宿主机目录 /home/hgzhg/test 与容器内目录 /home 挂载,内部文件共享。                                      

可使用 docker inspect 查看容器内挂载情况

docker 运行ubantu gui_hg

 MOUNTS内会显示挂载信息

2.3.3 具名挂载&匿名挂载

具名挂载 --name=<NAME> -v <容器内目录>

docker run -it --name=<VOLUME NAME> -v /usr/home <IMAGE NAME> # 只有容器内路径 有<VOLUME NAME>

用 docker inspect 查看容器内挂载情况

docker 运行ubantu gui_docker_02

匿名挂载 -v <容器内目录>

docker run -it -v /usr/home <IMAGE NAME> # 只有容器内路径 无主机路径 无<VOLUME NAME>

用 docker inspect 查看容器内挂载情况

docker 运行ubantu gui_docker 运行ubantu gui_03

所有docker容器的卷,没有指定目录时都是在 /var/lib/docker/volumes/xxx/_data

挂载后,可以查看所有volume的情况

docker volume ls

只会显示VOLUME NAME没有命名

总结:

-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径::容器内路径 # 指定路径挂载

2.4 Docker快照

保存工作状态

docker commit -m="提交的描述信息" -a="作者" <CONTAINER ID> <MYIMAGE NAME>:[TAG]
# 例
docker commit -a='hgzhg' -m='test' 6b400aa2c02e hgubuntu:1.0 # 镜像名字小写