您的位置:首页 > 运维架构 > Docker

docker常用命令使用样例

2018-01-02 10:25 483 查看

使用镜像

# 下载镜像
docker pull ubuntu:14.04
# 列出镜像
docker images
#启动镜像
# i 交互操作
# t 终端
# rm 退出容器时将镜像删掉 一般是docker rm 才可以删除,随便执行看看有无作用
# bash 进入bash交互
docker run -it --rm ubuntu:14.04 bash
# 退出容器
exit


管理镜像

#查询镜像
docker search image_name

# docker下载镜像命令
docker pull [选项] [docker_registryj地址]<仓库名>:标签
#停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
#查看当前有些什么images
docker images
#删除images,通过image的id来指定删除谁
docker rmi <image id>
#想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
#要删除全部image的话
docker rmi $(docker images -q)

#显示包括中间层镜像
# -a 将中间层镜像一起显示
docker images -a
#根据仓库名列出镜像
# docker images <仓库名>
docker images ubuntu
#列出特定的某个镜像
# docker images <仓库名>:标签
#使用过滤器 --filter 简写 -f 后面有参数
#-f since=<仓库名>:标签  在什么镜像之前
#-f before=<仓库名>:标签 在什么镜像之后
#-f label=LABRL 镜像构建时定义的label
docker images -f since=ubuntu:14.04
#-q 只显示image id
docker images -q
#使用go的模板语法列出镜像ID和仓库名
docker images --format "{{.ID}}:{{.Repository}}"
#表格列出列表
docker images --format "table{{.ID}}\t{{.Repository}}\t{{.Tag}}"


redis安装启动模板

➜  ~ docker pull redis:3.2
3.2: Pulling from library/redis
f5cc0ee7a6f6: Pull complete
5fc25ed18e87: Pull complete
e025bc8872f6: Pull complete
0d8edb7c8bd1: Pull complete
654cb9d60232: Pull complete
44888ef53075: Pull complete
Digest: sha256:4e2af5470298aa3c79fba07216f0245fff5278b66f40681cf448eabca0bb966b
Status: Downloaded newer image for redis:3.2
➜  ~ docker ps -a -q
➜  ~ docker run --name redis01 -d -p 6379:6379 redis:3.2
bd067673a23fb10e2fc17f2b742ab50af730d91e78226275529019fe8326ed3f
➜  ~ docker exec -it redis01 bash
root@bd067673a23f:/data#
root@bd067673a23f:/data# redis-cli
127.0.0.1:6379> exit
root@bd067673a23f:/data# exit
exit
##利用容器内的redis-cli连接到本机再连接到容器的redis
root@bd067673a23f:/data# redis-cli -h 192.168.31.60
192.168.31.60:6379> exit
root@bd067673a23f:/data#exit
exit


启动镜像参数

docker run [选项]<参数> <仓库名>:标签 容器启动命令
# -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
# -d: 后台运行容器,并返回容器ID;
# -i: 以交互模式运行容器,通常与 -t 同时使用;
# -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=[]: 开放一个端口或一组端口
# -p=宿主端口:容器端口 本机端口映射容器端口
# -v 宿主卷目录挂在到容器的某个目录,以利于c$PWD/data:/data:将主机中当前目录下的data挂载到容器的/data
docker run --name webserver -d -p 80:80 nginx


进去已启动的容器进行配置

docker exec [选项]<参数> 容器名 bash
# -d :分离模式: 在后台运行
# -i :即使没有附加也保持STDIN 打开
# -t :分配一个伪终端
docker exec -it webserver bash

#根据需求修改容器内容
#查看修改内容
docker diff 容器名

#从修改过的容器创建镜像
# --author "修改的作者信息"
# --message "记录本版本修改的内容"
docker commit [选项] <容器ID或容器名> [<仓库名>[:<新的标签>]]

~ docker diff redis01
C /root
A /root/.bash_history
A /root/.rediscli_history
➜  ~ docker commit --author "linbingcheng <bingchenglin@qq.com>" \
> --message "测试测试" redis01 redis:newtest
sha256:51625f00ff093e7dd29d770156f157be9c06b48d75642a01ddd85eec95725152

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               newtest             51625f00ff09        54 seconds ago      99MB
redis               3.2                 4e482b286430        3 weeks ago         99MB
ubuntu              14.04               4a2820e686c4        3 weeks ago         188MB

##查看镜像修改历史
docker history redis:newtest
redis:newtest 就是一个新生成的镜像了,可以用来使用

docker commit 用于学习和保存被入侵现场,否则不适合用来定制镜像,定制行为应使用dockerfile 来完成 (原因是生成的镜像会很臃肿)


docker inspect [NAME]/[CONTAINER ID]:images只会列出镜像的基本信息,详细信息可以通过inspect命令查看:

保存和加载镜像(save、load)

# 保存镜像到一个tar包; -o, --output="" Write to an file
$docker save image_name -o file_path
# 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file
$docker load -i file_path

# 机器a
$docker save redis:newtest > /Users/linbingcheng/Desktop/redis.tar
# 使用scp将save.tar拷到机器b上,然后:
$docker load < /Users/linbingcheng/Desktop/redis.tar


进入容器

docker attach 容器名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息