docker安装

本文详细介绍了Docker的核心概念、优势,如简化配置、提高开发效率、应用隔离和快速部署,并与虚拟机进行了对比。同时,提供了Docker在Linux和Windows上的安装教程,镜像市场的国内外链接,以及如何使用Docker构建和运行MySQL、Redis、PHP和Nginx的步骤。最后,介绍了使用docker-compose进行多容器应用的构建和管理。
摘要由CSDN通过智能技术生成

目录
介绍
安装
镜像市场
使用方法
使用docker构建
必要步骤
构建mysql
构建redis
构建php
构建nginx
使用docker-compose构建
编辑docker-compose.yml文件
运行
其他命令
其他
介绍
docker是什么?
Docker是一个软件集装箱化平台,这意味着您可以构建应用程序,将它与其依赖关系一起打包到一个容器中,然后这些容器可以很容易地运送到其他机器上运行。 Alt text

docker特点
简化配置
这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。

代码流水线(Code Pipeline)管理
前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。

提高开发效率
不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。 理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。

隔离应用
有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。

整合服务器
正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。

调试能力
Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。

快速部署
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而Docker通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。

docker跟虚拟机有什么区别?
每个应用程序将在单独的容器上运行,并将拥有自己的一组库和依赖项。 这也确保了进程级别的隔离,这意味着每个应用程序独立于其他应用程序,从而使开发人员可以确保他们可以构建不会相互干扰的应用程序。

容器是应用程序层的抽象,它将代码和依赖关系打包在一起。 多个容器可以在同一台计算机上运行,并与其他容器共享操作系统内核,每个容器都作为用户空间中的独立进程运行。 容器占用的空间少于虚拟机(容器图像的大小通常为几十MB)并且几乎立即启动。 有一个主机操作系统,然后在上面将会有容器具有每个应用程序的依赖关系和库,这使得处理和执行速度非常快。 这里没有客户操作系统,它利用主机的操作系统,与虚拟机不同,在需要时共享相关的库和资源。

虚拟机(VMs)是将一台服务器变成多台服务器的物理硬件的抽象。 管理程序允许多台虚拟机在单台机器上运行。 每个VM都包含一个操作系统的完整副本,一个或多个应用程序,必需的二进制文件和占用数十GB的库。 VM也可能启动缓慢。 有一个主机操作系统,其中有3个客户操作系统在运行,它们只不过是虚拟机。 但是,在同一主机操作系统上运行多个虚拟机会导致性能下降,因为每个虚拟机都有自己的内核和一组库以及依赖关系。 这占用了大量的系统资源,如硬盘,处理器,特别是RAM。所以,这是对Docker,集装箱化和虚拟化的简要概述。

安装
Linux安装
https://blog.csdn.net/powerccna/article/details/77897693

Windows安装
https://www.cnblogs.com/canger/p/9028723.html

镜像市场
国外:https://hub.docker.com/
国内:https://hub.daocloud.io/
使用方法
1.使用docker构建
#拉取文件后进入目录,并且将pwd命令获取的值作为变量path,目的为了简化以下执行的命令
cd docker.task && path=pwd
必须按照以下顺序构建,因为容器之间存在依赖关系,如nginx与php,如不先启动php-fpm,则nginx无法连接php-fpm

构建mysql
Dockerfile文件

FROM mysql:8.0
命令

#构建
docker build --no-cache -t mysql $path/mysql

#运行
docker run -dit -p 3306:3306
-e MYSQL_ROOT_PASSWORD=root
-e MYSQL_DATABASE=docker_db
-v $path/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
-v $path/mysql/data:/var/lib/mysql
–name mysql mysql
构建redis
Dockerfile文件

FROM redis:4.0

#启动redis服务
CMD redis-server /usr/local/etc/redis/redis.conf
命令

#构建
docker build --no-cache -t redis $path/redis

#运行
docker run -dit -p 6380:6379
-v $path/redis/redis.cnf:/usr/local/etc/redis/redis.conf
-v $path/redis/data:/data
–name redis redis
构建php
Dockerfile文件

FROM php:7.0-fpm

#暴露9000端口,让nginx容器能够连接得到
EXPOSE 9000

#修改容器系统的apt源
COPY ./sources.list.stretch /etc/apt/sources.list

#安装mysqli扩展
RUN apt-get update
&& docker-php-ext-install mysqli

#安装redis扩展
RUN pecl install redis

#安装swoole扩展(暂不演示,文件过大,安装比较占用时间)
#RUN pecl install swoole
命令

#构建
docker build --no-cache -t php $path/php

#运行
docker run -dit
-v $path/php/php.ini:/usr/local/etc/php/php.ini
-v $path/php/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf
-v $path/php/logs:/var/log
-v $path/www:/var/www/html
–link mysql:mysql
–link redis:redis
–name php php
构建nginx
Dockerfile文件

FROM nginx:alpine
命令

#构建
docker build --no-cache -t nginx $path/nginx

#运行(两个端口主要区分静态目录和php目录,方便理解)
docker run -dit -p 80:80 -p 81:81
-v $path/nginx/nginx.conf:/etc/nginx/nginx.conf
-v $path/nginx/logs:/var/log/nginx
-v $path/nginx/vhost:/etc/nginx/conf.d
-v $path/www:/var/www/html
–link php:php
–name nginx nginx
执行后,若没有报错,则访问对应的url即可看到效果
hello world http://localhost
显示phpinfo http://localhost:81
测试mysql连接 http://localhost:81/mysql.php
测试redis连接 http://localhost:81/redis.php

2.使用docker-compose构建
编辑docker-compose.yml文件
可根据自身需求编辑docker-compose.yml文件,以下则为展示时的默认配置

version: “3”
services:

mysql:
build: ./mysql
container_name: mysql
ports:
- 3306:3306
volumes:
- ./mysql/data:/var/lib/mysql:rw
- ./mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: docker_db

redis:
build: ./redis
container_name: redis
ports:
- 6380:6379
volumes:
- ./redis/data:/data
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf

php:
build: ./php
container_name: php
depends_on:
- mysql
- redis
expose:
- 9000
links:
- mysql
- redis
volumes:
- ./www:/var/www/html:rw
- ./php/logs:/var/log:rw
- ./php/php.ini:/usr/local/etc/php/php.ini:ro
- ./php/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf:rw

nginx:
build: ./nginx
container_name: nginx
depends_on:
- php
links:
- php
ports:
- 80:80
- 81:81
volumes:
- ./www:/var/www/html:rw
- ./nginx/logs:/var/log/nginx:rw
- ./nginx/vhost:/etc/nginx/conf.d/:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro

运行
#构建并且以守护进程模式运行(-d参数),默认执行docker-compose.yml
docker-compose up --build -d
#指定文件执行
docker-compose up --build -d -f demo.yml
执行后,若没有报错,则访问对应的url即可看到效果
hello world http://localhost
显示phpinfo http://localhost:81
测试mysql连接 http://localhost:81/mysql.php
测试redis连接 http://localhost:81/redis.php

其他命令
#查看容器列表
docker-compose ps
#停止容器
docker-compose stop container_name
#启动容器
docker-compose start container_name
#重启容器
docker-compose restart container_name
#查看日志
docker-compose logs container_name
#登录到容器
docker-compose exec container_name bash
其他
实现nginx负载均衡
使用haproxy与redis-cluster实现redis的集群
等等…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值