一、帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的详细信息
docker --help # 帮助命令
二、镜像命令
1、查看所有本地主机上的镜像 docker images
[root@wyc /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 13 months ago 13.3kB
# 解释
REPOSITORY # 镜像的仓库源
TAG # 镜像的标签
IMAGE ID # 镜像的id
CREATED # 镜像的创建时间
SIZE # 镜像的大小
docker images --help
查看镜像帮助,列出可选项(每个命令都可以用–help查看帮助)
[root@wyc /]# docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
# 可选项
-a, --all # 列出所有镜像
-f, --filter # 根据提供的条件过滤
-q, --quiet # 只显示镜像的id
2、搜索镜像 docker search
[root@wyc /]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13470 [OK]
mariadb MariaDB Server is a high performing open sou… 5141 [OK]
......
# 可选项 通过搜索来过滤
--filter=star=3000 # 搜索出来的镜像就是stars大于3000的
[root@wyc /]# docker search mysql --filter=stars=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13470 [OK]
mariadb MariaDB Server is a high performing open sou… 5141 [OK]
3、下载镜像 docker pull
[root@wyc /]# docker pull mysql # 下载镜像 docker pull 镜像名[:tag]
Using default tag: latest # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,docker images的核心:联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
docker.io/library/mysql:latest 与 docker pull mysql 是等价的
# 指定版本下载
[root@wyc /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists # 联合文件下载,已经存在的资源可以共用
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
# 此时查看本地镜像,会看到5.7版本的mysql
[root@wyc /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 11 months ago 448MB
mysql latest 3218b38490ce 11 months ago 516MB
hello-world latest feb5d9fea6a5 13 months ago 13.3kB
4、删除镜像 docker rmi
[root@wyc /]# docker rmi -f 镜像id # 删除指定镜像
[root@wyc /]# docker rmi -f 镜像id 镜像id 镜像id # 删除多个镜像(空格分隔)
[root@wyc /]# docker rmi -f $(docker images -aq) # 删除全部镜像
三、容器命令
说明:有了镜像才可以创建容器,需要下载一个镜像来测试学习。
docker pull centos
# 下载centos镜像
[root@wyc /]# docker pull centos
docker run [可选参数]
# 参数说明
--name="Name" # 容器名字 tomcat01 tomcat02,用来区分容器
-d # 后台方式运行
-it # 使用交互方式运行,进入容器查看内容
-p # 指定容器的端口,-p 8080:8080
-P # 随机指定端口(大写字母P)
1、新建容器并启动 docker run -it centos /bin/bash
# 启动并进入容器
[root@wyc /]# docker run -it centos /bin/bash
[root@2d4c7e7c43b6 /]# ls # 查看容器内的centos(基础版本,很多命令都是不完善的)
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
2、退出 exit
# 从容器中退回到主机
[root@2d4c7e7c43b6 /]# exit
exit
[root@wyc /]# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
退出容器有两种方式:
exit # 直接停止容器并退出
Ctrl + P + Q # 快捷键,容器不停止退出
[root@wyc /]# docker run -it centos /bin/bash
[root@cb173129f88f /]# [root@wyc /]#
[root@wyc /]#
3、列出所有正在运行的容器 docker ps
# 命令参数可选项
-a # 列出当前正在运行的容器 + 历史运行过的容器
-n=? # 显示最近创建的容器(可以指定显示几条,比如-n=1)
-q # 只显示容器的编号
[root@wyc /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@wyc /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d4c7e7c43b6 centos "/bin/bash" 5 minutes ago Exited (0) 44 seconds ago friendly_curran
4f389b34e144 feb5d9fea6a5 "/hello" 3 days ago Exited (0) 3 days ago zealous_easley
[root@wyc /]# docker ps -aq -n=1
2d4c7e7c43b6
4、删除容器 docker rm 容器id
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果要强制删除,使用docker rm -f
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器
[root@wyc /]# docker rm 2d4c7e7c43b6
2d4c7e7c43b6
# 不能删除正在运行的容器
[root@wyc /]# docker rm cb173129f88f
Error response from daemon: You cannot remove a running container cb173129f88fe3070881cf4dd761ee951d29b0c1bbaa79e56df5e2f0dcf2c73a. Stop the container before attempting removal or force remove
[root@wyc /]# docker ps -aq
cb173129f88f
4f389b34e144
# 递归删除所有的容器
[root@wyc /]# docker rm -f $(docker ps -aq)
cb173129f88f
4f389b34e144
[root@wyc /]# docker ps -aq
25ae1d9776f6
[root@wyc /]# docker ps -a -q|xargs docker rm
25ae1d9776f6
5、启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
四、常用其他命令
1、后台启动容器 docker run -d 镜像名
# 命令 docker run -d 镜像名
[root@wyc /]# docker run -d centos
# 问题:docker ps后发现centos停止了
# 常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
2、查看日志 docker logs -f
# 自己编写一段shell脚本
[root@wyc /]# docker run -d centos /bin/sh -c "while true;do echo hello world;sleep 1;done"
# 查看脚本id
[root@wyc /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6bb072cddbe1 centos "/bin/sh -c 'while t…" 43 seconds ago Up 32 seconds sad_khorana
# 查看日志
-ft # 显示日志
--tail number # 要显示的日志条数
[root@wyc /]# docker logs -ft --tail 10 6bb072cddbe1
3、查看容器中进程信息 docker top 容器id
# 命令 docker top 容器id
[root@wyc /]# docker top 9a6b3cb55aaa
UID PID PPID C STIME TTY TIME CMD
root 3494 3475 0 19:48 pts/0 00:00:00 /bin/bash
4、查看镜像的元数据 docker inspect 容器id
# 命令 docker inspect 容器id
[root@wyc /]# docker inspect 6bb072cddbe1
[
{
"Id": "6bb072cddbe1d26e7b8e7757079b0d236772f80efeb4f1dd73d8d5d7747f48cf",
"Created": "2022-11-17T11:51:21.784699056Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello world;sleep 1;done"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2022-11-17T11:51:31.72309446Z",
"FinishedAt": "2022-11-17T11:57:18.501793403Z"
}
......
}
]
5、进入当前正在运行的容器,我们通常都是用后台方式运行容器的
# 方式一
# 命令 docker exec -it 容器id bashShell
[root@wyc /]# docker exec -it 9a6b3cb55aaa /bin/bash
[root@9a6b3cb55aaa /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@9a6b3cb55aaa /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:48 pts/0 00:00:00 /bin/bash
root 16 0 0 12:12 pts/1 00:00:00 /bin/bash
root 31 16 0 12:13 pts/1 00:00:00 ps -ef
# 方式二
# 命令 docker attach 容器id
[root@wyc /]# docker attach 9a6b3cb55aaa
正在执行当前的代码...
# 区别
# docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker bash # 进入容器正在执行的终端,不会启动新的进程
6、从容器内拷贝文件到主机上
# 命令 docker cp 容器id:容器内路径 目的主机路径
# 查看当前主机目录下
[root@wyc home]# ls
docker.java test wyc wychome zhangsan
[root@wyc home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68d51d015aed centos "/bin/bash" About a minute ago Up About a minute hungry_moore
# 进入docker容器内部
[root@wyc home]# docker attach 68d51d015aed
[root@68d51d015aed /]# cd /home
[root@68d51d015aed home]# ls
# 在容器内新建文件
[root@68d51d015aed home]# touch test.java
[root@68d51d015aed home]# ls
test.java
[root@68d51d015aed home]# exit
exit
# 将文件拷贝出来到主机上
[root@wyc home]# docker cp 68d51d015aed:/home/test.java /home
[root@wyc home]# ls
docker.java test test.java wyc wychome zhangsan
# 拷贝是一个手动过程,未来我们使用 -v 卷的技术可以实现自动同步(容器内的/home路径和主机上的/home路径打通)
五、常用命令图解
以上命令均可在 Docker文档 查询!
六、命令练习
Docker安装Nginx
# 1、搜索镜像 search 建议去dockerhub上搜索,可以看到帮助文档
[root@wyc /]# docker search nginx
# 2、下载镜像 pull
[root@wyc /]# docker pull nginx
# 3、运行测试
[root@wyc /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 10 months ago 141MB
centos latest 5d0da3dc9764 14 months ago 231MB
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
[root@wyc /]# docker run -d --name nginx01 -p 3344:80 nginx
b33738d7b823f7f51412cf79ce025317fbca0ba774d3ad1a71346d9acd14e474
[root@wyc /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b33738d7b823 nginx "/docker-entrypoint.…" 15 seconds ago Up 5 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
fb6ca5820d26 centos "/bin/bash" 26 minutes ago Up 26 minutes pedantic_austin
[root@wyc /]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
color-scheme: light dark; }
body {
width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
# 进入容器
[root@wyc /]# docker exec -it nginx01 /bin/bash
root@b33738d7b823:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@b33738d7b823:/# cd /etc/nginx
root@b33738d7b823:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
Docker安装Tomcat
# 官方的使用
# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到
# docker run -it --rm,一般用来测试,用完即删
docker run -it --rm tomcat
# 1、下载
[root@wyc /]# docker pull tomcat
# 2、启动运行
[root@wyc /]# docker run -d --name tomcat01 -p 3355:8080 tomcat
# 3、进入容器
[root@wyc /]# docker exec -it tomcat01 /bin/bash
# 发现问题:1、Linux命令少了; 2、没有webapps文件夹
# 阿里云镜像的原因:默认是最小的镜像,所有不必要的都剔除掉,保证最小可运行的环境
root@03b1b73b0014:/usr/local/tomcat# ls
BUILDING.txt NOTICE RUNNING.txt lib temp work
CONTRIBUTING.md README.md bin logs webapps
LICENSE RELEASE-NOTES conf native-jni-lib webapps.dist
# 把webapps.dist文件夹下的文件复制到webapps文件夹下,就可以访问成功
root@03b1b73b0014:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@03b1b73b0014:/usr/local/tomcat# cd webapps
root@03b1b73b0014:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
感谢阅读!