Docker 常用命令

123 阅读5分钟

云原生 从docker、Jenkins、Kubernetes从入门到精通系列

Docker常用命令-原理剖析

1. Docker常见解析

1.1 拉取镜像

docker pull redis

解析:

命令与docker pull redis:latest相同,阿里云的镜像是从docker hub来的,如果配置了加速,默认是从阿里云(缓存)下载。

镜像是由基础环境+软件组成的。

redis的完整镜像应该是: linux系统+redis软件

alpine:超级经典版的linux 5mb;+ redis = 29.0mb

没有alpine3的:就是centos基本版

自己选择下载镜像的时候尽量使用 alpine: slim:


REPOSITORY(名) TAG (标签) IMAGE ID(镜像id) CREATED(镜像的创建时间) SIZE

redis 5.0.12-alpine3.13 50ae27fed589 6 days ago 29.3MB

redis latest 621ceef7494a 2 months ago 104MB

1.2 删除镜像

docker rmi -f $(docker images -aq) #删除全部镜像

docker image prune #移除游离镜像 dangling:游离镜像(没有镜像名字的)

1.3 创建容器

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

docker create [设置项] 镜像名 [启动] [启动参数...]

docker create redis: 按照redis:latest镜像启动一个容器

docker create --name myredis -p 6379(主机的端口):6379(容器的端口) redis

-p port1:port2 【port1是必须唯一的,port2是没关系的】

1.4 运行容器

docker run --name myredis2 -p 6379:6379 -p 8888:6379 redis

默认是前台启动的,一般加上-d 让他后台悄悄启动, 虚拟机的很多端口绑定容器的一个端口是允许的

docker run -d == docker create + docker start

docker create --name myredis -p 6379(主机的端口):6379(容器的端口) redis

-p port1:port2 【port1是必须唯一的】

1.5 进入容器

docker exec -it -u 0:0 --privileged mynginx4 /bin/bash: 0用户,以特权方式进入容器

1.6 查看容器配置

docker container inspect 容器名 = docker inspect 容器

docker inspect image /network/volume ....

1.7 容器提交

docker commit -a leifengyang -m "first commit" mynginx4 mynginx:v4

1.8 导入导出容器

docker export导出的文件被import导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令(docker ps --no-trunc),然后再用下面启动。

1.9 save/load操作镜像

docker save -o busybox.tar busybox:latest 把busybox镜像保存成tar文件

docker load -i busybox.tar 把压缩包里面的内容直接导成镜像

1.10 产生镜像的步骤
  1. 基于已经存在的容器,提取成镜像
  2. 人家给了我tar包,导入成镜像
  3. 做出镜像
  • 准备一个文件 Dockerfile ROM busybox CMD ping baidu.com
  • 编写 dockerfile
  • 镜像 docker build -t mybusy66:v6 -f Dockerfile .

2. Docker常见命令【查阅】

参考资料 :Docker命令手册

命令描述
docker build (legacy builder)从 Dockerfile 构建映像
docker builder管理构建
docker buildxDocker Buildx
docker checkpoint管理检查点
docker composeDocker 组成
docker config管理 Swarm 配置
docker container管理容器
docker context管理上下文
docker debug将 shell 放入任何容器或镜像中。使用“docker exec”进行调试的替代方法。
docker image管理图像
docker init为你的项目创建与 Docker 相关的启动文件
docker inspect返回有关 Docker 对象的低级信息
docker login登录注册表
docker logout从注册表注销
docker manifest管理 Docker 映像清单和清单列表
docker network管理网络
docker node管理 Swarm 节点
docker plugin管理插件
docker scoutDocker Scout 的命令行工具
docker search在 Docker Hub 中搜索镜像
docker secret管理 Swarm 机密
docker service管理 Swarm 服务
docker stack管理 Swarm 堆栈
docker swarm管理 Swarm
docker system管理 Docker
docker trust管理对 Docker 映像的信任
docker version显示 Docker 版本信息
docker volume管理卷

3.推送镜像的命令

image.png

  • 容器状态

    • Created(新建)
    • Up(运行中)
    • Pause(暂停)
    • Exited(退出)
  • 推送镜像

    • 注册docker hub并登录
    • 可以创建一个仓库,选为public
    • docker push linfang/mynginx:tagname
    • docker hub一个完整镜像的全路径是
    • docker.io/library/redis:alpine3.13 我们的 docker.io/linfang/mynginx:tagname
    • docker images的时候镜像缩略了全名 默认官方镜像没有docker.io/library/
    • docker.io/ rediscommander / redis-commander:latest
    • docker.io/linfang/mynginx:v4 我的镜像的全称
    • 登录远程docker仓库
    • 当前会话登录以后 docker login 。所有的东西都会push到这个人的仓库
    • docker push linfang/mynginx:tagname
    • 上面命令的完整版 docker push docker.io/linfang/mynginx:v4
    • 怎么知道是否登录了 cat ~/.docker/config.json 有没有 auth的值,没有就是没有登录
  • docker hub太慢了,用阿里云的镜像仓库,或者以后的habor仓库

    sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/linfang/mynginx:
    [镜像版sudo docker push registry.cn-hangzhou.aliyuncs.com/linfang/mynginx:[镜像版本号]
    
    仓库网址/名称空间(linfang/linfang)/仓库名:版本号
    

    4.典型命令

docker run 常见的options说明:

  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
  • --name="nginx-lb":为容器指定一个名称;
  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h "mars": 指定容器的hostname;
  • -e username="ritchie": 设置环境变量;
  • --env-file=[]: 从指定文件读入环境变量;
  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • --link=[]: 添加链接到另一个容器;
  • --expose=[]: 开放一个端口或一组端口;
  • --restart , 指定重启策略,可以写--restart=awlays 总是故障重启
  • --volume , -v: 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹