docker 简介
docker 在英文中有码头工人的意思,码头工人将货物装载到集装箱,而 docker 则将开发者的应用打包成一个可供容器使用的镜像,并且可以分享给其他开发者使用。
Docker 是一个开源的应用容器引擎。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker 的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 的优点
- 快速一致地交付您的应用程序
- 响应式部署和扩展
- 在同一硬件上运行更多工作负载
docker 基本概念
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。操作系统分为 内核 和 用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
仓库(Repository):仓库可看成一个代码控制中心,类似 github,用来保存镜像。
使用镜像
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
# 下载镜像
docker pull ubuntu
# 删除镜像
docker rmi ubuntu
# 上传镜像
docker tag ubuntu:latest docker.io/library/ubuntu
docker push docker.io/library/ubuntu
# 查看镜像
docker images
操作容器
# 创建容器并运行
# -it:参数 -i 交互式操作,参数 -t 表示 终端
docker run -it ubuntu:18.04 /bin/bash
# --rm 这个参数是说容器退出后随之将其删除
docker run -it --rm ubuntu:18.04 bash
# -d:这个参数是说容器运行后不关闭,而是保持运行状态, --name 参数制定容器命名
docker run -itd --name ubuntu-test ubuntu /bin/bash
# -p 参数:指定容器的网络端口映射,-p 8080:8080:指定容器的 8080 端口映射到宿主机的 8080 端口
docker run -d -p 8080:8080 training/webapp python app.py
# 查看容器的状态
docker ps -a
# 查看最近的容器
docker ps -l
# 停止一个已启动的容器
docker stop b750bbbcfd88
# 启动一个已停止的容器
docker start b750bbbcfd88
# 删除容器
docker rm b750bbbcfd88
Docker 仓库管理
# 登录
docker login
# 登出
docker logout
# 搜索镜像
docker search ubuntu
# 拉取镜像
docker pull ubuntu
# 推送镜像
docker tag ubuntu:18.04 username/ubuntu:18.04
docker push username/ubuntu:18.04
Dockerfile
Dockerfile 是一个文件,用来描述镜像的构建过程,包含了一条条构建镜像所需的指令和说明。
常用指令
FROM:指定构建镜像的基础镜像。
RUN:指定在构建镜像时执行的命令。
CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
- CMD 在 docker run 时运行。
- RUN 是在 docker build。
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。
COPY:指定在构建镜像时拷贝文件。
ENV:指定环境变量。在后续的指令中,可以使用这个环境变量。
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
在 Dockerfile 文件所在目录执行 docker build 命令,会生成一个镜像。
docker build [选项] <上下文路径/URL/->
# -t 指定生成的镜像的名称
docker build -t koa-demo .