目录
拷贝是一个手动过程,未来我们使用-v 卷的技术,可以实现,自动同步 /home /home
docker的常用命令
帮助命令
docker version 显示docker的版本
docker info 查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help 帮助命令
docker帮助文档
Reference documentation | Docker Documentation
镜像命令
docker images 查看所有本地主机上的镜像
[root@k2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 8 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a , --all 列出所有镜像
-q, --quiet 只显示镜像的id
docker search 搜索镜像
[root@k2 ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12635 [OK]
# 可选项,通过搜索来过滤
--filter=STARS=5000 搜索出来的镜像,STARS大于5000
[root@k2 ~]# docker search redis --filter=STARS=5000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 10937 [OK]
docker pull 下载镜像
[root@k2 ~]# docker pull --help
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--platform string Set platform if server is multi-platform capable
-q, --quiet Suppress verbose output
# 下载镜像 docker pull 镜像名[:tag]
[root@k2 ~]# docker pull mysql
Using default tag: latest 如果不写tag,默认是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete 分量下载,docker image的核心 联合文件系统
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:e9027fe4d91c666666666666666f7738b66666666709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest 真实地址
# 等价于
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
docker pull mysql:5.7
docker rmi删除镜像
# docker rmi -f 镜像ID # 删除指定镜像
# docker rmi -f 镜像ID 镜像ID 镜像ID 删除多个镜像
# docker rmi -f $(docker images -aq) 删除全部镜像
容器命令
说明:有了镜像才可以创建容器,Linux,下载一个centos镜像来测试学习
[root@k2 ~]# docker pull centos
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="name" 容器名字 Tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-P 指定容器的端口, -P 8080:8080
-P ip:z主机端口:容器端口
-P 主机端口:容器端口
-P 容器端口
容器端口
-p 随机指定端口
# 测试,启动并进入容器
[root@k2 ~]# docker run -it mysql /bin/bash
[root@6ae3c9bb6a51 /]# ls # 查看容器内的mysql,基础版本,很多命令都是不完整的
bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# 从容器中退回主机
[root@6ae3c9bb6a51 /]# exit
exit
[root@k2 /]# ls
bin data etc lib media mydata proc run srv tmp var
boot dev home lib64 mnt opt root sbin sys usr
列出所有运行的容器
# docker ps 命令
# 列出当前正在运行的容器
-a # 列出当前正在运行的容器 + 带出历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@k2 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ae3c9bb6a51 centos "/bin/bash" 6 minutes ago Exited (0) 3 minutes ago adoring_vaughan
1c1c8a07c2ed feb5d9fea6a5 "/hello" 14 hours ago Exited (0) 14 hours ago quirky_mahavira
[root@k2 /]# docker ps -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ae3c9bb6a51 centos "/bin/bash" 9 minutes ago Exited (0) 5 minutes ago adoring_vaughan
[root@k2 /]# docker ps -aq
6ae3c9bb6a51
1c1c8a07c2ed
退出容器
exit # 直接容器停止并退出
ctrl+p+q # 容器不停止退出
[root@k2 /]# docker run -it centos /bin/bash
[root@2bc63e25611d /]# [root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc63e25611d centos "/bin/bash" 17 seconds ago Up 17 seconds competent_almeida
删除容器
docker rm 容器id 删除指定容器,不能删除正在运行的容器,如果强制删除,rm -f
docker rm -f $(docker ps -aq) 删除所有容器
docker ps -a -q|xargs docker rm 删除所有容器
[root@k2 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc63e25611d centos "/bin/bash" 3 minutes ago Up 3 minutes competent_almeida
6ae3c9bb6a51 centos "/bin/bash" 16 minutes ago Exited (0) 12 minutes ago adoring_vaughan
1c1c8a07c2ed feb5d9fea6a5 "/hello" 14 hours ago Exited (0) 14 hours ago quirky_mahavira
7f40b43e271b feb5d9fea6a5 "/hello" 16 hours ago Exited (0) 16 hours ago youthful_northcutt
10b62dbb98ac fe363d9a6ba4 "java -jar /app.jar …" 19 hours ago Exited (143) 15 hours ago 66-springboot-web
[root@k2 /]# docker rm 2bc63e25611d # 不能删除正在运行的容器
Error response from daemon: You cannot remove a running container 2bc63e25611dea862ad877730bc87b2dc9ee7bcb5bfb50dc604dc146700f1b41. Stop the container before attempting removal or force remove
[root@k2 /]# docker rm 6ae3c9bb6a51
6ae3c9bb6a51
[root@k2 /]# docker ps -aq
2bc63e25611d
1c1c8a07c2ed
7f40b43e271b
10b62dbb98ac
[root@k2 /]# docker rm -f $(docker ps -aq)
2bc63e25611d
1c1c8a07c2ed
7f40b43e271b
10b62dbb98ac
[root@k2 /]# docker ps -aq
启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前的容器
[root@k2 /]# docker run -it centos /bin/bash
[root@990384ccba9f /]# exit
exit
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@k2 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
990384ccba9f centos "/bin/bash" 25 seconds ago Exited (0) 18 seconds ago funny_elgamal
[root@k2 /]# docker start 990384ccba9f
990384ccba9f
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
990384ccba9f centos "/bin/bash" About a minute ago Up 7 seconds funny_elgamal
[root@k2 /]# docker stop 990384ccba9f
990384ccba9f
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
常用的其他命令
后台启动容器
# 命令 docker run -d 镜像名
[root@k2 ~]# docker run -d centos
# 问题docker ps 发现,centos停止了
# 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
[root@k2 /]# docker run -d centos
ed05d164f186f33599a6fc557632fac4fae02d6ab83e2aaec22ea5cca554640d
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@k2 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed05d164f186 centos "/bin/bash" 3 minutes ago Exited (0) 3 minutes ago condescending_mcnulty
990384ccba9f centos "/bin/bash" 8 minutes ago Exited (0) 7 minutes ago funny_elgamal
查看日志
docker logs -tf --tail 容器,没有日志 (tail后面需要跟显示日志条数,否则不显示)
# 自己编写一段shell脚本
[root@k2 /]# docker run -d centos /bin/sh -c "while true;do echo hello;sleep 2;done"
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e705ce9ef994 centos "/bin/sh -c 'while t…" About a minute ago Up About a minute priceless_lichterman
# 显示日志
--tf 显示日志
--tail number 要显示日志条数
[root@k2 /]# docker logs -tf --tail 10 e705ce9ef994
[root@k2 /]# docker run -d centos /bin/sh -c "while true;do echo hello;sleep 2;done"
e705ce9ef994919a5749b594269ca6fb3dec38d1b1b03aa7b732e42faeb75030
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e705ce9ef994 centos "/bin/sh -c 'while t…" 13 seconds ago Up 12 seconds priceless_lichterman
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e705ce9ef994 centos "/bin/sh -c 'while t…" About a minute ago Up About a minute priceless_lichterman
[root@k2 /]# docker logs -tf --tail 10 e705ce9ef994
2022-05-26T09:42:34.542832791Z hello
2022-05-26T09:42:36.544598561Z hello
2022-05-26T09:42:38.546502476Z hello
2022-05-26T09:42:40.548252395Z hello
^Z
[2]+ 已停止 docker logs -tf --tail 10 e705ce9ef994
[root@k2 /]# docker logs -tf e705ce9ef994
2022-05-26T09:41:18.474030912Z hello
2022-05-26T09:41:20.476489047Z hello
查看容器中进程信息 ps
# 命令 docker top 容器id
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e705ce9ef994 centos "/bin/sh -c 'while t…" 8 minutes ago Up 8 minutes priceless_lichterman
[root@k2 /]# docker top e705ce9ef994
UID PID PPID C STIME TTY TIME CMD
root 5624 27182 0 17:50 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2
root 27182 27163 0 17:41 ? 00:00:00 /bin/sh -c while true;do echo hello;sleep 2;done
查看镜像的元数据
# 命令 docker inspect 容器id
# 测试
[root@k2 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e705ce9ef994 centos "/bin/sh -c 'while t…" 13 minutes ago Up 13 minutes priceless_lichterman
199564832c3e centos "/bin/sh -C 'while t…" 14 minutes ago Exited (127) 14 minutes ago recursing_lewin
[root@k2 /]# docker inspect e705ce9ef994
进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id bashshell
# 测试
[root@k2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e705ce9ef994 centos "/bin/sh -c 'while t…" 21 minutes ago Up 21 minutes priceless_lichterman
[root@k2 /]# docker exec -it e705ce9ef994 /bin/bash
[root@e705ce9ef994 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@e705ce9ef994 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:41 ? 00:00:00 /bin/sh -c while true;do echo hello;sleep 2;done
root 674 0 0 10:03 pts/0 00:00:00 /bin/bash
root 698 1 0 10:03 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2
root 699 674 0 10:03 pts/0 00:00:00 ps -ef
# 方式二
docker attach 容器id
# 测试
[root@k2 /]# docker attach e705ce9ef994
正在执行当前代码.......
[root@k2 ~]# docker rm -f $(docker ps -aq) # 前面循环没停,直接全停了
docker exec # 进入容器后开启一个新的终端,可以在里面操作
docker attach # 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径
[root@k2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@k2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 8 months ago 231MB
[root@k2 ~]# docker run -it centos /bin/bash
[root@k2 ~]# docker run -it centos /bin/bash
[root@93823941b78c /]# [root@k2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93823941b78c centos "/bin/bash" 16 seconds ago Up 15 seconds romantic_sinoussi
[root@k2 ~]# cd /home/
[root@k2 home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93823941b78c centos "/bin/bash" About a minute ago Up About a minute romantic_sinoussi
# 进入容器内部
[root@k2 home]# docker attach 93823941b78c
[root@93823941b78c /]# cd /home/
[root@93823941b78c home]# ls
# 在容器内新建一个文件
[root@93823941b78c home]# touch test.java
[root@93823941b78c home]# ls
test.java
[root@93823941b78c home]# exit
exit
[root@k2 home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@k2 home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93823941b78c centos "/bin/bash" 3 minutes ago Exited (0) 7 seconds ago romantic_sinoussi
# 查看当前主机目录
[root@k2 home]# ls
idea kuan.java
# 将文件拷贝到主机上
[root@k2 home]# docker cp 93823941b78c:/home/test.java /home/
[root@k2 home]# ls
idea kuan.java test.java
拷贝是一个手动过程,未来我们使用-v 卷的技术,可以实现,自动同步 /home /home
小结
attach Attach to a running Container # 当前 shell下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path # 从容器中拷贝指定文件或目录到宿主机中
create Create a new container # 创建一个新的容器,同run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events form the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the containers of a container as a tar archive # 导出容器的内容流作为一个tar 归档文件【对应 import】
history show the history of an image # 展示一个镜像形成历史
images list images # 列出系统当前镜像
import create a new filesystem image from the contents of a tarball # 从 tar 包中的内容创建一个新的文件系统映像【对应 export】
info display system-wide infomation # 显示系统相关信息
inspect return low-level infomation on a container # 查看容器详细信息
kill kill a running container # kill 指定 docker 容器
load load an image from a tar archive # 从一个 tar 包中加载一个镜像【对应 save】
login register or login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout log out from a docker registry server # 从当前 docker registry退出
logs fetch the logs of a container # 输出当前容器日志信息
port lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause pause all processes within a container # 暂停容器
ps list containers # 列出容器列表
pull pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart restart a running container # 重启运行的服务器
rm remove one or more containers # 移除一个或者多个容器
rmi remove one or more images # 移除一个或者多个镜像(无容器使用该镜像才可以删除,否则需删除相关容器才可继续或 -f 强制删除)
run run a command in a new container # 创建一个新的容器并运行一个命令
save save an image to a tar archive # 保存一个镜像为一个tar包【对应 load】
search search for an image on the docker hub # 在 docker hub 中搜索镜像
start start a stopped container # 启动容器
stop stop a running container # 启动容器
tag tag an image into a repository # 给源镜像搭标签
top lookup the running processes of a container # 查看容器中运行的进程信息
unpause unpause a paused container # 取消暂停容器
version show the docker version infomation # 查看 docker 版本号
wait block until a container stops,then print its exit code # 截取容器停止时间的退出状态值