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 客户端和服务端可以运行在一台机器上,也可以通过 RESTfulstock 或网络接口与远程 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的例子:

1
2
3
4
5
6
7
8
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"]

以上Dockerfile逻辑过程如下:

  • Docker Hubpullpython 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两个部分,以下为模板文件示例:

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
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

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

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

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…]:恢复处于暂停状态中的服务。

参考文档:

有用就打赏一下作者吧!