Docker 学习1 - 入门基础篇
主机环境
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.3.1611 (Core)
Release: 7.3.1611
Codename: Core
一. Docker 介绍
1.1 Docker 思想
Docker 它的思想来源于集装箱。
啥是集装箱? 集装箱就是用来封存、隔离不同的货物。
比如:在济南我刚开了一家海鲜舫,供客人来吃海鲜,长期需要海鲜与啤酒。
这时,我在青岛找了两家合作商给我供货,青岛码头渔民将他们打捞回来的海鲜放到集装箱里,暂称它为海鲜集装箱,啤酒合作商将他们制造的啤酒放到集装箱里,暂称它为啤酒集装箱。
然后租一辆大货车,将海鲜集装箱与啤酒集装箱运到我的海鲜舫,这时可能这个大货车特别大,司机为了将货车填满多挣点儿钱,又为张三拉了些大玩具,暂称他为大玩具集装箱,大货车上就有了三个集装箱。
因为我只需要啤酒集装箱与海鲜集装箱,我就只从大货车上拿这两个就行了,我不要大玩具集装箱。
~~
1.2 关键词 (重要)
本地终端、容器、大海豚(Docker)、镜像(集装箱)、中央仓库(码头)
本地终端: 也就是我开的海鲜舫
容器: 本地终端安装好已运行起来的镜像。(例: Nginx 容器,MySQL 容器等)(也就是吃海鲜)
大海豚: 也就是大货车
镜像(各种集装箱)
所有人将内容打包放到不同的镜像中,当需要不同的内容时,直接拿到这个镜像就可以了。
例: 张三将他的 Nginx 环境进行打包成镜像并上传到中央仓库,这时,李四需要安装 Nginx 环境,只需要安装好 Docker ,将Nginx 镜像从中央仓库拉取到本地安装就可以了。
中央仓库(码头)
存放所有人提交的镜像的地方
1.3 Docker 特性
部分摘自如何通俗的解释Docker是什么及其优点?
标准化
运输标准化
Docker 有一个中央仓库,所有人上传的镜像都放在这里,当谁需要某个环境或者软件时,就直接指派大海豚去搬运这个集装箱就可以了。
命令标准化
Docker 提供了一系列的命令,帮助我们去获取集装箱等。
提供了 REST 的API; 衍生出了很多的图形化界面, Rancher。
一致性
Docker 提供了一个统一且一致的运行环境,适用于运行各种软件产品。
隔离性
Docker 在运行镜像时,会在 Linux 内核中单独的开辟一片空间,这片空间会影响其他功能。
可移植性
Docker 容器可轻松地从一个 Docker 运行环境移植到另一个 Docker 环境,从而以这种方式减少系统管理和操作的成本。
可追溯性
- Docker 容器是根据脚本构建的,该脚本在必要的软件依赖和环境下是可读摘要的。脚本可以受版本控制,完全可以通过这种方式跟踪。
- Docker 容器可以存储在组织内的存储库中,从而这种方式保留整个版本历史记录。
1.4 到底啥是 Docker
扯了这么多,那到底啥是 Docker
先看一下我理解的 Docker 的作用吧 :
- 获取与运输功能: 从合作商那儿获取到要运输的海鲜与啤酒,运输到海鲜舫
这一步在 Docker 中实际是 人员使用 Docker 从中央仓库获取到镜像,将镜像拉取到本地,或者将本地的镜像上传至中央仓库。
- 制作与运行功能: 我拿到海鲜与啤酒就可以根据不同口味做成熟食供客人消费了。
这一步在 Docker 中实际是 人员使用 Docker 将镜像根据不同的配置生成容器后再运行容器后,便供我使用这个容器的服务了。
- 打包功能: 人类使用叉车把不同的货物装到集装箱里。
这一步在 Docker 中实际是 人员使用 Docker 把容器打包成镜像。
口号
- Build、Ship、Run (搭建、发送、运行 三板斧 🪓)
- Build once , Run anywhere (搭建一次, 到处能用 👍)
Docker 不是镜像,不是容器, Docker 是应用程序工具。
二. Docker 的基本操作
2.1 安装 Docker
# 1. 安装所需的软件包sudoyum-yinstallyum-utils device-mapper-persistent-data 1vm2# 2. 设置国内 Docker 的镜像源(选择其一)# 阿里云源sudoyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 清华大学源sudoyum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo# 3. 安装 Dockersudoyum makecache fastsudoyum-yinstalldocker-ce# 4. 启动 Docker 服务systemctl startdocker# 5. 设置开机自动启动systemctlenabledocker2.2 Docker 的中央仓库
Docker 官方的中央仓库: 镜像最全,但下载速度较慢。
Dockerhub
- 国内的镜像网站
网易蜂巢
daoCloud -推荐使用
- 公司内部私服(需要添加配置)
需要在
/etc/docker/daemon.json添加配置(文件不存在则手动创建){"registry-mirrors":["https://registry.docker-cn.com","https://docker.m.daocloud.io","https://docker.1panel.live"],"insecure-registries":["ip:port"]// 公司内部Docker私服的的 IP 与端口号}重启两个服务
systemctl daemon-reload
systemctl restart docker
2.3 镜像的操作
# 1. 拉取镜像到本地dockerpull 镜像名称[:tag]# 举个栗子dockerpull daocloud.io/library/nginx:1.12.0-alpine# 2. 查看本地全部镜像dockerimages# 3. 删除单个镜像dockerrmi 镜像的IMAGE_ID IMAGE_ID IMAGE_ID IMAGE_ID# 删除多个镜像dockerrmi 镜像的IMAGE_ID# 删除所有镜像dockerrmi-f$(dockerimages-aq)# 4. 镜像的导入导出# 将本地镜像导出dockersave-o导出的路径及路径 镜像的IMAGE_ID# 加载本地的镜像,通过 docker load 加载的本地镜像的 REPOSITORY与 TAG 都为 nonedockerload-i镜像文件# 修改镜像名称dockertag 镜像的IMAGE_ID 新镜像名称:TAG# 5. 查看镜像元数据dockerinspect 镜像IMAGE_ID2.4 容器的操作
# 1. 运行容器# 当使用 docker run 命令运行不存在的镜像时,会自动下载镜像并运行# 简单操作dockerrun 镜像IMAGE_ID 或者dockerrun 镜像名称[:tag]# 常用的参数dockerrun-d-p宿主机端口:容器端口--name容器名称 镜像IMAGE_ID# -d : 代表后台运行容器# -p 宿主机端口:容器端口 : 是为了映射当前 Linux 的端口和容器的端口# --name 容器名称 : 指定容器的名称# 2. 查看正在运行的容器,常用的参数dockerps[-alq]# -a : 查看全部的容器,包括未运行的容器# -l : 显示最近创建的容器# -q : 静默模式,只查看容器的标识# 查看容器元数据dockerinspect 容器CONTAINER_ID# 查看容器进程dockertop容器CONTAINER_ID# 3. 查看容器的日志dockerlogs-f容器CONTAINER_ID# -f : 表示滚动查看日志的最后几行# 4. 进入容器内部系统dockerexec-it容器CONTAINER_IDbash或dockerexec-it容器CONTAINER_IDsh# 5. 启动容器dockerstart 容器CONTAINER_ID# 6. 删除容器(删除容器前,需要先停止容器)# 停止指定容器dockerstop 容器CONTAINER_ID# 停止全部容器dockerstop$(dockerps-qa)# 删除指定容器dockerrm容器CONTAINER_ID# 删除全部容器dockerrm$(dockerps-qa)2.5 Docker 数据卷 (数据持久化|共享文件夹|目录挂载)
docker 关闭后,运行时所留下的数据也会被清理,但我们希望留下来,怎么办,那就要配置数据卷了。
# 1. 创建数据卷, 默认存放路径 /var/lib/docker/volumes/数据卷名称/_datadockervolume create 数据卷名称# 2. 查看数据卷的详细信息dockervolume inspect 数据卷名称# 3. 查看全部数据卷dockervolumels# 4. 删除数据卷dockervolumerm数据卷名称# 5. 应用数据卷# 映射数据卷时,如果数据卷不存在,Docker 根据数据卷名称自动创建,并会将容器内部自带的文件,存储在本地默认的数据卷路径中。# 数据卷名称映射dockerrun-v数据卷名称:容器内部的路径 镜像id# 路径进行映射dockerrun-v本机路径:容器内部的路径 镜像id# 6. 使用数据卷dockerrun-d-p8080:8080--namenginx-v数据卷名称:容器内部的路径 镜像iddockerrun-d-p8080:8080--namenginx-v本机路径:容器内部的路径 镜像id2.6 Docker 可视化界面工具 Pirtainer
- 安装, 这里我使用 8088 端口,可自定义
dockerrun-d-p8088:9000--restart=always-v/var/run/docker.sock:/var/run/docker.sock--privileged=true portainer/portainer# 重启该容器dockerps# 找到 portainer 容器dockerrestart 容器id
- 服务器放行 8088 端口
进入你的服务器,找到防火墙,放行 8088 端口- 访问
浏览器地址栏输入ip:8088访问
三. Docker 自定义镜像
Docker 中央仓库上的镜像,也是 Docker 用户上传的。
Docker 通过读取 Dockerfile 文件中的指令生成镜像。
Dockerfile文件详解
点击查看 - Dockerfile文件详解 (必须)
# 1. 生成镜像dockerbuild-t自定义镜像名称:[tag]-fDockerfile文件路径四. Docker Compose
4.1 Docker Compose 简介
Docker Compose 是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
Docker Compose 是用于设置和运行多个 Docker 容器的应用程序工具。
说白了就是,应用系统中需要部署多个应用程序,如果每个应用都要执行启停命令或者单独操作,效率特别低。这时把需要的容器配置放到一个
.yml文件中,用于统一管理,提高效率。
4.2 Docker Compose 安装与卸载
# 1. 下载 Docker Composesudocurl-Lhttps://get.daocloud.io/docker/compose/releases/download/v2.16.0/docker-compose-`uname-s`-`uname-m`>/usr/local/bin/docker-compose# 或sudocurl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose# 2. 对二进制文件增加可执行权限sudochmod+x /usr/local/bin/docker-compose# 3. 增加软连接(环境变量)sudoln-s/usr/local/bin/docker-compose /usr/bin/docker-compose# 4. 测试是否成功docker-compose--version# 1. 卸载sudorm/usr/local/bin/docker-compose4.3 Docker Compose 使用方法
- 使用Dockerfile文件定义应用程序的环境。
- 使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 执行
docker-compose up -d命令来启动并运行整个应用程序。
4.4 docker-compose.yml 配置文件详解
点击查看 - Docker Compose -> yml 配置指令参考
4.5 Docker Compose 常用命令
镜像操作
# 1. 验证配置项,正确时显示文件内容,错误时显示错误信息docker-composeconfig# 2. 构建镜像docker-composebuild nginx# 3. 不带缓存构建镜像docker-composebuild --no-cache nginx# 4. 查看 Compose 所有镜像docker-composeimages# 5. 运行所有镜像,后台运行docker-composeup-d# 6. 运行单个镜像docker-composeup-dnginx# 7. 修改 yml 文件后,重新加载运行docker-composeup --force-recreate-d容器操作
# 1. 暂停容器docker-composepause nginx# 2. 恢复容器docker-composeunpause nginx# 3. 删除容器,先停止后删除docker-composestop nginxdocker-composermnginx# 4. 停止容器docker-composestop nginx# 5. 启动容器docker-composestart nginx# 6. 重启容器docker-composerestart nginx# 7. 查看所有容器docker-composeps-a# 8. 进入容器中docker-composeexecnginxsh或docker-composeexecnginxbash# 9. 停止 up 启动的容器并删除docker-composedown# 10. 查看容器内运行的进程docker-composetop或docker-composetopnginx# 11. 查看容器日志docker-composelogs-fnginx4.6 Dockerfile 配合 docker-compose 使用
使用 Dockerfile 文件生成自定义镜像, 并由 docker-compose 读取 docker-compose.yml 配置文件来管理容器
# docker-compose.yml 文件配置(根据自身情况编写)# 最主要的是 build 配置指令,通过 build 指令,指定为通过从 Dockerfile 来构建镜像# 例version:"3"services:php5.6:build:context:../# Dockerfile 文件位于 docker-compose.yml 文件同级目录中的 dir 文件夹内dockerfile:Dockerfile-php56# 然而 Dockerfile 文件名为 Dockerfile-php56# Dockerfile-nginx 文件配置(根据自身情况编写)FROM daocloud.io/php:5.6-apache COPY config/php.ini /usr/local/etc/php COPY src/ /var/www/html/# 例 文件夹结构|--test_docker||--Dockerfile-php56# Dockerfile 文件||--docker-compose# docker-compose 目录||--docker-compose.yml#docker-compose.yml 目录||--config# 自定义文件||--php.ini||--src五、网络
5.1 查看容器 IP
# 查看单个容器 IPdockerinspect-f'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'容器ID# 查看所有容器 IPdockerinspect-f'{{.Name}} - {{.NetworkSettings.IPAddress }}'$(dockerps-aq)# 查看通过 docker-compose 创建的容器 IPdockerinspect--format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'$(dockerps-aq)#---------------------------------------------------------------------------# 配置快捷键vim~/.bash_profile# Mac 电脑# 或vim~/.bashrc# centos# 添加以下内容# dockerfunctiondocker_ip(){sudodockerinspect-f'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'$1}functiondocker_ip_list(){sudodockerinspect-f'{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'$(dockerps-aq)}# 刷新生效source~/.bash_profile# Mac 电脑# 或source~/.bashrc# centos# 使用,宿主机终端输入docker_ip_list docker_ip 容器ID5.2 查看 docker 网络模式
dockernetworkls点击查看 Docker 网络详解
六. 搭建运行 PHP 所需要的环境
大神已经分享开源了,我们直接使用。为大神鼓掌👏。一共有两套,都贴出来,大家有时间都可以练习试试
GitHub - dnmp - 源码地址 - Gary Meng (作者)
Gitee - dnmp - 源码地址 - Gary Meng (作者)
GitHub - dnmp - 源码地址 - Tinywan (作者)
Gitee - dnmp - 源码地址 - Tinywan (作者)
docker:用官方镜像在本地搭建PHP开发环境
学习链接
Docker 官方文档
菜鸟教程 - Docker compose
B站教学视频 - Docker最新超详细版教程通俗易懂 (本文学习视频)
