#显示docker版本信息
sudo docker version
#显示docker系统信息,包括镜像和容器数量
sudo docker info
#帮助命令
sudo docker 命令 --help
docker images
suc@suc-vm:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 7 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像标签
IMAGE ID 镜像id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
Options:
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像id
docker search 搜索镜像
#搜索出来的镜像是STARS大于3000的mysql,--filter是可选项
suc@suc-vm:~$ sudo docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9827 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3588 [OK]
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
suc@suc-vm:~$ sudo docker pull mysql
Using default tag: latest # 如果不写 tag,默认就是latest
latest: Pulling from library/mysql
bf5952930446: Pull complete # 分层下载,docker image的核心 联合文件系统
8254623a9871: Pull complete
938e3e06dac4: Pull complete
ea28ebf28884: Pull complete
f3cef38785c2: Pull complete
894f9792565a: Pull complete
1d8a57523420: Pull complete
6c676912929f: Pull complete
ff39fdb566b4: Pull complete
fff872988aba: Pull complete
4d34e365ae68: Pull complete
7886ee20621e: Pull complete
Digest: sha256:c358e72e100ab493a0304bda35e6f239db2ec8c9bb836d8a427ac34307d074ed#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
# 联合文件系统的好处:之前下载过的MySQL与其他版本的MySQL有相同的文件时不需要重复下载
# docker pull mysql 等价于: docker pull docker.io/library/mysql:latest
# 指定版本下载
suc@suc-vm:~$ sudo docker pull mysql:5.7
docker rmi 删除镜像
suc@suc-vm:~$ sudo docker rmi -f 镜像id #删除指定镜像
suc@suc-vm:~$ sudo docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
suc@suc-vm:~$ sudo docker rmi -f $(docker images -aq) #删除全部镜像
说明:有了镜像才可以创建容器,接下来linux下载一个centos镜像来学习
docker pull centos
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字 tomcat01 tomcat02 ,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:80
-p ip:主机(即宿主机)端口:容器端口
-p 主机端口:容器端口 #这种方式常用
-p 容器端口
容器端口P
-P 随机指定端口(大写P)
# 测试,启动并进入容器
suc@suc-vm:~$ sudo docker images
[sudo] suc 的密码:
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 2 days ago 215MB
mysql latest 0d64f46acfd1 8 days ago 544MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB
suc@suc-vm:~$ sudo docker run -it centos /bin/bash
#(-it 交互式运行)
[root@f779466cce0b /]# ls#查看容器内的centos,基础版本,很多命令都是不完善的!
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
#从容器中退回主机
[root@f779466cce0b /]# exit
exit
列出所有运行的容器
# docker ps 命令
(不加) # 列出当前正在运行的容器
-a # 列出当前正在运行的容器 + 带出历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示当前容器的编号
suc@suc-vm:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
suc@suc-vm:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f779466cce0b centos "/bin/bash" 12 minutes ago Exited (0) 10 minutes ago adoring_taussig
51b858d1de56 hello-world "/hello" 17 hours ago Exited (0) 17 hours ago bold_wilson
2610884d302b hello-world "/hello" 17 hours ago Exited (0) 17 hours ago pedantic_sanderson
suc@suc-vm:~$ sudo docker ps -a -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f779466cce0b centos "/bin/bash" 12 minutes ago Exited (0) 10 minutes ago adoring_taussig
suc@suc-vm:~$ sudo docker ps -aq
f779466cce0b
51b858d1de56
2610884d302b
退出容器
exit # 直接退出容器
Ctrl + p + q # 容器不停止退出
删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器
启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前正在运行的容器
后台启动容器
# 命令 docker run -d 镜像名
suc@suc-vm:~$ sudo docker run -d centos
49c4865f3282f1061980c00699ebb976db88cf8b3554ed9c95b4091fc1759d0f
suc@suc-vm:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 问题docker ps,发现 centos 停止了
# 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
查看日志
docker logs -f -t --tail 数字 容器id
# 显示日志
-tf # 显示日志
--tail # 要显示的日志条数
suc@suc-vm:~$ sudo docker logs -tf --tail 10 f779466cce0b
2020-08-13T01:45:35.146158236Z [root@f779466cce0b /]# ls
2020-08-13T01:45:35.161950134Z bin etc lib lost+found mnt proc run srv tmp var
2020-08-13T01:45:35.161966425Z dev home lib64 media opt root sbin sys usr
2020-08-13T01:47:18.813122758Z [root@f779466cce0b /]# exit
2020-08-13T01:47:18.813190879Z exit
查看容器中进程信息
# 命令 docker top 容器id
suc@suc-vm:~$ sudo docker top f779466cce0b
查看镜像元数据
# 命令
docker inspect 容器id
# 测试
suc@suc-vm:~$ sudo docker inspect f779466cce0b
[
{
"Id": "f779466cce0b98309c4fa2a46c444fadb731ae0ad92fa534d5249f4d2ad8837c",
"Created": "2020-08-13T01:45:15.048728235Z",
"Path": "/bin/bash",
"Args": [],
"State":
..................................
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null
}
}
}
}
]
进入当前正在运行的程序
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id bashShell
# 测试
suc@suc-vm:~$ sudo docker exec -it 49c4865f3282 /bin/bash
# 方式二
docker attach 容器id
# 测试
suc@suc-vm:~$ sudo docker attach 49c4865f3282
正在执行当前的代码...
# docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach # 进入容器正在执行的终端,不会启动新的进程
从容器拷贝文件到主机
docker cp 容器id:容器内目标文件路径 目的主机路径
# 测试
#启动容器,并进入
root@suc-vm:/home/suc# docker run -it centos /bin/bash
[root@8cb4a15a867f /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@8cb4a15a867f /]# cd /home/
[root@8cb4a15a867f home]# ls
#在容器内新建文件
[root@8cb4a15a867f home]# touch test.py
[root@8cb4a15a867f home]# ls
test.py
[root@8cb4a15a867f home]# exit
exit
root@suc-vm:/home/suc# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8cb4a15a867f centos "/bin/bash" 2 minutes ago Exited (0) 16 seconds ago friendly_franklin
188ba0461c98 centos "/bin/bash" 10 minutes ago Up 4 minutes centos01
# 将docker内文件拷贝到主机上
root@suc-vm:/home/suc# docker cp 8cb4a15a867f:/home/test.py /home/suc/Desktop
root@suc-vm:/home/suc# cd Desktop
root@suc-vm:/home/suc/Desktop# ls
test.py
# 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现自动同步
attach # 当前shell下attach连接指定运行的镜像
build # 通过Dockerfile定制镜像
commit #提交当前容器为新的镜像
cp #从容器中拷贝指定文件或目录到宿主机中
create # 创建一个新的容器,同run,但不启动容器
diff #查看docker容器的变化
events # 从docker服务获取容器实时事件
exec # 在已存在的容器上运行命令
export # 导出容器的内容流作为一个tar归档文件[对应import]
history # 展示一个镜像形成历史
images List # 列出系统当前的镜像 -
import # 从tar包中的内容创建一个新的文件系统镜像[对应export]
info # 显示系统相关信息
inspect # 查看容器详细信息
kill # 杀死指定的docker容器
load # 从一个tar包加载一个镜像[对应save]
login # 注册或者登录一个docker源服务器
logout # 从当前Docker registry退出
logs # 输出当前容器日志信息
pause # 暂停容器
port # 查看映射端口对应容器内部源端口
ps # 列出容器列表
pull # 从docker镜像源服务器拉取指定镜像或库镜像
push # 推送指定镜像或者库镜像至docker源服务器
rename # 给docker容器重新命名
restart # 重启运行的容器
rm # 移除一个或者多个容器
rmi # 移除一个或者多个镜像[无容器使用该镜像时才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run # 创建一个新的容器并运行一个命令
save # 保存一个镜像为一个tar包[对应load]
search # 在docker hub中搜索镜像
start # 启动容器
stats # 实时显示容器资源使用统计
stop # 停止容器
tag # 给源中镜像打标签
top # 查看容器中运行的进程信息
unpause # 取消暂停容器
update # 更新一个或多个容器配置
version # 查看docker版本号
wait # 阻塞直到一个或多个容器停止,然后打印它们