去sudo执行
sudo groupadd docker // 添加docker任务组
sudo gpasswd -a $USER docker // 将登陆用户加入到docker用户组中
newgrp docker // 更新用户组
docker ps -a // 测试docker命令正常使用
版本信息
docker // 查看docker所有命令
docker version // 查看docker版本
docker info // 查看docker容器信息
镜像操作
docker images // 查看所有下载的镜像
docker images -q // 显示镜像id
docker search ubuntu // 镜像搜索。显示所有ubuntu镜像
docker search mysql // 显示mysql的所有镜像
docker pull ubuntu // 将ubuntu基本镜像下载到本地
docker pull redis // 下载最新镜像
docker pull -a redis // 下载仓库所有redis镜像
docker pull image_Name // 选择需要的镜像
docker rmi redis // 单个镜像删除
docker rmi -f redis // 强制删除
docker rmi -f redis tomcat // 删除多个镜像,空格分隔
镜像导入:
docker import image_name.tar // 导入镜像
docker import image_name.tar repository_name:tag // 导入并命名
docker load -i image_name.tar // 从文件载入镜像
docker load < image_name.tar // 从标准输入载入镜像
镜像导出:
docker export -o image_name.tar image_name:tag
docker save -o image_name.tar image_name:tag // 单个镜像导出
docker save -o image_name.tar image1 image2 image3
import 和 load的区别:
import是导入容器镜像快照,load是导入包含元数据和历史信息的镜像,体积更大export 和save的区别:
export是导出一个container,save是导出一个image,体积更大docker导入和导出:
save和load对应,export和import对应
#镜像tag添加/修改
docker tag image_id new_image_name:new_image_tag
docker inspect imageId // 查看镜像配置信息
docker history imageId // 显示镜像的创建过程(Dockerfile的执行过程)
# 反向工程存储镜像构建历史
docker history --no-trunc=true imageId > image_dockerfile
容器查看
docker ps -a // 查看有哪些docker容器,正在运行+历史运行
docker ps // 查看正在运行的容器
docker ps -n 3 // 显示最近创建的3个容器
docker inspect containerId // 查看容器的详细信息
watch -n 0.5 "docker ps" // 定时查看容器的活跃情况
容器的停止与删除
docker start containerId // 重新启动容器
docker stop containerId // 停止容器
docker stop $(docker ps -a) // 停止所有的在运行容器
docker kill containerId // 杀掉一个正在运行的容器
docker rm containerId // 删除一个已停止的容器
docker rm -f containerId // 删除一个正在运行的容器,否则会占内存 -f强制
docker rm -f $(docker ps -a -q) // 删除所有容器
容器创建与退出
docker exec -it containerId /bin/bash // 常用。进入容器,退出容器终端不会导致容器停止
docker run -it ubuntu:18.04 /bin/bash // 用18.04镜像为基础来启动容器
docker run -it --name myubuntu /bin/bash // 指定容器名字
docker create ubuntu:18.04
docker run -itd -p 6800:6800 image_name // 启动容器
-i 交互式操作
-t 终端
-d 后台启动容器,终端关闭仍运行
-p 指定端口号
/bin/bash 放在镜像名后的是命令,表示shell交互
exit // 关闭容器并退出
// 容器创建
docker run -i -t ubuntu /bin/bash // 基于ubuntu镜像创建容器
docker run -i -t --name myContainer ubuntu /bin/bash // 基于ubuntu镜像创建交互型容器
(docker run -i -t --name=container_name image_directory /bin/bash)
(docker run -i -t --name=container_name image_directory:tag /bin/bash)
docker run --name myContainer -d ubuntu /bin/bash // -d创建后台型容器;通过docker ps查看
docker create 和 docker run的区别
create只是创建,容器处于停止状态;
run不止创建,而且启动了容器
容器创建时设置root权限
docker run -it --privileged=true --name=myContainer image_name /bin/bash
--privileged参数用于docker容器获取主机root权限,使用该参数,主机内的root拥有真正的root权限,可以看到host上的设备,且可以执行mount进行挂载 ;
否则容器内的root只是外部的一个普通用户权限
查看单个镜像/容器的大小
docker system df -v
查看容器内存使用情况
docker stats
日志log
docker logs containerId // 显示容器日志
docker logs -f -t --tail=20 containerId // 跟踪显示带时间戳的最新20条日志
数据拷贝
# 文件和文件夹拷贝都是cp,不用家加-r,不同于scp
docker cp containerId:file_path/file local_path // docker到host
docker cp local_path containerId:file_path // host到docker
镜像创建:手动
# -m添加评注,-a作者,image仓库:版本
docker commit -m "your comment" -a "author" containerId image_directory:tag
镜像创建:自动,Dockerfile
# .表示当前目录,代表从本目录的Dockerfile执行;也可以写成绝对路径
docker build -t imageName:Tag .
镜像推送
docker login 远程ip:端口 # 登录远程仓库 或者
docker login 远程仓库地址 # 不带http://
docker tag image_id repo:tag_name # 给要推送的镜像加tag
docker push 远程仓库名字:tag_name # 远程仓库名字 = 地址/你的命名空间/仓库名字
挂载本地目录
docker run -it --name=myContainer -v /local/path:/container/path image_repotory /bin/bash
参数使用:- -net和- -gpus
使用- -net设置网络模式
- -net=host,容器使用宿主机host的网络空间
- -net=none,容器放到隔离的网络栈中,不进行网络配置。用户可自行配置
- -net=container,和指定容器共享网络环境,除了网络其他均是隔离的
- -net=bridge,默认模式。主机先和虚拟网桥docker0建立连接,然后新建容器和docker0建立虚拟网络对veth pair。主机和容器可通信,网桥连接的容器间也可以通信,容器可以访问外部网络,但其他物理主机访问容器需要通过NAT进行设置。
docker run -it --net=host --name=container_name image_name /bin/bash
docker中使用GPU须使用打开- -gpus,且docker要求在19.0版本以上
# 使用所有的GPU
docker run -it --gpus all --name=container_name image_name /bin/bash
# 使用2个GPU
docker run -it --gpus 2 --name=container_name image_name /bin/bash
# 使用指定的GPU
docker run -it --gpus '"device=1,2"' --name=container_name image_name /bin/bash
created by shuaixio, 2021.11.18