(CN) Basic Ways to Use Docker
![](/post/docker_learning/featured_hu81bdf5f52d043811399aee77f6ab2854_135413_5c18fef9082c124b31c038c59715497a.webp)
Docker
简介
Docker是一款基于Go语言实现的开源容器引擎,是一种轻量级虚拟化解决方案,为容器创建和管理提供了便捷。
docker与virtual machine对比
类目 | 虚拟机 | 容器 |
---|---|---|
占用磁盘空间 | 大,以GB为单位 | 小,以MB为单位 |
启动速度 | 慢,分钟级别 | 快,秒级别 |
运行形态 | 运行于Hypervisor上 | 运行在宿主机内核 共享同一个Linux内核 |
虚拟化方式 | 硬件层面实现 | 操作系统层面 直接复用宿主机操作系统 |
并发性 | 单机十几个 | 成百上千个 |
性能 | 逊于宿主机 | 接近宿主机本地进程 |
隔离性 | 单机无法有效隔离 | 进程级别隔离 |
docker组件
Docker组件包含镜像(Image),容器(Container)和仓库(Repository)。其中,Docker镜像类似于虚拟机的镜像,用来创建Docker的容器。需要注意的是,镜像是一个只读模板,一个镜像可以包含一个完整的操作系统环境里面仅安装了Apache、MySQL或用户需要的其他应用程序;Docker容器是从镜像创建的应用实例,每一个容器都是相互隔离的,用以保证平台的安全;Docker仓库是集中存放镜像文件的场所,类似于代码仓库,最大的公开仓库是Docker Hub,其中存放了数量庞大的镜像供用户下载。
- docker常见镜像操作:
docker search xxx #查找镜像
docker pull xxx #获取镜像,默认latest
docker image ls #查看当前镜像
docker rmi $(docker image -q) #删除所有镜像
- docker容器常用操作:
docker ps -a #查看所有容器
docker start/stop/rm CONTAINER #开始、停止、删除某个容器
docker stop $(docker ps -aq) #停止所有容器
docker rm $(docker ps -aq) #删除所有容器
- docker其他命令:
docker export/import #导入、导出镜像
docker kill CONTAINER #强行停止容器
docker rename CONTAINER #重命名
docker push IMAGE #推到远程仓库
docker run 具体参数及使用,查看docker官方文档!
dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM
命令开始,紧接着跟随各种方法,命令和参数,产出为一个新的可以用于创建容器的镜像。
- 部分使用规范:
指令 | 格式 | 作用 |
---|---|---|
FROM | FROM < image>: |
第一条指令必须为FROM指令。如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM指令(每个镜像一次) |
MAINTAINER | MAINTAINER |
指定维护者信息 |
RUN | RUN |
将在shell终端中运行命令,即 /bin/sh -c |
RUN[“executable”,“param1”, “param2”] | 使用exec执行,用于其它终端 如:RUN ["/bin/bash", “-c”, “echo hello”] | |
CMD 每个DockerFile只能有一个CMD命令 | CMD [“executable”,“param1”,“param2”] | 使用exec执行,推荐方式 |
CMD command param1 param2 | 在 /bin/sh 中执行,提供给需要交互的应用 | |
CMD [“param1”,“param2”] | 提供给ENTRYPOINT的默认参数 | |
EXPOSE | EXPOSE |
Docker服务端暴露的端口号 |
ENV | ENV |
指定一个环境变量,容器运行时保持 |
ADD | ADD |
复制 |
COPY | COPY |
复制本地主机的 |
ENTRYPOINT 只能有一个ENTRYPOINT命令 | ENTRYPOINT[“executable”, “param1”, “param2”] | 配置容器启动后执行的命令,不可被docker run 参数覆盖 |
ENTRYPOINT command param1 param2 (shell中执行) | ||
VOLUME | VOLUME ["/data"] | 创建一个可以从本地主机或其他容器挂载的挂载点 |
USER | USER daemon | 指定运行容器时的用户名和UID,后续的RUN也使用指定用户 |
WORKDIR | WORKDIR /path/to/workdir | 为后续的RUN,CMD, ENTRYPOINT指定配置工作目录 |
ONBUILD | ONBUILD [INSTRUCTION] | 配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令 |
docker-compose
Docker-Compose负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。
Docker-Compose运行目录下的所有文件(docker-compose.yml
,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例。
Docker-Compose的工程配置文件默认为docker-compose.yml
,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
Compose允许用户通过一个单独的docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
- 常见操作:
docker compose up [OPTIONS] [SERVICE...]
docker compose down [OPTIONS] [SERVICE...]