Docker 全解

2020-03-21  本文已影响0人  Robin92

本文章从广度上讲解 Docker 使用的基本流程。

容器化时代的由来

容器化时代.png

Docker Engine

Docker Engine 位于物理机与APP之间,为上层 APP 提供下层物理机的可用资源(内存、CPU等等)

Docker Engine

Docker Engine 是 C/S 架构,用 REST API 进行通讯,可以将客户端和服务端方便地分离在不同的主机上。

Docker Engine C/S 模型

容器和镜像

镜像是提供了运行程序完整的软硬件资源的集装箱。(可类比于一个系统镜像)

容器是由镜像生成的可运行的实例。容器之间彼此隔离。(可类比于由系统镜像安装好的一个系统)

Docker 的执行流程

Docker 的执行流程

常用命令

docker run 必用参数:

默认 docker 的文件目录在 /var/lib/docker 中,有存储镜像、容器等等。

docker 的生命周期

生命状态有: created (==stopped), running(/Up), stopped(/Exited), deleted, paused

控制命令(docker <command>)有: create, run, start, rm, kill, stop, restart, pause, unpause

Dockerfile 镜像的描述文件

Dockerfile 是一个命令文本,Docker 通过读取 Dockerfile 的指令按步自动创建镜像。

创建镜像命令:

docker build -t 机构/镜像名<:tag> <dockerfile>

Dockerfile 命令

RUN、ENTRYPOINT、CMD 详解:

镜像分层

在 build Dockerfile 时,是每一行生成一个镜像。这就是镜像分层。可以修改 Dockerfile 的后几个命令查看 build 执行时的输出会有 Using cache 提示,即使用了缓存的镜像。

实例:自制 redis docker 镜像

FROM ubuntu
RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "gcc", "net-tools", "make"]
WORKDIR /usr/local
ADD redis-5.0.5.tar.gz .
WORKDIR /usr/local/redis-5.0.5/src
RUN make && make install
WORKDIR /usr/local/redis-5.0.5
ADD redis-7000.conf .
EXPOSE 7000
CMD ["redis-server", "redis-7000.conf"]

容器间的单向访问:Link 参数

容器启动会自动创建 IP 地址,同一个机器上不同的容器可以用 IP 进行互联。但 IP 是容器创建时自动生成的,不能用于实际业务。

容器间创建时用 link 参数指定到关联的容器名上,即可进行单向的访问。

docker run -d --name <name> --link <other_container_name> <image_name>

容器的双向通信:Bridge 网桥

网桥是 docker 环境与物理网卡通信的桥梁(是在什么时候创建的,是不是第一个 docker 启动的时候?),各容器内部访问外网也需要通过它。

网桥.png

docker 可以将容器从网络层面上进行分组:docker network

网桥的实现原理

当创建一个网桥时, docker 会在宿主机上创建一个 虚拟网卡,充当网关的作用实现内部的互联外部的隔离。

网桥的实现原理.png

容器间数据共享

原理:容器与宿主机共享一块文件空间(Volume,或者说文件夹),这样可以多个容器同时共享一块空间。

数据共享.png

方法一:运行容器时挂载共享目录

docker run --name <container_name> -v <host/shared/dir>:</container/dir  <image_name>

方法二:先创建一个共享宿主机目录的容器,运行其他容器时引用这个容器上的共享目录。(/bin/true 只是一个占位符)

docker create --name <new_shared_container_name> -v <host_dir>:<container_dir> <image> /bin/true
docker run --volumes-from <shared_container_name> --name <container_name> -d <image>

方法二让我们修改容器目录更加得简单,可以统一管理共享目录一致的容器,只需要改 <shared_container_name> 的共享目录就可以应用到其他容器上

容器编排工具 Docker Composer

容器编排:一次性部署多个容器,且保持容器间的依赖关系与部署流程的依赖关系。

特点:单机内多容器部署;通过 .yml.yaml 定义如何部署。

多机容器编排时,可以用 docker-swarm 或 kubenetes。

实例:用 Docker Compose 部署 WordExpress

Docker Compose 实战

hub.docker.com/ 中找可用的镜像资源。

上一篇 下一篇

猜你喜欢

热点阅读