Docker常用命令
官方文档都给常用的命令给出了详细的解释 官方文档
1. docker images 查看本地主机的所有镜像
[root@node01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 9da615fced53 40 hours ago 514MB
hello-world latest feb5d9fea6a5 2 weeks ago 13.3kB
#解释:
1.REPOSITORY 镜像的仓库源
2.TAG 镜像的标签
3.IMAGE ID 镜像的id
4.CREATED 镜像的创建时间
5.SIZE 镜像的大小
# 可选参数
-a/--all 列出所有镜像
-q/--quiet 只显示镜像的id
2. docker search 搜索镜像
[root@node01 ~]# docker search mysql
#搜索收藏数大于3000的镜像
[root@node01 ~]# docker search mysql --filter=stars=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11533 [OK]
mariadb MariaDB Server is a high performing open sou… 4378 [OK]
3. docker pull 镜像名[:tag] 下载镜像
[root@node01 ~]# docker pull mysql
Using default tag: latest #如果不写tag默认就是latest
latest: Pulling from library/mysql
b380bbd43752: Pull complete
f23cbf2ecc5d: Pull complete #分层下载,docker image的核心-联合文件系统
30cfc6c29c0a: Pull complete
b38609286cbe: Pull complete
8211d9e66cd6: Pull complete
2313f9eeca4a: Pull complete
7eb487d00da0: Pull complete
a5d2b117a938: Pull complete
1f6cb474cd1c: Pull complete
896b3fd2ab07: Pull complete
532e67ebb376: Pull complete
233c7958b33f: Pull complete
Digest: sha256:5d52dc010398db422949f079c76e98f6b62230e5b59c0bf7582409d2c85abacb
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
#下载来源的真实地址 #docker pull mysql等价于docker pull docker.io/library/mysql:latest
#指定版本下载
[root@node01 ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b380bbd43752: Already exists #前面已经下载过了最新版本的,所以有相同的部分的地方就不用下载了,
f23cbf2ecc5d: Already exists #只需要下载后面的不同的部分
30cfc6c29c0a: Already exists
b38609286cbe: Already exists
8211d9e66cd6: Already exists
2313f9eeca4a: Already exists
7eb487d00da0: Already exists
bb9cc5c700e7: Pull complete
88676eb32344: Pull complete
8fea0b38a348: Pull complete
3dc585bfc693: Pull complete
Digest: sha256:b8814059bbd9c80b78fe4b2b0b70cd70fe3772b3c5d8ee1edfa46791db3224f9
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
4. docker rmi 删除镜像
#删除指定容器id
[root@node01 ~]# docker rmi -f 8a8a506ccfdc (-f 全部删除)
#删除多个容器id
[root@node01 ~]# docker rmi -f $(docker images -aq)
#删除所有容器id
[root@node01 ~]# docker rmi -f $(docker images -aq) ($括号里面 通过命令查出镜像,再递归一个个删除)
容器命令
有镜像才可以创建容器
(r容器是运行程序的地方,镜像是静态的,每一层都只是可读的,而容器是动态的,里面运行着我们指定的应用。每一个容器里面都有一个简易的linux环境)
1. 下载容器 docker pull centos
[root@node01 ~]# docker pull centos
docker images 命令查看
注意:下载以后内部的centos和外部的centos不一样
2. 运行容器 docker run -it centos /bin/bash 退出容器 1. exit / 2. ctrl+p+q 容器不停止退出
docker run [可选参数] image
#参数说明
--name="名字" 指定容器名字 ,用来区分容器
-d 后台方式运行
-it 使用后台交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
(
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
)
-P 随机指定端口(大写的P)
#例:
[root@node01 ~]# docker run -it centos /bin/bash 启动并且进入容器
[root@459b46f39369 /]# 这里主机名 node01变成了容器ID
[root@459b46f39369 /]# ls (和我们服务器目录一样,可以说就是一个小型的服务器)查看内部centos
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#例子:
-d 后台方式 和 --name命名 -p端口
[root@node01 ~]# docker run -d --name nginx01 -p 3344:80 nginx
注意:
#docker容器后台运行,必须要有一个前台的进程,否则会自动停止
[root@459b46f39369 /]# exit
exit
[root@node01 ~]#
3. 列出运行过的容器 docker ps
[root@node01 /]# docker ps
# 列出当前正在运行的容器
-a # 列出正在运行的容器+历史运行的容器(容器记录)
-n=? # 显示最近创建的n个容器
-q # 只显示容器的编号
[root@node01 ~]# docker ps -a #列出所有容器的运行记录
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
459b46f39369 centos "/bin/bash" 14 minutes ago Exited (0) 4 minutes ago cranky_almeida
2e8ab39c827e feb5d9fea6a5 "/hello" 3 hours ago Exited (0) 3 hours ago fervent_williams
13fcfc4eb690 feb5d9fea6a5 "/hello" 16 hours ago Exited (0) 16 hours ago elastic_ardinghelli
[root@node01 ~]# docker ps #列出当前正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@node01 ~]# docker ps -n=1 #显示最近创建的n个容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
459b46f39369 centos "/bin/bash" 19 minutes ago Exited (0) 10 minutes ago cranky_almeida
4. 删除容器 docker rm 容器id
[root@node01 ~]# docker rm 459b46f39369 #不能删除正在运行的容器 但是可以使用参数 -f强制删除
[root@node01 ~]# docker rm -f $(docker ps -aq) #删除所有容器
[root@node01 ~]# docker ps -a -q|xargs docker rm #删除所有的容器
5. 启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前运行的容器
docker kill 容器id #强制停止当前容器
6. 其它常用命令
后台启动容器
[root@node01 ~]# docker run -d centos
- 显示日志 docker logs -f -t --tail 数量 容器id
-tf 容器id (查询全部日志)
–tail number 容器id number 为要显示的日志条数 (查询10条日志)
为了更好的测试显示日志命令,可以先执行下列命令,让容器一直保持启动运行状态,
#编写shell脚本循环执行,使得centos容器保持运行状态
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
[root@node01 ~]# docker logs -f -t --tail 10 3db6a6d202a3 查询10条 (可以把t 和 f放在一起写)
[root@node01 ~]# docker logs -tf 3db6a6d202a3 查询全部
- 查看容器中进程的信息 docker top 容器id
[root@node01 ~]# docker top f684d5c9cbec
UID PID PPID C STIME TTY TIME CMD
root 3976 3955 0 08:47 pts/0 00:00:00 /bin/bash
- 查看镜像的元数据 docker inspect 容器id
[root@node01 ~]# docker inspect f684d5c9cbec
- 进入当前正在运行的容器
因为通常我们的容器都是使用后台方式来运行的,有时需要进入容器,修改一些配置
方式一:
docker exec -it 容器id bashShell ( 进入容器中开启一个新的终端,可以在里面操作(常用))
方式二:
docker attach 容器id ( 进入容器正在执行的终端,不会启动新的进程 )
#测试 docker exec -it 容器id bashShell:
[root@node01 ~]# docker exec -it f684d5c9cbec /bin/bash
[root@f684d5c9cbec /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 00:47 pts/0 00:00:00 /bin/bash
root 16 0 0 01:14 pts/1 00:00:00 /bin/bash
root 30 16 0 01:15 pts/1 00:00:00 ps -ef
[root@node01 ~]# docker attach f684d5c9cbec
- 拷贝容器的文件到主机中
docker cp 容器id:容器内路径 目的主机路径
[root@node01 ~]# docker cp f0424f0cf5ab:/test.java /etc/