Docker 命令图
Docker 常用命令
帮助命令
1
2
3
4
5
| docker version # docker 版本信息
docker info # 显示 docker 系统信息
docker --help # 帮助命令
docker stats # 查看 docker 资源占用情况命令
docker system df # 查看镜像、容器、数据卷所占用的空间
|
Docker 进程相关命令
1
2
3
4
5
6
| systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker #查看Docker服务状态
systemctl enable docker #设置开机自启
# 需要Root权限,前面加sudo
|
images 镜像相关命令
镜像名
- 镜像名称一般分两部分组成:
[repository]:[tag]
- 在没有指定
tag
时,默认是 latest
,代表最新版本的镜像
查看本机中所有镜像 docker images
1
2
3
| docker images # 列出本地所有镜像
-a # 列出所有镜像(包含中间映像层)
-q # 只显示镜像id
|
 |
REPOSITORY
# 镜像的仓库TAG
# 镜像的标签IMAGE ID
# 镜像的 IDCREATED
# 镜像的创建时间SIZE
# 镜像的大小
搜索镜像 docker search
1
2
3
| docker search [options] 镜像名 # 去dockerhub上查询当前镜像
--filter stars=20 # 列出收藏数不少于20的镜像
--no-trunc # 显示完整的镜像信息
|
 |
 |
从仓库下载镜像 docker pull
1
2
3
| docker pull 镜像名[:TAG|@DIGEST]
# 示例
docker pull nginx
|
加载镜像
1
| docker load -i nginx.tar
|
导出镜像 docker save
1
2
3
| docker save -o
# 示例
docker save -o nginx.tar nginx:latest
|
 |
删除镜像 docker rmi
1
2
3
4
5
6
| docker rmi 镜像名 # 删除镜像
-f # 强制删除
# 如:删除最新的nginx镜像
docker rmi nginx:latest
docker rmi `docker images -q` # 删除所有本地镜像
|
实操
操作 redis 镜像
 |
 |
 |
- 打包最新的 redis 镜像为
redis.tar
1
| sudo docker save -o redis.tar redis:latest
|
 |
1
2
| docker rmi redis:latest
docker iamges
|
 |
1
| docker load -i redis.tar
|
 |
contrainer 容器相关命令
 |
- docker ps # 查看所有正在运行的容器和状态
- docker run 参数
- docker exec 参数 # 进入容器
- docker stop 容器名称
- docker start 容器名称镜像名 /bin/bash
- docker rm 容器名称 运行状态删除失败
- docker inspect 容器名称 # 查看容器信息
- docker logs 查看容器运行日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| # 1.运行容器
docker run 镜像名 # 镜像名新建并启动容器
--name # 别名为容器起一个名字
-d # 启动守护式容器(在后台启动容器)
-p # 映射端口号:原始端口号 指定端口号启动
# 例:docker run -it --name myTomcat -p 8888:8080 tomcat
# docker run -d --name myTomcat -P tomcat
# 2.查看运行的容器
docker ps # 列出所有正在运行的容器
-a # 正在运行的和历史运行过的容器
-q # 静默模式,只显示容器编号
# 3.停止|关闭|重启容器
docker start 容器名字或者容器id # 开启容器
docker restart 容器名或者容器id # 重启容器
docker stop 容器名或者容器id # 正常停止容器运行
docker kill 容器名或者容器id # 立即停止容器运行
# 4.删除容器
docker rm -f 容器id和容器名
docker rm -f $(docker ps -aq) # 删除所有容器
# 5.查看容器内进程
docker top 容器id或者容器名 # 查看容器内的进程
# 6.查看查看容器内部细节
docker inspect 容器id # 查看容器内部细节
# 7.查看容器的运行日志
docker logs [OPTIONS] 容器id或容器名 # 查看容器日志
-t 加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
# 8.进入容器内部
docker exec [options] 容器id 容器内命令 # 进入容器执行命令
-i 以交互模式运行容器,通常与-t一起使用
-t 分配一个伪终端 shell窗口 bash
# 9.容器和宿主机之间复制文件
docker cp 文件|目录 容器id:容器路径 # 将宿主机复制到容器内部
docker cp 容器id:容器内资源路径 宿主机目录路径 # 将容器内资源拷贝到主机上
# 10.数据卷(volum)实现与宿主机共享目录
docker run -v 宿主机的路径|任意别名:/容~器内的路径 镜像名
#注意:
#1.如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
#2.如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中
# 11.打包镜像
docker save 镜像名 -o 名称.tar
# 12.载入镜像
docker load -i 名称.tar
# 13.容器打包成新的镜像
docker commit -m "描述信息" -a "作者信息" #(容器id或者名称)打包的镜像名称:标签
|
docker run
作用: 创建并启动容器
run 参数说明:
-i
: 保持容器运行。通常与 -t
同时使用。加入 it 这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。-t
: 为容器重新分配一个伪输入终端,通常与 -i
同时使用。-d
: 以守护 (后台) 模式运行容器。创建一个容器在后台运行,需要使用 docker exec 进入容器。退出后,容器不会关闭。-it
: 创建的容器一般称为交互式容器,-id
: 创建的容器一般称为守护式容器--name
: 为创建的容器命名。
示例:
1
2
3
| docker run -it --name=c1 centos:7 /bin/bash # 创建交互式容器
docker run -id --name=c2 centos:7 # 创建守护式容器
# 注意:交互式容器,exit后容器自动关闭,守护式容器会在后台执行
|
docker exec 进入容器
1
| docker exec -it c2 /bin/bash #进入容器
|
停止、启动、删除、查看容器
1
2
3
4
5
6
7
8
9
10
11
12
| # 停止容器
docker stop 容器名称
# 启动容器
docker start 容器名称
# 删除容器 如果容器是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名称
docker -f rm 容器名称(强制删除)
# 查看容器信息
docker inspect 容器名称
|
Docker 数据卷
数据卷概述
数据卷概念和作用
数据卷 (Volume) 是一个虚拟目录,指向宿主机文件系统中的某个目录。
 |
数据卷作用: 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。
数据卷命令
数据卷基本命令
docker volume
命令是数据卷操作,根据命令后跟随的 command 来确定下一步的操作:
create
创建一个 volumeinspect
显示一个或多个 volume 的信息ls
列出所有的 volumeprune
删除未使用的 volumerm
删除一个或多个指定的 volume--hlep
查看帮助文档
示例: 创建数据卷 html:
1
| sudo docker volume create html
|
查看所有数据卷:
查看指定数据卷详细信息 html
1
| sudo docker volume inspect html
|
删除未使用的数据卷:
删除指定的数据卷:
数据卷挂载到容器中
在创建容器时,可以通过 -v
参数来挂载一个数据卷到某个容器目录
1
| docker run ... -v 宿主机目录(文件):容器内目录(文件) ...
|
注意:
- 容器目录必须是绝对路径
- 如果目录不存在,会自动创建
- 可以挂载多个数据卷
示例1
:
1
2
3
4
5
| docker run \ # 创建并运行容器
--name mn \ # 给容器起名叫mn
-v html:/root/html \ # 把html数据卷挂载到容器内的/root/html这个目录
-p 8080:80 \ # 将宿主机8080端口映射到容器内的80端口
nginx # 镜像名称
|
示例2:
创建 c1
挂载 /root/data
–>到 /root/data_container
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash
# 关闭容器,可以看到数据卷数据文件还在
docker stop c1 # 宿主机目录还在
# 删除容器c1,宿主机目录还在
docker rm c1
# 重新恢复c1
docker run -it --name=c1 -v ~/data:/root/data_container centos:7 /bin/bash
# 注意在容器中不能写~
# 两个容器挂载同一个数据卷
docker run -it --name=c3 -v /root/data:/root/data_container centos:7 /bin/bash
docker run -it --name=c4 -v /root/data:/root/data_container centos:7 /bin/bash
# 在一个容器中修改文件,看到另一个容器也跟着
|
多容器挂载同一个数据卷
多容器进行数据交换,多个容器挂载同一个数据卷容器,完成数据交互
示例:
1
2
3
4
5
6
7
8
9
10
| # 创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
## 这里没有指定宿主机目录,默认生成一个宿主机目录
docker inspect c3 #查看c3
# 创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
## 使用 c3数据卷容器创建c1,c2,这时即使c3关闭不影响c3,c4交互
|
数据卷挂载和目录挂载
 |
docker run 的命令中通过 -v 参数挂载文件或目录到容器中:
- -v
volume名称
: 容器内目录
- -v
宿主机文件
: 容器内文件
- -v
宿主机目录
: 容器内目录
数据卷挂载与目录挂载区别:
- 数据卷挂载耦合度低,由 docker 来管理目录,但是目录较深,不好找
- 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看
数据卷示例
创建并运行一个 MySQL 容器,将宿主机目录直接挂载到容器
目录挂载与数据卷挂载的语法是类似的:
-v[宿主机目录]:[容器内目录]
-v[宿主机文件]:[容器内文件]
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 创建目录
mkdir -p /tmp/mysql/conf
mkdir -p /tmp/mysql/data
# 挂载命令
docker run \
--name mysql \
-e root=123456 \
-p 3306:3306 \
-v /tmp/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25
|
示例
创建 nginx 容器
创建运行一个 nginx 容器
1
| docker run --name my_nginx3 -p 8011:80 -d nginx
|
- docker run 创建并运行一个容器;如果镜像不存在,会先拉取镜像
--name
给容器起一个名字-p 主机端口:容器端口
将宿主主机端口与容器端口映射,左侧是宿主主机端口,右侧是容器端口-d
后台运行容器- nginx 镜像名称
容器创建产生唯一 ID:
查看容器状态:docker ps
访问页面:http://hacket.me:8011/
查看容器日志:docker logs my_nginx3
持续日志输出:docker logs -f my_nginx3
进入 nginx 容器,修改 HTML 文本内容
1
| docker exec -it my_nginx3 bash
|
1
| cd /usr/share/nginx/html
|
1
2
| vim index.html
# vim 命令不存在,这是由于docker 镜像只保留必要的命令
|
创建一个 nginx 容器,映射数据卷,修改容器内的 html 目录的 index.html
1
2
3
4
5
6
7
8
9
10
| # nginx的html目录在容器内的/usr/share/nginx/html,需要把这个目录挂载到html这个数据卷上,方便操作其中的内容,创建运行容器时使用-v参数挂载数据卷
## 创建容器并挂载数据卷到容器内的html目录 如果没有数据卷会自动创建数据卷:
docker run --name mn -v html:/usr/share/nginx/html -p 8123:80 -d nginx
## 进入html数据卷所在位置,修改html内容
### 查看html数据卷在宿主机的位置
docker volume inspect html
### 进入该目录
cd /var/lib/docker/volumes/html/_data
### 修改文件
vim index.html
|
redis
创建并运行一个 redis 容器,并且支持数据持久化
1
| docker run --name my_redis -p 6379:6379 -d redis redis-server --appendonly yes
|
进入容器:
1
2
| docker exec -it my_redis bash
redis-cli
|
 |
一步到位:
1
| docker exec -it my_redis redis-cli
|