Docker笔记
Part 0 前言
参考资料:
概述
Docker是一个应用容器引擎,支持开发者打包应用和相关依赖到一个轻量级、可移植的容器中,然后发布到(任何)Linux机器上。
Docker完全使用沙箱机制,相互之间没有接口,且性能开销低。
应用场景
- Web应用的自动化打包和发布
- 自动化测试和持续集成与发布(与CI/CD一起工作)
优点
- 适于持续集成与交付(CI/CD)。开发人员完成代码编写后,可以通过CI/CD工具链自动执行打包、测试、发布等工作。得益于Docker的沙箱机制,这些工作变得简单易行。
- 适于环境配置与部署。通过编写Dockerfile即可明确指定容器的环境、依赖及其版本。这非常有利于将特定的应用的环境与生产环境相隔绝。具体地,Docker容器中有且仅有我们指定和安装的依赖,无需考虑宿主机或其他应用的环境和依赖可能产生的影响。
- 高可移植性与迁移性。Docker容器可以在几乎任何主流的Linux环境中运行,这对后续在更复杂的物理硬件中部署很有利。具体地,当由于某些如硬件更替或网络安全原因需要将应用服务移植部署到校内或其他场景。
- 多服务部署。每个Docker容器可以近似视为一个独立的Linux环境或者说Linux机器,因此,可以实现类似手机的“软件多开”,比如在多个Docker中部署Vue、Django服务等,他们可以彼此互不干扰。
Part 1 安装
CentOS 7 离线安装 Docker
参考博客:centos7 离线安装docker - 简书
Part 2 基本概念
Part 3 常用命令
重启docker
1
| sudo systemctl restart docker
|
清除docker缓存
遇到难以解决的问题时,可以优先考虑重启docker和清除docker缓存
列出镜像列表
删除镜像
列出容器
列出所有容器(包括已停止的)
启动容器
1
| docker run [OPTIONS] IMAGE [COMMAND][ARG...]
|
无选项运行
启动容器,指定名为 image_name
的镜像
后台运行 -d
启动容器,后台运行,指定名为 image_name
的镜像
1
| docker run -d image_name
|
指定容器名 --name
启动容器,指定容器名为 container_name
,指定名为 image_name
的镜像
1
| docker run --name container_name image_name
|
挂载卷 -v
启动容器,将本地主机的 /local/path
目录和容器中的 /container/path
目录关联起来,指定名为 image_name
的镜像。
挂载卷的作用是在容器和主机内共享数据,对持久化数据非常有用,比如可以将容器内的输出目录和主机内的目录关联起来,容器运行结束后输出数据也不会丢失。
1
| docker run -v /local/path:/container/path image_name
|
与容器终端交互
1
| docker exec -it <container_id_or_name> /bin/bash
|
<container_id_or_name>
是容器的 ID 或名称,可以通过 docker ps
查看。
/bin/bash
是你希望在容器中运行的命令,这里指定为 Bash 终端。
Part 4 Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,由一条条构建命令组成。
选择基础镜像
使用 Python 3.9 作为基础镜像
设置工作目录
将工作目录设置为 /app
拷贝文件
将当前目录下的 code.py
复制到容器中的 /app/
下
使用 pip 安装包
安装 requests
1
| RUN pip install requests
|
指定容器启动时要执行的指令
运行 code.py
1
| CMD ["python", "code.py"]
|
Part 5 DockerHub
Part 6 docker-compose
docker-compose
命令主要针对 docker-compose.yml
文件
构建或重新构建服务的镜像
启动定义的所有服务
停止所有服务
This is copyright.