Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • 基础架构

  • MQ

  • 微服务

  • 分布式

  • 高并发

  • 大数据

  • 容器化

    • Docker

      • Docker入门总结
        • 架构
        • 常用命令
          • 镜像相关
          • 容器相关
        • Dockerfile
          • Dockerfile常用的指令
        • Docker Compose
          • Docker-Compose模板文件
          • Docker-Compose常用命令
      • Docker快速入门
      • Docker镜像优化
      • Docker数据持久化总结
      • Docker网络模式深度解读
      • Dockerfile入门
      • Dockerfile设置默认时区
      • Dockerfile中CMD与ENTERPOINT差异比较
      • Docker Compose使用总结
  • 架构设计
  • 容器化
  • Docker
Ravior
2017-10-27
目录

Docker入门总结

Docker是Linux容器的一种封装,提供了简单易用的容器使用接口,是目前最流行的 Linux容器解决方案。

Linux容器与传统虚拟机对比:

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般是几十个

# 架构

Docker

Docker的核心组件如下:

  • Docker daemon( Docker守护进程):Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程,可通过 Docker客户端与之通信。
  • Client( Docker客户端):Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。
  • Images( Docker镜像):Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序。
  • Container(容器):容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来启停、移动、删除容器。
  • Registry:Docker Registry是一个集中存储与分发镜像的服务。一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本镜像。如果不给出标签,将以 latest 作为默认标签。

Docker使用 C/S 结构,即客户端/服务器体系结构。 Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。 Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 stock 或网络接口与远程 Docker 服务端进行通信。

Docker

# 常用命令

Docker

# 镜像相关

  • docker search image:从Docker仓库中搜索镜像
  • docker pull image:tag:从仓库中下载镜像,若要指定版本,则要在冒号后指定
  • docker images:列出已经下载的镜像
  • docker rmi image:删除本地镜像
  • docker build:构建镜像

# 容器相关

  • docker run -d -p 91:80 image :在后台运行nginx,若没有镜像则先下载,并将容器的80端口映射为宿主机的91端口。
    • -d:后台运行
    • -P:随机端口映射
    • -p:指定端口映射
    • -net:网络模式
  • docker ps:列出运行中的容器
  • docker ps -a :列出所有的容器
  • docker stop 容器id:停止容器
  • docker kill 容器id:强制停止容器
  • docker start 容器id:启动已停止的容器
  • docker inspect 容器id:查看容器的所有信息
  • docker container logs 容器id:查看容器日志
  • docker top 容器id:查看容器里的进程
  • docker exec -it 容器id /bin/bash:进入容器
  • exit:退出容器
  • docker rm 容器id:删除已停止的容器
  • docker rm -f 容器id:删除正在运行的容器

# Dockerfile

Dockerfile是自动构建docker镜像的配置文件, 用户可以使用Dockerfile快速创建自定义的镜像,Dockerfile是由一行行命令语句组成,并且支持已 # 开头的注释行。

一般来说,我们可以将Dockerfile分为四个部分:

  • 基础镜像(父镜像)信息指令 FROM
  • 维护者信息指令 MAINTAINER
  • 镜像操作指令 RUN 、 EVN 、 ADD 和 WORKDIR 等
  • 容器启动指令 CMD 、 ENTRYPOINT 和 USER 等

下面是一段简单的Dockerfile的例子:

FROM python:2.7
MAINTAINER Angel_Kitty <angelkitty6698@gmail.com>
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["app.py"]
1
2
3
4
5
6
7
8

以上Dockerfile逻辑过程如下:

  • 从 Docker Hub 上 pull 下 python 2.7 的基础镜像
  • 显示维护者的信息
  • copy 当前目录到容器中的 /app 目录下 复制本地主机的 <src> ( Dockerfile 所在目录的相对路径)到容器里 <dest>
  • 指定工作路径为 /app
  • 安装依赖包
  • 暴露 5000 端口
  • 启动 app

# Dockerfile常用的指令

常用指令如下图:

Docker

备注:RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。注意,指定了CMD命令以后,docker container run命令就不能附加命令了,否则它会覆盖CMD命令。

# Docker Compose

Ddocker-compose 是一个用户定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。

# Docker-Compose模板文件

Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分,以下为模板文件示例:

version: '2'
services:
  web:
    image: dockercloud/hello-world
    ports:
      - 8080
    networks:
      - front-tier
      - back-tier

  redis:
    image: redis
    links:
      - web
    networks:
      - back-tier

  lb:
    image: dockercloud/haproxy
    ports:
      - 80:80
    links:
      - web
    networks:
      - front-tier
      - back-tier
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 

networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。 build: /path/to/build/dir 也可以是相对路径,只要上下文确定就可以读取到Dockerfile。 build: ./dir 设定上下文根目录,然后以该目录为准指定Dockerfile。

build:
  context: ../
  dockerfile: path/of/Dockerfile
1
2
3

# Docker-Compose常用命令

  • docker-compose up -d:在后台启动所有服务,可以用-f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定:docker-compose -f docker-compose.yml up -d。
  • docker-compose ps [options] [SERVICE...]:列出项目中目前的所有容器。
  • docker-compose stop [options] [SERVICE...]:停止正在运行的容器,可以通过docker-compose start 再次启动。
  • docker-compose down [options]:停止和删除容器、网络、卷、镜像。
  • docker-compose logs [options] [SERVICE...]:查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
  • docker-compose build [options] [--build-arg key=val...] [SERVICE...]:构建(重新构建)项目中的服务容器。
  • docker-compose pull [options] [SERVICE...]:拉取服务依赖的镜像。
  • docker-compose restart [options] [SERVICE...]:重启项目中的服务。
  • docker-compose rm [options] [SERVICE...]:删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。
  • docker-compose start [SERVICE...]:启动已经存在的服务容器。
  • docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]:在指定服务上执行一个命令。
  • docker-compose scale [SERVICE=num..]:设置指定服务运行的容器个数。通过service=num的参数来设置数量。
  • docker-compose pause [SERVICE...]:暂停一个服务容器。
  • docker-compose kill [options] [SERVICE...]:通过发送SIGKILL信号来强制停止服务容器。
  • docker-compose config [options]:验证并查看compose文件配置。
  • docker-compose create [options] [SERVICE...]:为服务创建容器。
  • docker-compose exec [options] SERVICE COMMAND [ARGS...]:运行命令。
  • docker-compose push [options] [SERVICE...]:推送服务依的镜像。
  • docker-compose stop [options] [SERVICE...]:显示各个容器运行的进程情况。
  • docker-compose unpause [SERVICE...]:恢复处于暂停状态中的服务。

参考文档:

  • Docker快速入门——Docker-Compose (opens new window)
#Docker
上次更新: 2022/12/01, 11:09:34
ClickHouse使用总结
Docker快速入门

← ClickHouse使用总结 Docker快速入门→

最近更新
01
常用游戏反外挂技术总结
11-27
02
Golang开发实践万字总结
11-11
03
Redis万字总结
10-30
更多文章>
Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式