Docker入门总结
Docker是Linux容器的一种封装,提供了简单易用的容器使用接口,是目前最流行的 Linux容器解决方案。
Linux容器与传统虚拟机对比:
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般是几十个 |
# 架构
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 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"]
2
3
4
5
6
7
8
以上Dockerfile逻辑过程如下:
- 从
Docker Hub
上pull
下python 2.7
的基础镜像 - 显示维护者的信息
copy
当前目录到容器中的/app
目录下 复制本地主机的<src>
(Dockerfile
所在目录的相对路径)到容器里<dest>
- 指定工作路径为
/app
- 安装依赖包
- 暴露
5000
端口 - 启动
app
# Dockerfile常用的指令
常用指令如下图:
备注: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
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
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...]:恢复处于暂停状态中的服务。
参考文档: