docker-compose介绍及安装

docker-compose介绍

docker-compose是一个容器中的服务编排工具

docker镜像在创建之后,往往需要自己手动pull来获取镜像,然后执行docker run命令来运行。当服务需要用到多种容器,容器之间又产生了各种依赖和连接的时候,部署一个服务的手动操作是令人感到十分厌烦的。

dcoker-compose技术,就是通过一个.yml配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里,最后只需要执行docker-compose up命令就会像执行脚本一样的去一个个安装容器并自动部署他们,极大的便利了复杂服务的部署。

Docker-machine远程安装docker及使用

远程安装docker

实验环境

ip 服务 备注
192.168.1.11 docker、docker-machine ssh免密
192.168.1.12 初始环境可联网
192.168.1.13 初始环境可联网

实验目的

通过docker-machine为其他两台主机安装docker

Docker-Machine安装

Docker Machine的安装

为了下载不出错,先将防火墙关闭

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

下载Docker Machine

进入Docker官网,找到如下页面,或者直接访问这里

Docker中Web集群迁移及共享数据

实验环境

ip 服务 备注
192.168.1.11 DockerA
192.168.1.12 DockerB
192.168.1.13 NFS&Docker Registry

实验目的

DockerA主机内创建apache集群三台容器,热数据htdocs目录持久化到本地。(要求页面显示结果为chaiyanjiang.com)

迁移DockerA主机中的apache集群到DockerB中,需要连同htdocs目录内的数据一并迁移(把DockerA主机内的所有数据打包到镜像层中,并上传到Registry中,在DockerB下载该镜像后直接做成集群)

DockerA主机新建三台集群容器,数据来自NFS服务器,内容为“2020ComeOnWH”

Docker共享存储---共享数据

Docker共享数据

上一篇所说的volume卷就是共享数据的关键,比如web集群,集群每一台节点的数据都要求是相同的,包括之前的一些服务时,也为web集群部署nfs后端来存放数据

bind mount共享数据

学过的bind mount可以用来实现共享数据,但是方法比较笨拙,只能是创建容器的时候指定挂载目录,这样就需要一台一台去进行创建指定

如下:

Docker共享存储---卷容器(volume)

Docker的存储资源

Docker为容器提供了两类存储资源:

1.由storage Driver管理的镜像层和容器层

在docker服务器中查看docker信息

[root@localhost ~]# docker info
# 找到以下这条信息,overlay就是在graph中来管理镜像和容器的
# 镜像分层中也说到过,容器的COW特性,对容器的增删改查不会涉及到镜像层中的内容
# 这些功能就是由Storage Driver完成的,也是docker默认使用的driver
 Storage Driver: overlay2

2.Data Volume

单主机多个bridge网络间通信

实验如图所示:

作业

实验目的:

将nginx的端口映射到宿主机,通过宿主机来访问到nginx,然后nginx的php设置将会寻找php容器所在,最终显示页面

Docker单主机容器间通信

Docker的原生网络

也就是docker程序中自带的网络类型

查看Docker中的原生网络

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
e1aa5d692686        bridge              bridge              local
082e568090f3        host                host                local
70d9c743f011        none                null                local

原生网络主要用于,容器和容器之间的网络通讯,以及容器与外部主机之间的通讯

Docker网络从覆盖范围分为两种:

  • 单主机的容器之间的通讯

Docker容器状态的形成过程

Docker容器状态的形成过程

下图中是docker运行的几种状态,带有颜色的圆形块,是都可以在docker ps中查看到的状态

容器的运行过程

Docker私有仓库镜像使用

Docker私有仓库镜像的使用

市面上的公共仓库

Docker的公共仓库

由Docker公司维护的Registry,用户也可以将自己的镜像保存到DockerHub上中免费的response中,因为在国内访问由很多的限制

登录方法

docker login -u 用户名 密码 https://

登录后下载方法

docker pull 用户名/images名:tag

Dockerfile构建LNMP镜像

Dockerfile构建LNMP镜像

要求,构建完成后,进入容器可以直接访问到index.php

编写Dockerfile,为了方便看,将LNMP分为来写

准备本地环境

先将以下包,nginx/mysql/php所需的tar包拖入物理机

nginx-1.11.1.tar.gz
cmake-3.15.1.tar.gz
mysql-5.6.33.tar.gz
php-5.3.28.tar.gz

编写index.php页面,用于最后验证

Dockerfile构建Nginx镜像

Dockerfile构建nginx镜像

要求:dockerfile做nginx源码镜像。并且启动后容器后可以直接启动。

首先拖入nginx的tar包到物理机路径,与Dockerfile文件放在同一目录

编写Dockerfile

[root@localhost ~]# vim Dockerfile 
FROM centos  # 调用docker中已下载的centos镜像
MAINTAINER FeiYi  # 作者名为FeiYi
# 安装环境所需包
RUN yum -y install net-tools iproute pcre-devel openssl-devel gcc gcc-c++ make zlib-devel elinks
ADD nginx-1.11.1.tar.gz /usr/src  # 解压本地host中的nginx包到容器中的/usr/src目录
ENV NGINX_DIR /usr/src/nginx-1.11.1 # 定义环境变量
WORKDIR $NGINX_DIR  # 进入容器中的解压目录
# 编译安装
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
# 回到根目录
WORKDIR /
# 创建程序用户
RUN useradd nginx
# 优化命令环境
RUN ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
# 监听端口80
EXPOSE 80
# 后台启动nginx服务
CMD ["nginx", "-g", "daemon off;"]

使用Dockerfile构建镜像

Dockerfile语法及构建简单镜像

Dockerfile语法及构建简单镜像

前面使用过docker commit去构建镜像

Docker并不建议用户通过这种方式构建镜像。原因如下:

  1. 这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱。比如要在 debian base 镜像中也加入 vi,还得重复前面的所有步骤。
  2. 更重要的:使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患。

既然 docker commit 不是推荐的方法,我们干嘛还要花时间学习呢?

原因是:即便是用 Dockerfile(推荐方法)构建镜像,底层也 docker commit 一层一层构建新镜像的。学习 docker commit 能够帮助我们更加深入地理解构建过程和镜像的分层结构。

镜像分层结构理论详解2

镜像分层结构理论

要学习去构建镜像,就要做到为什么镜像会如此的小

从最小的镜像开始

世界上最小的镜像是hello-world(1.84kb)

[root@localhost ~]# docker images
REPOSITORY     TAG        IMAGE ID          CREATED             SIZE
hello-world    latest     fce289e99eb9      15 months ago       1.84kB

尝试运行这个镜像会发生什么

镜像分层结构理论详解1

镜像分层结构理论

Docker镜像

据Docker官网的技术文档描述,Image(镜像)是Docker术语的一种,代表一个只读的layer。而layer则具体代表Docker Container文件系统中可叠加的一部分。

笔者如此介绍Docker镜像,相信众多Docker爱好者理解起来依旧是云里雾里。那么理解之前,先让我们来认识一下与Docker镜像相关的4个概念:rootfs、Union mount、image以及layer。





正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0