Docker常用命令
1、帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker --help # 帮助命令
帮助文档的地址:https://docs.docker.com/reference/
2、镜像命令
docker images 查看所有本地的主机上的镜像
[root@node1 /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 5 weeks ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
--all , -a # 列出所有的镜像
--quiet , -q # 只显示镜像的id
docker search 搜索镜像
[root@node1 /]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10724 [OK]
mariadb MariaDB Server is a high performing open sou… 4038 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 785 [OK]
percona Percona Server is a fork of the MySQL relati… 530 [OK]
# 可选项,通过搜索来过滤
--filter=STARS=3000 #搜索出来的镜像是STARS大于3000的镜像
[root@node1 /]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10724 [OK]
mariadb MariaDB Server is a high performing open sou… 4038 [OK]
[root@node1 /]# docker search mysql --filter=STARS=5000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10724 [OK]
docker pull 下载镜像
# 下载镜像docker pull 镜像名[:tag]
[root@node1 /]# docker pull mysql
Using default tag: latest # 如果不写tag默认就是latest
latest: Pulling from library/mysql
75646c2fb410: Pull complete # 分层下载:docker image 的核心,联合系统文件
878f3d947b10: Pull complete
1a2dd2f75b04: Pull complete
8faaceef2b94: Pull complete
b77c8c445ec2: Pull complete
074029aeaa5f: Pull complete
5a1122545c6c: Pull complete
6c95ccd00139: Pull complete
60a719448fdb: Pull complete
f31898a387a3: Pull complete
bcf402a978dc: Pull complete
cf0bc7da512e: Pull complete
Digest: sha256:c35eb76bbccfd0138c8c68ccb9b4cffe42c488a27f64ddc31a2b5f65aa93fce6 # 签名:防伪
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实的地址
# 这两个命令是等价的
docker pull mysql
docker.io/library/mysql:latest
# 指定版本下载
[root@node1 /]# docker pull mysql:5.6
5.6: Pulling from library/mysql
23a3602cd30c: Pull complete
fde922a9980f: Pull complete
5d5e58faa9a8: Pull complete
35d7b1499787: Pull complete
67575f8b7b80: Pull complete
b2844490be17: Pull complete
87f6510c6a65: Pull complete
877a22faf2fc: Pull complete
6259bafdad04: Pull complete
290903455872: Pull complete
37ba80fc86c3: Pull complete
Digest: sha256:e6c6bdc8cff8960953db5cb42f8be2d1db2931fafbf5f217d65b99ba0edae5df
Status: Downloaded newer image for mysql:5.6
docker.io/library/mysql:5.6
docker rmi 删除镜像!
[root@node1 /]# docker rmi -f 33d1008b853cd # 删除指定的镜像 33d1008b853cd 镜像id
[root@node1 /]# docker rmi -f 33d1008b853cd 33d1008b853ce 33d1008b853cf # 删除多个镜像
[root@node1 /]# docker rmi -f $(docker images -aq) # 删除所有的镜像
3、容器命令
说明:我们有了镜像才可以创建容器,Linux,下载一个centos 镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字 Tomcat01 Tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p(小) 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
# 测试启动并进入容器
[root@node1 /]# docker run -it centos /bin/bash
[root@7689aa502e87 /]# ls # 查看容器内的centos,基础版本,很多命令都不是完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# 从容器中退回主机
[root@7689aa502e87 /]# exit
exit
[root@node1 /]# ls
bin boot cgroups_test dev etc hadoop home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
列出所有运行及运行过的容器
# docker ps命令
# 列出当前正在运行的容器
-a # 列出当前正在运行的容器 + 带出历史运行过得容器
-n=? # 显示最近创建的容器
-q # 只显示正在运行容器的编号
-aq # 显示所有容器的编号
[root@node1 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@node1 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7689aa502e87 centos "/bin/bash" 7 minutes ago Exited (0) 5 minutes ago happy_ptolemy
d518f23393fa d1165f221234 "/hello" 2 hours ago Exited (0) 2 hours ago wizardly_austin
[root@node1 /]# docker ps -q
[root@node1 /]# docker ps -aq
7689aa502e87
d518f23393fa
退出容器
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 stop 容器id # 重启容器
docker retart 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
4、常用其他命令
后台启动容器
# 命令 docker run -d 镜像名!
[root@node1 /]# docker run -d centos
61fe3c68714deec66b0e7c1fd5aa0f76700bdc455ad47b62d6e4518f3853ec73
[root@node1 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 问题 docker ps 发现centos没有运行,实际是他运行启动了,然后停止了
# 问题原因:docker 容器使用后台运行,就必须要有一个前台进程,docker没有发现应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立即停止,就没有应用程序了
查看日志
docker logs -f -t --tail 容器,没有日志
# 自己编写一段shell脚本
[root@node1 /]# docker run -d centos /bin/sh -c "while true;do echo xingmao;sleep 1;done"
86d3e670eec3a574e623ac4d273ea9f877c56f8c4770b03ba944ae57f5ffc873
[root@node1 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86d3e670eec3 centos "/bin/sh -c 'while t…" 8 seconds ago Up 8 seconds wonderful_bartik
# 显示日志
-tf # 显示日志
--tail number # 要显示日志条数
[root@node1 /]# docker logs -tf --tail 86d3e670eec3 # 显示所有的日志
[root@node1 /]# docker logs -tf --tail 10 86d3e670eec3 # 显示10条日志
查看容器中的进程信息
# 命令 docker top 容器id
[root@node1 /]# docker top 86d3e670eec3
UID PID PPID C STIME TTY TIME CMD
root 3242 32664 0 16:51 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 32664 32641 0 16:45 ? 00:00:00 /bin/sh -c while true;do echo xingmao;sleep 1;done
查看镜像的元数据
# 命令
docker inspect 容器id
# 测试
docker inspect 容器id
[root@node1 /]# docker inspect 86d3e670eec3
进入当前正在运行的容器
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id BashShell
# 测试
[root@node1 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86d3e670eec3 centos "/bin/sh -c 'while t…" 14 minutes ago Up 14 minutes wonderful_bartik
[root@node1 /]# docker exec -it 86d3e670eec3 /bin/bash
[root@86d3e670eec3 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@86d3e670eec3 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:45 ? 00:00:00 /bin/sh -c while true;do echo xingmao;sleep 1;done
root 905 0 0 09:00 pts/0 00:00:00 /bin/bash
root 940 1 0 09:00 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 941 905 0 09:00 pts/0 00:00:00 ps -ef
# 方式二
docker attach 容器id
# 测试
[root@node1 ~]# docker attache 86d3e670eec3
正在执行当前的代码。。。。
# docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attache # 进入容器正在执行的终端,不会启动新的进程!
从容器拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径
# 进入docker容器内部
[root@node1 /]# docker run -it centos /bin/bash
[root@c2ee05130dc2 /]# cd /home
[root@c2ee05130dc2 home]# ls
# 在容器内新建一个文件
[root@c2ee05130dc2 home]# touch test.java
[root@c2ee05130dc2 home]# ls
test.java
[root@c2ee05130dc2 home]# exit
exit
[root@node1 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2ee05130dc2 centos "/bin/bash" About a minute ago Exited (0) 14 seconds ago gifted_carver
# 将文件拷贝出来到主机上
[root@node1 /]# docker cp c2ee05130dc2:/home/test.java /home
[root@node1 /]# cd home
[root@node1 home]# ll
-rw-r--r-- 1 root root 0 Apr 11 20:14 test.java
# 拷贝是一个手动过程,可是使用 -v卷的技术,可以实现同步的目的
5、小结
docker主要命令
attach Attach to a running container # 当前shell下 attach连接指定运行的镜像
build Build an image from a Dockerfile # 通过Dockerfile定制镜像
commit Create a new image from a container's changes # 提交当前容器为新的镜像
cp Copy files/folders from container 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 from the server # 从服务获取容器实时事件
exec Run a command in a running container # 在运行中的容器上运行命令
export Stream the contens of a container's 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 information # 显示系统相关文件
inspect Return low-level information on Docker objects #查看容器详细信息
kill Kill a running containers # kill指定docker容器
load Load an image from a tar archive #从一个tar包中加载一个镜像[对应save]
login Log in to a Docker registry # 注册或者登录一个docker源服务器
logout Log out from a Docker registry # 从当前docker registry
logs Fetch the logs of a container # 输出当前容器日志信息
pause Pause all processes within a containers # 暂停容器
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
ps List containers # 列出容器列表
pull Pull an image or a repository from a registry # 从docker镜像源服务器拉取指定镜像
push Push an image or a repository to a registry rename Rename a container # 推送指定镜像或者库镜像到docker源
restart Restart one or more containers # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或者多个jingx
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save one or more images to a tar archive # 保存一个镜像为一个tar包[对应load]
search Search the Docker Hub for images # 在docker hub中搜索镜像
start Start one or more stopped containers # 启动镜像
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers # 停止镜像
tag tag an image into a repository # 给源中镜像打标签
top Display the running processes of a container # 查看容器中运行的进程信息
unpause Unpause all processes within one or more containers # 取消暂停容器
update Update configuration of one or more containers # 升级容器配置
version Show the Docker version information # 查看docker版本号
wait Block until one or more containers stop, then print their exit codes # 截取容器停止时的退休状态值