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]:[容器中的文件路径] [主机文件夹路径]  | 

作业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目录将依旧存在。



