1.基础命令
Docker三个重要概念:仓库(Repository)、镜像(image)和 容器(Container)
Docker指令的基本用法:
docker +命令关键字(COMMAND)+一系列的参数
例子:docker run —name MyWordPress —link db:mysql -p 8080:80 -d wordpress
帮助命令
docker version #显示docker 版本信息 docker info #显示 docker 系统信息 包括镜像和容器数docker --help #帮助
镜像命令
docker tar
docker tar # 修改标签
docker tar tomcat:v1.0 192.168.88.10:5000/tomcat:v1.0
docker image
| 1 |
# 列出本地主机上的镜像 |
| 2 |
[root@kuangshen ~]# docker images |
| 3 |
REPOSITORY TAG IMAGE ID CREATED |
|
SIZE |
| 4 |
hello-world latest bf756fb1ae65 4 months ago |
|
13.3kB |
| 5 |
|
| 6 |
# 解释 |
| 7 |
REPOSITORY 镜像的仓库源 |
| 8 |
TAG 镜像的标签 |
| 9 |
IMAGE ID 镜像的ID |
| 10 |
CREATED 镜像创建时间 |
| 11 |
SIZE 镜像大小 |
| 12 |
|
| 13 |
# 同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同 |
|
的镜像,如果你不定义镜像的标签版本,docker将默认使用 lastest 镜像! |
| 14 |
|
| 15 |
# 可选项 |
| 16 |
-a: 列出本地所有镜像 |
| 17 |
-q: 只显示镜像id |
| 18 |
—digests: 显示镜像的摘要信息 |
docker search
| 1 |
# 搜索镜像 |
|
| 2 |
[root@kuangshen ~]# docker search mysql |
|
| 3 |
NAME DESCRIPTION |
STARS |
|
OFFICIAL |
|
| 4 |
mysql MySQL is a widely used, open-source relation… |
9484 |
|
[OK] |
|
| 5 |
|
|
| 6 |
# docker search 某个镜像的名称 对应DockerHub仓库中的镜像 |
|
| 7 |
|
|
| 8 |
# 可选项 |
|
| 9 |
—filter=stars=50 : 列出收藏数不小于指定值的镜像。 |
docker pull
| 1 |
# 搜索镜像 |
|
| 2 |
[root@kuangshen ~]# docker search mysql |
|
| 3 |
NAME DESCRIPTION |
STARS |
|
OFFICIAL |
|
| 4 |
mysql MySQL is a widely used, open-source relation… |
9484 |
|
[OK] |
|
| 5 |
|
|
| 6 |
# docker search 某个镜像的名称 对应DockerHub仓库中的镜像 |
|
| 7 |
|
|
| 8 |
# 可选项 |
|
| 9 |
—filter=stars=50 : 列出收藏数不小于指定值的镜像。 |
| 14 |
82a1cc65c182: Pull complete |
|
| 15 |
a0a6b01efa55: Pull complete |
|
| 16 |
bca5ce71f9ea: Pull complete |
|
| 17 |
Digest: |
|
|
sha256:61a2a33f4b8b4bc93b7b6b9e65e64044aaec594809f818aeffbff69a893d1944 |
# |
|
签名 |
|
| 18 |
Status: Downloaded newer image for mysql:latest |
|
| 19 |
docker.io/library/mysql:latest # 真实位置 |
|
| 20 |
|
|
| 21 |
# 指定版本下载 |
|
| 22 |
[root@kuangshen ~]# docker pull mysql:5.7 |
|
| 23 |
…. |
docker rmi
| 1 |
# 删除镜像 |
|
| 2 |
docker rmi -f 镜像id |
# 删除单个 |
| 3 |
docker rmi -f 镜像名:tag 镜像名:tag |
# 删除多个 |
| 4 |
docker rmi -f $(docker images -qa) |
# 删除全部 |
容器命令
创建容器并运行 docker run
| 1 |
# 命令 |
| 2 |
docker run [OPTIONS] IMAGE [COMMAND][ARG…] |
| 3 |
|
| 4 |
# 常用参数说明 |
| 5 |
—name=”Name” # 给容器指定一个名字 |
| 6 |
-d # 后台方式运行容器,并返回容器的id! |
| 7 |
-i # 以交互模式运行容器,通过和 -t 一起使用 |
| 8 |
-t # 给容器重新分配一个终端,通常和 -i 一起使用 |
| 9 |
-P # 随机端口映射(大写) |
| 10 |
-p # 指定端口映射(小结),一般可以有四种写法 |
| 11 |
ip:hostPort:containerPort |
| 12 |
ip::containerPort |
| 13 |
hostPort:containerPort (常用) |
| 14 |
containerPort |
| 15 |
|
| 16 |
# 测试 |
| 17 |
[root@kuangshen ~]# docker images |
| 18 |
REPOSITORY TAG IMAGE ID CREATED |
|
SIZE |
| 19 |
centos latest 470671670cac 3 months ago |
|
237MB |
| 20 |
|
| 21 |
# 使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令! |
| 22 |
[root@kuangshen ~]# docker run -it centos /bin/bash |
| 23 |
[root@dc8f24dd06d0 /]# ls # 注意地址,已经切换到容器内部了! |
| 24 |
bin etc lib lost+found mnt proc run srv tmp var |
| 25 |
dev home lib64 media opt root sbin sys usr |
列出所有运行的容器 docker ps
| 1 |
# 命令 |
| 2 |
docker ps [OPTIONS] |
| 3 |
|
| 4 |
# 常用参数说明 |
| 5 |
-a # 列出当前所有正在运行的容器 + 历史运行过的容器 |
| 6 |
-l # 显示最近创建的容器 |
| 7 |
-n=? # 显示最近n个创建的容器 |
| 8 |
-q # 静默模式,只显示容器编号。 |
退出容器
| 1 |
exit |
# 容器停止退出 |
| 2 |
ctrl+P+Q |
# 容器不停止退出 |
启动 停止容器 docker start|restart|stop|kill
| 1 |
docker |
start (容器id or 容器名) |
启动容器 |
| 2 |
docker |
restart (容器id or 容器名) |
重启容器 |
| 3 |
docker |
stop (容器id or 容器名) |
停止容器 |
| 4 |
docker |
kill (容器id or 容器名) |
强制停止容器 |
删除容器 docker rm
| 1 |
docker rm 容器id |
# 删除指定容器 |
| 2 |
docker rm -f $(docker ps -a -q) |
# 删除所有容器 |
| 3 |
docker ps -a -q|xargs docker rm |
# 删除所有容器 |
其它常用命令
后台启动容器
| 1 |
# 命令 |
| 2 |
docker run -d 容器名 |
| 3 |
|
| 4 |
# 例子 |
| 5 |
docker run -d centos # 启动centos,使用后台方式启动 |
| 6 |
|
| 7 |
# 问题: 使用docker ps 查看,发现容器已经退出了! |
| 8 |
# 解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命 |
|
令,就会自动退出。 |
| 9 |
# 比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下,容器启动后,会立即自 |
|
杀,因为他觉得没有程序了,所以最好的情况是,将你的应用使用前台进程的方式运行启动。 |
查看日志 docker logs
| 1 |
# 命令 |
| 2 |
docker logs -f -t —tail 容器id |
| 3 |
|
| 4 |
# 例子:我们启动 centos,并编写一段脚本来测试玩玩!最后查看日志 |
| 5 |
[root@kuangshen ~]# docker run -d centos /bin/sh -c “while true;do echo |
|
kuangshen;sleep 1;done” |
| 6 |
|
| 7 |
[root@kuangshen ~]# docker ps |
| 8 |
CONTAINER ID IMAGE |
| 9 |
c8530dbbe3b4 centos |
| 10 |
|
| 11 |
# -t 显示时间戳 |
| 12 |
# -f 打印最新的日志 |
| 13 |
# —tail 数字 显示多少条! |
| 14 |
[root@kuangshen ~]# docker logs -tf —tail 10 c8530dbbe3b4 |
| 15 |
2020-05-11T08:46:40.656901941Z kuangshen |
| 16 |
2020-05-11T08:46:41.658765018Z kuangshen |
| 17 |
2020-05-11T08:46:42.661015375Z kuangshen |
| 18 |
2020-05-11T08:46:43.662865628Z kuangshen |
| 19 |
2020-05-11T08:46:44.664571547Z kuangshen |
| 20 |
2020-05-11T08:46:45.666718583Z kuangshen |
| 21 |
2020-05-11T08:46:46.668556725Z kuangshen |
| 22 |
2020-05-11T08:46:47.670424699Z kuangshen |
| 23 |
2020-05-11T08:46:48.672324512Z kuangshen |
| 24 |
2020-05-11T08:46:49.674092766Z kuangshen |
查看容器中运行的进程信息 docker top
| 1 |
# 命令 |
|
|
| 2 |
docker top 容器id |
|
|
| 3 |
|
|
|
| 4 |
# 测试 |
|
|
| 5 |
[root@kuangshen ~]# docker top c8530dbbe3b4 |
|
|
| 6 |
UID PID PPID C STIME TTY |
TIME |
CMD |
| 7 |
root 27437 27421 0 16:43 ? |
00:00:00 |
/bin/sh -c …. |
查看容器/镜像得元数据 docker inspect
| 1 |
# 命令 |
| 2 |
docker inspect 容器id |
| 3 |
|
| 4 |
# 测试 |
| 5 |
[root@kuangshen ~]# docker inspect c8530dbbe3b4 |
| 6 |
[ |
| 7 |
{ |
| 8 |
# 完整的id,有意思啊,这里上面的容器id,就是截取的这个id前几位! |
| 9 |
“Id”: |
|
“c8530dbbe3b44a0c873f2566442df6543ed653c1319753e34b400efa05f77cf8”, |
| 10 |
“Created”: “2020-05-11T08:43:45.096892382Z”, |
| 11 |
“Path”: “/bin/sh”, |
| 12 |
“Args”: [ |
| 13 |
“-c”, |
| 14 |
“while true;do echo kuangshen;sleep 1;done” |
| 15 |
], |
| 16 |
# 状态 |
| 17 |
“State”: { |
| 18 |
“Status”: “running”, |
| 19 |
“Running”: true, |
| 20 |
“Paused”: false, |
| 21 |
“Restarting”: false, |
| 22 |
“OOMKilled”: false, |
| 23 |
“Dead”: false, |
| 24 |
“Pid”: 27437, |
| 25 |
“ExitCode”: 0, |
| 26 |
“Error”: “”, |
| 27 |
“StartedAt”: “2020-05-11T08:43:45.324474622Z”, |
| 28 |
“FinishedAt”: “0001-01-01T00:00:00Z” |
| 29 |
}, |
| 30 |
// ……….. |
| 31 |
进入正在运行中的容器 docker exec|attach
| 1 |
# 命令1 |
| 2 |
docker exec -it 容器id bashShell |
| 3 |
|
| 4 |
# 测试1 |
| 5 |
[root@kuangshen ~]# docker ps |
| 6 |
CONTAINER ID IMAGE COMMAND CREATED |
|
STATUS PORTS NAMES |
| 7 |
c8530dbbe3b4 centos “/bin/sh -c ‘while t…” 12 minutes |
|
ago Up 12 minutes happy_chaum |
| 8 |
[root@kuangshen ~]# docker exec -it c8530dbbe3b4 /bin/bash |
| 9 |
[root@c8530dbbe3b4 /]# ps -ef |
| 10 |
UID PID PPID C STIME TTY TIME CMD |
| 11 |
root 1 0 0 08:43 ? 00:00:00 /bin/sh -c while true;do |
|
echo kuangshen;sleep |
| 12 |
root 751 0 0 08:56 pts/0 00:00:00 /bin/bash |
| 13 |
root 769 1 0 08:56 ? 00:00:00 /usr/bin/coreutils — |
|
coreutils-prog-shebang=s |
| 14 |
root 770 751 0 08:56 pts/0 00:00:00 ps -ef |
| 15 |
|
| 16 |
# 命令2 |
| 17 |
docker attach 容器id |
| 18 |
|
| 19 |
# 测试2 |
| 20 |
[root@kuangshen ~]# docker exec -it c8530dbbe3b4 /bin/bash |
| 21 |
[root@c8530dbbe3b4 /]# ps -ef |
| 22 |
UID PID PPID C STIME TTY TIME CMD |
| 23 |
root 1 0 0 08:43 ? 00:00:00 /bin/sh -c while true;do |
|
echo kuangshen;sleep |
| 24 |
root 856 0 0 08:57 pts/0 00:00:00 /bin/bash |
| 25 |
root 874 1 0 08:57 ? 00:00:00 /usr/bin/coreutils — |
|
coreutils-prog-shebang=s |
| 26 |
root 875 856 0 08:57 pts/0 00:00:00 ps -ef |
| 27 |
|
| 28 |
# 区别 |
| 29 |
# exec 是在容器中打开新的终端,并且可以启动新的进程 |
| 30 |
# attach 直接进入容器启动命令的终端,不会启动新的进程 |
|
从容器拷贝文件到主机上 docker cp
| 1 |
# 命令 |
| 2 |
docker cp 容器id:容器内路径 目的主机路径 |
| 3 |
|
| 4 |
# 测试 |
| 5 |
# 容器内执行,创建一个文件测试 |
| 6 |
[root@c8530dbbe3b4 /]# cd /home |
| 7 |
[root@c8530dbbe3b4 home]# touch f1 |
| 8 |
[root@c8530dbbe3b4 home]# ls |
| 9 |
f1 |
| 10 |
[root@c8530dbbe3b4 home]# exit |
| 11 |
exit |
| 12 |
|
| 13 |
# linux复制查看,是否复制成功 |
| 14 |
[root@kuangshen ~]# docker cp c8530dbbe3b4:/home/f1 /home |
| 15 |
[root@kuangshen ~]# cd /home |
| 16 |
[root@kuangshen home]# ls |
| 17 |
f1 |
小结
总结





id号默认是128位 我们的系统只显示16位
run 延申
只能在run 后加入

例子 :
删除全部容器
docker rm -f $( docker - a -q )
后边列出 id 号 前边删除