您当前的位置: 首页 >  docker

暂无认证

  • 4浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Docker 学习1 - 入门基础篇

发布时间:2021-06-24 18:01:56 ,浏览量:4

主机环境

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)、镜像(集装箱)、中央仓库(码头)

  1. 本地终端: 也就是我开的 海鲜舫

  2. 容器: 本地终端安装好已运行起来的镜像。(例: Nginx 容器,MySQL 容器等)(也就是 吃海鲜)

  3. 大海豚: 也就是 大货车

  4. 镜像(各种 集装箱)

    所有人将内容打包放到不同的 镜像 中,当需要不同的内容时,直接拿到这个 镜像 就可以了。

    例: 张三将他的 Nginx 环境进行打包成 镜像 并上传到 中央仓库 ,这时,李四需要安装 Nginx 环境,只需要安装好 Docker ,将 Nginx 镜像 从 中央仓库 拉取到本地安装就可以了。

  5. 中央仓库(码头)

    存放所有人提交的 镜像 的地方

1.3 Docker 特性

部分摘自如何通俗的解释Docker是什么及其优点?

  1. 标准化

    1. 运输标准化

      Docker 有一个 中央仓库,所有人上传的 镜像 都放在这里,当谁需要某个环境或者软件时,就直接指派 大海豚 去搬运这个 集装箱 就可以了。

    2. 命令标准化

      Docker 提供了一系列的命令,帮助我们去获取 集装箱 等。

    3. 提供了 REST 的API; 衍生出了很多的图形化界面, Rancher。

  2. 一致性

    Docker 提供了一个统一且一致的运行环境,适用于运行各种软件产品。

  3. 隔离性

    Docker 在运行 镜像 时,会在 Linux 内核中单独的开辟一片空间,这片空间会影响其他功能。

  4. 可移植性

    Docker 容器可轻松地从一个 Docker 运行环境移植到另一个 Docker 环境,从而以这种方式减少系统管理和操作的成本。

  5. 可追溯性

    1. Docker 容器是根据脚本构建的,该脚本在必要的软件依赖和环境下是可读摘要的。脚本可以受版本控制,完全可以通过这种方式跟踪。
    2. Docker 容器可以存储在组织内的存储库中,从而这种方式保留整个版本历史记录。
1.4 到底啥是 Docker

扯了这么多,那到底啥是 Docker 先看一下我理解的 Docker 的作用吧 :

  • 获取与运输功能 : 从 合作商 那儿获取到要运输的 海鲜与啤酒,运输到 海鲜舫

这一步在 Docker 中实际是 人员使用 Docker 从 中央仓库 获取到镜像,将 镜像 拉取到本地,或者将本地的 镜像 上传至 中央仓库。

  • 制作与运行功能 : 我拿到 海鲜与啤酒 就可以根据不同口味做成熟食供客人消费了。

这一步在 Docker 中实际是 人员使用 Docker 将 镜像 根据不同的配置 生成容器 后再运行容器后,便供我使用这个容器的服务了。

  • 打包功能 : 人类使用叉车把不同的货物装到集装箱里。

这一步在 Docker 中实际是 人员使用 Docker 把 容器 打包成镜像。

口号

  1. Build、Ship、Run (搭建、发送、运行 三板斧 🪓)
  2. Build once , Run anywhere (搭建一次, 到处能用 👍)

Docker 不是镜像,不是容器, Docker 是应用程序工具。

二. Docker 的基本操作 2.1 安装 Docker
# 1. 安装所需的软件包
sudo yum -y install yum-utils device-mapper-persistent-data 1vm2

# 2. 设置国内 Docker 的镜像源(选择其一)
# 阿里云源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 清华大学源
sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

# 3. 安装 Docker
sudo yum makecache fast
sudo yum -y install docker-ce

# 4. 启动 Docker 服务
systemctl start docker

# 5. 设置开机自动启动
systemctl enable docker
2.2 Docker 的中央仓库
  1. Docker 官方的中央仓库: 镜像最全,但下载速度较慢。

    Dockerhub

  1. 国内的镜像网站
    1. 网易蜂巢

    2. daoCloud - 推荐使用

  1. 公司内部私服(需要添加配置)
  1. 需要在 /etc/docker/daemon.json 添加配置(文件不存在则手动创建)

  2. {
        "registry-mirrors": ["https://registry.docker-cn.com"],
        "insecure-registries": ["ip:port"] // 公司内部Docker私服的的 IP 与端口号
    }
    
  3. 重启两个服务

    systemctl daemon-reload

    systemctl restart docker

2.3 镜像的操作
# 1. 拉取镜像到本地 
docker pull 镜像名称[:tag]
# 举个栗子
docker pull daocloud.io/library/nginx:1.12.0-alpine

# 2. 查看本地全部镜像
docker images

# 3. 删除单个镜像
docker rmi 镜像的IMAGE_ID IMAGE_ID IMAGE_ID IMAGE_ID
# 删除多个镜像
docker rmi 镜像的IMAGE_ID
# 删除所有镜像
docker rmi -f $(docker images -aq)

# 4. 镜像的导入导出
# 将本地镜像导出
docker save -o 导出的路径及路径 镜像的IMAGE_ID 

# 加载本地的镜像,通过 docker load 加载的本地镜像的 REPOSITORY与 TAG 都为 none
docker load -i 镜像文件

# 修改镜像名称
docker tag 镜像的IMAGE_ID 新镜像名称:TAG

# 5. 查看镜像元数据
docker inspect 镜像IMAGE_ID
2.4 容器的操作
# 1. 运行容器

# 当使用 docker run 命令运行不存在的镜像时,会自动下载镜像并运行

# 简单操作
docker run 镜像IMAGE_ID 或者 docker run 镜像名称[:tag]

# 常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像IMAGE_ID
    # -d : 代表后台运行容器
    # -p 宿主机端口:容器端口 : 是为了映射当前 Linux 的端口和容器的端口
    # --name 容器名称 : 指定容器的名称
# 2. 查看正在运行的容器,常用的参数
docker ps [-alq]
	# -a : 查看全部的容器,包括未运行的容器
	# -l : 显示最近创建的容器
	# -q : 静默模式,只查看容器的标识
# 查看容器元数据
docker inspect 容器CONTAINER_ID

# 查看容器进程
docker top 容器CONTAINER_ID
# 3. 查看容器的日志
docker logs -f 容器CONTAINER_ID
	# -f : 表示滚动查看日志的最后几行
# 4. 进入容器内部系统
docker exec -it 容器CONTAINER_ID bash 或 docker exec -it 容器CONTAINER_ID sh
# 5. 启动容器
docker start 容器CONTAINER_ID
# 6. 删除容器(删除容器前,需要先停止容器)

# 停止指定容器
docker stop 容器CONTAINER_ID

# 停止全部容器
docker stop $(docker ps -qa)

# 删除指定容器
docker rm 容器CONTAINER_ID 

# 删除全部容器
docker rm $(docker ps -qa) 
2.5 Docker 数据卷 (数据持久化|共享文件夹|目录挂载)

docker 关闭后,运行时所留下的数据也会被清理,但我们希望留下来,怎么办,那就要配置数据卷了。

# 1. 创建数据卷, 默认存放路径 /var/lib/docker/volumes/数据卷名称/_data
docker volume create 数据卷名称
# 2. 查看数据卷的详细信息
docker volume inspect 数据卷名称
# 3. 查看全部数据卷
docker volume ls
# 4. 删除数据卷
docker volume rm 数据卷名称
# 5. 应用数据卷
# 映射数据卷时,如果数据卷不存在,Docker 根据数据卷名称自动创建,并会将容器内部自带的文件,存储在本地默认的数据卷路径中。

# 数据卷名称映射
docker run -v 数据卷名称:容器内部的路径 镜像id

# 路径进行映射
docker run -v 本机路径:容器内部的路径 镜像id
# 6. 使用数据卷
docker run -d -p 8080:8080 --name nginx -v 数据卷名称:容器内部的路径 镜像id
docker run -d -p 8080:8080 --name nginx -v 本机路径:容器内部的路径 镜像 id
2.6 Docker 可视化界面工具 Pirtainer
  1. 安装, 这里我使用 8088 端口,可自定义
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

# 重启该容器
docker ps # 找到 portainer 容器
docker restart 容器id
  1. 服务器放行 8088 端口 进入你的服务器,找到防火墙,放行 8088 端口
  2. 访问 浏览器地址栏输入 ip:8088 访问
三. Docker 自定义镜像

Docker 中央仓库上的镜像,也是 Docker 用户上传的。

Docker 通过读取 Dockerfile 文件中的指令生成镜像。

Dockerfile文件详解

点击查看 - Dockerfile文件详解 (必须)

# 1. 生成镜像
docker build -t 自定义镜像名称:[tag] -f Dockerfile文件路径
四. Docker Compose 4.1 Docker Compose 简介

Docker Compose 是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

Docker Compose 是用于设置和运行多个 Docker 容器的应用程序工具。

说白了就是,应用系统中需要部署多个应用程序,如果每个应用都要执行启停命令或者单独操作,效率特别低。这时把需要的容器配置放到一个 .yml 文件中,用于统一管理,提高效率。

4.2 Docker Compose 安装与卸载
# 1. 下载 Docker Compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/v2.16.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 或
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 2. 对二进制文件增加可执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 3. 增加软连接(环境变量)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 4. 测试是否成功
docker-compose --version
# 1. 卸载
sudo rm /usr/local/bin/docker-compose
4.3 Docker Compose 使用方法
  1. 使用 Dockerfile 文件定义应用程序的环境。
  2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  3. 执行 docker-compose up -d 命令来启动并运行整个应用程序。
4.4 docker-compose.yml 配置文件详解

点击查看 - Docker Compose -> yml 配置指令参考

4.5 Docker Compose 常用命令 镜像操作
# 1. 验证配置项,正确时显示文件内容,错误时显示错误信息
docker-compose config

# 2. 构建镜像
docker-compose build nginx

# 3. 不带缓存构建镜像
docker-compose build --no-cache nginx

# 4. 查看 Compose 所有镜像
docker-compose images

# 5. 运行所有镜像,后台运行
docker-compose up -d

# 6. 运行单个镜像
docker-compose up -d nginx

# 7. 修改 yml 文件后,重新加载运行
docker-compose up --force-recreate -d
容器操作
# 1. 暂停容器
docker-compose pause nginx

# 2. 恢复容器
docker-compose unpause nginx

# 3. 删除容器,先停止后删除
docker-compose stop nginx
docker-compose rm nginx

# 4. 停止容器
docker-compose stop nginx

# 5. 启动容器
docker-compose start nginx

# 6. 重启容器
docker-compose restart nginx

# 7. 查看所有容器
docker-compose ps -a

# 8. 进入容器中
docker-compose exec nginx sh 或 docker-compose exec nginx bash

# 9. 停止 up 启动的容器并删除
docker-compose down

# 10. 查看容器内运行的进程
docker-compose top 或 docker-compose top nginx

# 11. 查看容器日志
docker-compose logs -f nginx
4.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
# 查看单个容器 IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器ID

# 查看所有容器 IP
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

# 查看通过 docker-compose 创建的容器 IP
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

#---------------------------------------------------------------------------

# 配置快捷键

vim ~/.bash_profile # Mac 电脑
# 或
vim ~/.bashrc # centos

# 添加以下内容
# docker
function docker_ip() {
  sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $1
}
function docker_ip_list() {
  sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
}

# 刷新生效
source ~/.bash_profile # Mac 电脑
# 或
source ~/.bashrc # centos

# 使用,宿主机终端输入
docker_ip_list

docker_ip 容器ID
5.2 查看 docker 网络模式
docker network ls
点击查看 Docker 网络详解 六. 搭建运行 PHP 所需要的环境

大神已经分享开源了,我们直接使用。为大神鼓掌👏。一共有两套,都贴出来,大家有时间都可以练习试试

GitHub - dnmp - 源码地址 - Gary Meng (作者)

Gitee - dnmp - 源码地址 - Gary Meng (作者)

GitHub - dnmp - 源码地址 - Tinywan (作者)

Gitee - dnmp - 源码地址 - Tinywan (作者)

docker:用官方镜像在本地搭建PHP开发环境

学习链接

Docker 官方文档

菜鸟教程 - Docker compose

B站教学视频 - Docker最新超详细版教程通俗易懂 (本文学习视频)

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3769s