Docker 学习

2022-09-22

Docker其重要性也不用我再强调,其流行也表明了其优越性。

Docker简介

docker的产生解决了程序移植和部署过程中产生的环境配置问题
相比于传统的虚拟机,docker更轻量,更高效,更便捷(虚拟机是基于硬件层面的虚拟化,而docker是基于内核层面的虚拟化,不像虚拟机那样每次虚拟就要占用大量的硬件资源)。
相比于过去,一个应用可以由多个docker组装而成,使得应用更加模块化,想要升级相应的部件,只需要更新部件对应的docker组件即可,十分方便

Docker的基本概念

镜像(image):可以类比c++中的类模板
容器(container):由类模板创建出的对象
仓库(repository):存放各种镜像的地方

Docker安装过程

关于Docker的安全,网上有许多有用的教程,这里不过多赘述

Docker命令

1.启动命令

docker的启动命令依赖于linux自带的systemctl,使用方式如下:

  1. systemctl start docker # 开启docker服务
  2. systemctl stop docker # 关闭docker服务
  3. systemctl restart docker # 重启docker服务
  4. systemctl status docker # 查询docker状态
  5. systemctl enable docker # 使得docker能够开机自启动

2.帮助命令

当你忘记某些命令时,可以采取以下命令获得帮助

  1. docker info #获得关于docker的基本信息
  2. docker –help #获得可以使用的命令列表
  3. docker cmd –help #获得某条特定命令的文档

3.镜像命令

  1. docker images #显示当前存在的镜像
  2. docker search xxx #查询镜像
  3. docker pull xxx[:TAG] #从dockerhub拉取镜像
  4. docker system df #df意思为disk free,查询docker占据的硬盘空间大小
  5. docker rmi xxx #删除镜像、

4.容器命令

  1. docker ps #列出容器
  2. docker run #创建并运行一个容器
  3. docker start #启动一个容器
  4. docker restart #重启
  5. docker stop #停止容器(优雅
  6. docker kill #停止容器(不优雅
  7. docker rm #删除一个容器
  8. docker logs id #打印容器日志
  9. docker top id #打印容器的运行进程信息
  10. docker inspect id #打印容器配置信息
  11. docker exec -it id /bin/bash #在正在运行的容器中启动一个新交互终端
  12. docker attach id # 附加到在正在运行的容器中的终端(不会开启新终端)
  13. docker cp # 容器和宿主机的文件传输
  14. docker export id > xxx.tar #导出容器
  15. 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-composedocker-compose也是docker官方写的另一个项目,用于批量管理docker容器的

详情可以看: https://blog.csdn.net/pushiqiang/article/details/78682323
https://zhuanlan.zhihu.com/p/51055141
https://m.runoob.com/docker/docker-compose.html