Docker其重要性也不用我再强调,其流行也表明了其优越性。
一、Docker简介
docker的产生解决了程序移植和部署过程中产生的环境配置问题
相比于传统的虚拟机,docker更轻量,更高效,更便捷(虚拟机是基于硬件层面的虚拟化,而docker是基于内核层面的虚拟化,不像虚拟机那样每次虚拟就要占用大量的硬件资源)。
相比于过去,一个应用可以由多个docker组装而成,使得应用更加模块化,想要升级相应的部件,只需要更新部件对应的docker组件即可,十分方便
二、Docker的基本概念
镜像(image):可以类比c++中的类模板
容器(container):由类模板创建出的对象
仓库(repository):存放各种镜像的地方
三、Docker安装过程
关于Docker的安全,网上有许多有用的教程,这里不过多赘述
四、Docker命令
1.启动命令
docker的启动命令依赖于linux自带的systemctl
,使用方式如下:
- systemctl start docker # 开启docker服务
- systemctl stop docker # 关闭docker服务
- systemctl restart docker # 重启docker服务
- systemctl status docker # 查询docker状态
- systemctl enable docker # 使得docker能够开机自启动
2.帮助命令
当你忘记某些命令时,可以采取以下命令获得帮助
- docker info #获得关于docker的基本信息
- docker –help #获得可以使用的命令列表
- docker cmd –help #获得某条特定命令的文档
3.镜像命令
- docker images #显示当前存在的镜像
- docker search xxx #查询镜像
- docker pull xxx[:TAG] #从dockerhub拉取镜像
- docker system df #df意思为disk free,查询docker占据的硬盘空间大小
- docker rmi xxx #删除镜像、
4.容器命令
- docker ps #列出容器
- docker run #创建并运行一个容器
- docker start #启动一个容器
- docker restart #重启
- docker stop #停止容器(优雅
- docker kill #停止容器(不优雅
- docker rm #删除一个容器
- docker logs id #打印容器日志
- docker top id #打印容器的运行进程信息
- docker inspect id #打印容器配置信息
- docker exec -it id /bin/bash #在正在运行的容器中启动一个新交互终端
- docker attach id # 附加到在正在运行的容器中的终端(不会开启新终端)
- docker cp # 容器和宿主机的文件传输
- docker export id > xxx.tar #导出容器
- docker import xxx.tar name:tag #导入镜像
如何从一个交互式脚本中退出,docker提供了2种方式,在shell中运行exit
,退出容器后,容器也会停止,如果使用ctrl+p+q
的话,退出交互shell,但是容器仍然运行。
docker镜像构建
可以使用dockerfile
构建自己的镜像
构建时使用如下格式:
docker build -t image_name:tag . #使用当前目录下的dockerfile构建一个镜像image_name:tag
1.dockerfile基本用法
FROM ubuntu
RUN <运行命令> # 相当于在镜像中执行命令,在build镜像时
COPY current_dir container_dir # 复制本地文件到容器中
CMD ["<可执行文件或命令>","<param1>","<param2>",...] #在docker run时运行的命令
ENV <key> <value> # 声明环境变量,之后可以用$符号引用key
<运行命令> # 相当于在本地执行命令
docker-compose
有了容器后,米娜桑发现,一个个启动容器实在是太麻烦了(为了启动某个服务,需要若干个容器联合使用),于是就有了docker-compose
,docker-compose
也是docker官方写的另一个项目,用于批量管理docker容器的
docker-compose的用法很简单,一般情况下需要目录下有一个yaml
文件写了你要配置docker的相关信息,然后运行如下命令:
docker-compose up