Docker常用命令
Docker和虚拟机的不同:
- 传统虚拟机,虚拟出一套硬件,在硬件之上运行一个完整的操作系统,然后在操作系统上安装和运行软件。
- 容器内的应用直接运行在宿主机的内核上,容器没有自己的内核,也没有虚拟出硬件。
- 每个容器之间是相互隔离的,每个容器都有一个属于自己的文件系统,互不影响。
Docker镜像命令
查看镜像
使用方式:
docker images [option] [repository[:TAG]]
示例:
1 | docker images |
字段名 | 含义 |
---|---|
REPOSITORY | 镜像的仓库源 |
TAG | 镜像的标签 |
IMAGE ID | 镜像ID |
CREATED | 镜像创建时间 |
SIZE | 镜像的大小 |
Option选项 | 描述 |
---|---|
–all , -a | # 显示所有镜像 (default hides intermediate images) |
–digests | # Show digests |
–filter , -f | # Filter output based on conditions provided |
–format | # Pretty-print images using a Go template |
–no-trunc | #Don’t truncate output |
–quiet , -q | # Only show image IDs |
搜索镜像
使用方式:
docker search [OPTION] TERM
示例:
1 | docker search mysql |
1 | 搜索时添加过滤条件为STARS不小于3000 |
查看某个命令的可选项
使用方式:
docker [命令名称] –help
示例:
1 | docker images --help |
下载镜像
使用方式:
docker pull [OPTION] NAME[:TAG|@DIGEST]
示例:
1 | docker pull mysql |
如果不写TAG,则默认下载最新的镜像。
以下两个命令等价:
1 | docker pull mysql |
指定版本下载:
1 | docker pull mysql:5.7 |
删除镜像
使用方式:
docker rmi [OPTIONS] IMAGE [IMAGE…]
示例:
1 | docker rmi -f 882aebcdb308 |
删除所有的镜像:
1 | docker rmi -f $(docker images -aq) |
其中$(docker images -aq)
为查询所有镜像的ID
Docker容器命令
安装centos进行测试
1 | docker pull centos |
新建容器并运行
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
示例:
1 | docker run -it centos /bin/bash # 运行并进入容器 |
查看容器
docker ps [OPTIONS]
示例:
1 | docker ps # 查看当前正在运行的容器 |
Option名称 | 描述 |
---|---|
-all, -a | 显示所有容器 |
–last, -n | 显示最近创建的n个容器 |
–quiet, -q | 只显示容器的ID |
退出容器
退出并关闭容器
exit
退出但不关闭容器
Ctrl + P + Q
删除容器
使用方式:
docker rm [OPTIONS] CONTAINER [CONTAINER…]
Option选项 | 描述 |
---|---|
--force , -f |
Force the removal of a running container (uses SIGKILL) |
--link , -l |
Remove the specified link |
--volumes , -v |
Remove anonymous volumes associated with the container |
示例:
1 | docker rm fbddb27d188f |
启动容器
1 | docker start [容器ID] |
重启容器
1 | docker restart [容器ID] |
停止容器
1 | docker stop [容器ID] |
强制停止当前容器
1 | docker kill [容器ID] |
常用其他命令
后台运行容器
1 | docker run -d centos |
docker run -d centos
中的-d表示后台运行,但是该后台运行必须对应一个前台进程,否则docker会将这个容器停止。
查看日志
1 | docker logs -tf --tail 10 [容器ID] |
-tf
表示显示日志, --tail [数字]
表示要显示日志条数。
查看容器内部进程
1 | docker top [容器ID] |
示例:
1 | docker top 8326642ceb7d |
查看容器的元数据
1 | docker inspect [容器ID] |
进入当前正在运行的容器
1 | docker exec -it [容器ID] bashshell |
或者
1 | docker attach [容器ID] |
两者区别:docker exec
在进入容器后开启一个新的终端,docker attach
在进入容器后使用正在执行的一个终端。
将容器内部的文件拷贝到主机上
1 | docker cp [容器ID]:[容器中的文件路径] [主机文件夹路径] |
![](/home/lize/Pictures/Screenshot from 2021-01-05 23-14-52.png)
作业1:docker部署nginx
docker部署nginx并完成端口映射
1 | docker run -d --name nginx01 -p 3344:80 nginx |
作业2:docker部署tomcat
官方使用:
1 | docker run -it --rm tomcat |
--rm
表示停止容器后将无法查询到该容器,先在本地镜像中寻找tomcat,本地镜像没有则去docker 仓库下载。
后台运行tomcat:
1 | docker run -d -p 3355:8080 --name tomcat01 tomcat |
但是访问localhost:3355出现404,这是因为tomcat中的webapps目录中没有任何项目。
将webapps.dist中的项目复制到webapps中:
1 | root@8be6bf1b1aa5:/usr/local/tomcat# cp -r webapps.dist/* webapps |
再次访问localhost:3355则出现tomcat欢迎界面。
Docker可视化界面
portainer是Docker图形化界面管理工具。
1 | docker run -d -p 8088:9000 \ |
访问测试:localhost:8088
Docker镜像讲解
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
如何得到镜像:
- 从远程仓库下载
- 从朋友处拷贝
- 自己制作一个镜像Dockerfile
Commit命令
将现有容器打包成镜像。
1 | docker run -it tomcat /bin/bash |
docker提供的tomcat镜像中的webapps目录下没有项目。
将webapp.dist目录中的项目复制到webapps目录下:
1 | root@cdcbb2f5b3aa:/usr/local/tomcat# cp -r webapps.dist/* webapps |
将该容器打包成镜像:
使用方式:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
1 | docker commit -a="lize" -m="add webapps apps" 53b95fab247a tomcat01:1.0 |
-a
表示作者,-m
表示提交的描述信息
使用数据卷
使用方式:
$ docker run -it -v [主机目录]:[容器内目录] 容器 /bin/bash
示例:
1 | docker run -it -v /home/test:/home centos /bin/bash |
实战:
将mysql配置目录和数据目录与主机目录进行双向绑定:
1 | docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql |
-d 后台运行
-p 端口映射
-v 数据卷挂载
-e 环境配置
–name 容器名字
上面这条命令完成了以下操作:
- 在后台运行mysql
- 将主机3310端口映射到此容器的3306端口
- 将主机/home/mysql/conf目录与容器中的etc/mysql/conf.d目录双向绑定
- 将主机/home/mysql/data目录与容器中的/var/lib/mysql目录双向绑定
- 配置mysql的密码为123456
- 容器的名称为mysql01
在主机上使用mysql workbench连接localhost:3310,如果连接成功,这就表示端口映射成功。然后使用mysql workbench创建一个名称为test的数据库,在主机的/home/mysql/data目录查看,发现多出一个test目录,并且数据卷挂载成功!
容器删除后,test目录将依旧存在。