Docker 常用命令

Image 命令

1.列出本地所有镜像

docker images
docker image ls

2.给本地镜像添加标签

docker tag [image_name]:[tag] [new_image_name]:[new_tag]

3. 查看镜像详细信息

docker inspect [image_name]:[tag]

4. 查看镜像历史

# 显示每层的具体内容
docker history [image_name]:[tag]

5.搜索镜像

# 搜索远端仓库中共享的镜像
# docker search [TERM[
docker search nginx

删除本地镜像

# 当有该镜像创建的容器存在时,不允许删除镜像,需要先删除容器
dockker rmi [image_name]:[tag]

创建镜像

  1. 基于已有镜像的容器创建
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# -m 提交注释
# -a 作者
docker commit -m "Add a new file" -a "author tony" d6cfbdd9258c test:0.1
  1. 基于本地模板导入
docker import [OPTIONS] file [URL]-[REPOSITORY[:TAG]]
# 以ubuntu举例
cat ubuntu-16.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
  1. 基于Dockerfile创建

存储镜像

导出镜像到本地文件

# 导出本地的ubuntu:14.04镜像为文件ubuntu_14.04.tar,复制ubuntu_14.04.tar分享给他人
docker save -o ubuntu_14.04.tar ubuntu:14.04

载入镜像

可以使用docker load 将导出的tar文件再导入到本地镜像库

docker load --input ubuntu_14.04.tar
或
fovkrt load < ubuntu_14.04.tar

上传镜像

将镜像上传到仓库,默认Docker Hub仓库

# docker push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]
# 1 . 添加标签
docker tag test:latest user/test:latest
# 2. 上传镜像
docker push user/test:latest

容器

创建容器

docker create -it ubuntu:latest
# -i 保持标准输入打开,默认为false
# -t 是否分配一个伪终端,默认为false
# 更多参数参看官方文档

启动容器

启动一个已经创建的容器

docker start [containerID 或 NAMES]

新建并启动容器

等价于先执行docker create, 再执行docker start命令

docker run [containerID 或 NAMES] [OPTIONS]
# -d 让Docker容器在后台以守护状态运行

终止容器

终止一个运行中的容器

docker stop [containerID 或 NAMES]

进入容器

# 推荐方式
docker exec -it [containerID 或 NAMES] [命令]

删除容器

删除处于中止或退出状态的容器

docker rm [containerID 或 NAMES]

查看容器信息

docker inspect [containerID 或 NAMES]

导出容器

导出一个已经创建的容器到一个文件,无论是否处于运行状态

# docker export [-o] [--output] [CONTAINER]
docker export -o test_for_run.tar ce5

导入容器

将导出的文件通过docker import命令导入变成镜像
既可以通过docker load将镜像存储文件导入到本地镜像库,也可以通过docker import将容器快照导入到本地镜像库
区别在于docker import将丢失所有历史信息与元数据信息,load将保持所有的信息,体积也更大

docker import test_for_run.tar - test/ubuntu:v1.0

仓库

登录

# 需输入用户名,密码
docker login

在仓库搜索镜像

docker search [镜像名]
# 根据是否为官方提供,分为基础镜像或叫根镜像和用户镜像
# 官方镜像使用单个单词命名不带用户名,用户镜像带用户名

搭建本地私有仓库

通过官方提供的registry镜像来搭建本地私有仓库

docker run -d p 5000:5000 -v /opt/data/registry:/temp/registry registry

容器数据管理

挂载数据卷

特性:

  1. 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便
  2. 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作
  3. 对数据卷的更新不会影响镜像,解耦了应用和数据
  4. 卷会一直存在,直到没有容器使用,可以安全的卸载它
# 加载主机的/src/webapp目录到容器的/opt/webapp目录
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
#  挂载数据卷默认是读写权限,可以通过ro指定为只读
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro

数据卷容器

需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。

# 创建一个数据卷容器dbdata
docker run -it -v /dbdata --name dbdata ubuntu
# 查看/dbdata目录
# 然后可以在其他容器中使用 --volumes-from来挂载dbdata容器中的数据卷
# 以下创建db1和db2两个容器,并从dbdata容器挂载数据卷
docker run -it --volumes-from dbdata --name db1 ubuntu2
docker run -it --volumes-from dbdata --name db2 ubuntu2
# 此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata目录,三个容器任何一方在该目录下的写入,其他容器都可以看到
# 多次使用--volumes-from参数来从多个容器挂载多个数据卷,还可以从其他已经挂载了容器卷的容器来挂载数据卷
docker run -d --name db3 --volumes-from db1 training/postgres
# 如果删除了挂载的容器,数据卷并不会被自动删除

删除容器卷

docker rmm -v [容器卷]

利用容器卷迁移数据

docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
# 1. 利用ubuntu镜像创建一个容器worker
# 2. 使用--volumes-from dbdata参数来让worker容器挂载dbdata容器的数据卷(即dbdata)
# 3. 使用 -v $(pwd):/backup参数来挂载本地的当前木到worker容器的/backup目录
# 4. worker容器启动后,使用了 tar cvf /backup/backup/tar /dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar 

恢复

将数据恢复到一个容器

# 1. 创建一个带有数据卷的容器dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
# 2. 创建一个新的容器,挂载dbdata2的容器,并使用untar 解压备份文件到锁挂载的容器中
docker  run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

端口映射与容器互联

端口映射访问容器

# -P(大写) Docker随机映射一个49000 ~ 49900的端口到内部容器开放的网络端口
docker run -d -O training/webapp python app.py
# -p(小写) 映射容器指定端口到本机指定端口,可以映射多个
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
# 映射一个特定地址
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
# 映射本机的任意端口到容器的5000端口,本地主机会自动分配一个端口
docker run -d -o 127.0.0.1::5000 training/webapp python app,py

查看端口映射配置

docker port nostalgic_morse 5000

互联机制实现便捷互访

通过自定义容器名来互联

# 1. 设置容器名字 (以下设置容器名字为db)
# 容器名字是唯一的,如果需要再次使用这个名称,需要先执行docker rm 删除现有db容器
docker run -d -P --name db training/postgres
# 2. 通过容器名字连接(以下web容器通过名字连接db容器)
docker run -d -P --name web --link db:db training/webapp python app.py
# 语法:--link name:alias name是要连接的容器名,alias是这个连接的别名
# 连接成功后,docker ps查看容器连接会发现 db容器 names列有db 也有 web/db表示允许web容器访问db容器的新消息

查看容器公开连接信息

方式一:更新环境变量

# 使用env参数查看环境变量
 docker run --rm --name web2 --link db:db training/webapp env
# 结果中DB_开头的环境变量是供web容器连接db容器使用的

方式二:更新 /etc/hosts文件
Docker会添加host信息到父容器

# 1. 进入父容器查看host信息
cat /etc/hosts
# 2. 查看db容器ip,获得连接ip
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值