Leong's blog Leong's blog
首页
  • 编程
  • 资源
  • Golang
  • 微服务
  • vue
  • 操作系统
  • 数据结构与算法
  • Linux
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Leong Y

跑起来吧
首页
  • 编程
  • 资源
  • Golang
  • 微服务
  • vue
  • 操作系统
  • 数据结构与算法
  • Linux
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • docker简明教程
    • 1、Docker 概念
    • 2、Docker安装
    • 3、Docker命令
      • 3.1、容器环境
      • 3.2、容器生命周期
      • 3.3、容器运维
      • 3.4、容器rootfs
      • 3.5、镜像仓库
      • 3.6、本地镜像管理
    • 4、Dockerfile
      • 4.1、基础镜像
      • 4.2、环境变量
      • 4.3、拷贝文件
      • 4.4、工作目录
      • 4.5、端口
      • 4.6、指令
    • 5、Docker-Compose
      • 5.1、Quickstart
    • 6、Docker快速部署环境案例
      • 6.1、MySQL
  • go-micro简明教程
  • grpc简明案例
  • Protocol Buffers学习
  • K8S
  • 容器部署
  • 微服务
leong
2024-07-03
目录

docker简明教程

# 1、Docker 概念

Docker 是一个用于打包、部署和管理在容器中运行的应用程序的平台。容器是一种将资源(如内存、CPU、存储)与底层操作系统隔离开来的方法。每个容器都有自己的隔离环境,可以在其中执行代码,而不会干扰主机上的其他进程

  • Dockerfile:是定义如何创建 Docker 镜像的文本文件。它们使用 FROM、RUN、COPY 等命令逐步构建镜像。
  • Docker registry:是一个用于存储和分发 Docker 镜像的存储库。
  • Docker 容器:是 Docker 镜像在主机上运行的实例。它执行由镜像定义的应用程序,对来自系统其他部分的访问提供隔离。
  • Docker Compose: 是一个用于定义和运行多容器应用程序的工具。它使用 YAML 文件来配置服务(容器)及其依赖项。
  • Docker 卷:是一种用于在容器之间或与主机之间共享数据的存储机制。卷允许你即使在容器被销毁后仍保留数据,从而可以跨多个容器轻松共享数据。
  • Docker 群集模式:允许你将多个 Docker 主机管理成一个集群。你可以在群集中的节点上部署服务,然后让 Docker 管理资源分配和容器位置。
  • Docker 网络:是用于将容器彼此连接或连接到主机的一个隔离网络。它提供了在容器之间进行安全通信,而无需在主机上公开端口。
  • Docker Machine: 允许你配置和管理 Docker 主机,无论它们是物理机、虚拟机(例如,在云中)还是在其他 Docker 容器内运行的容器。
  • Docker Hub: 是一个在线存储库,允许将 Docker 镜像与他人共享。它是最大的公共注册表之一,但你也可以使用私有注册表来存储和分发你自己的镜像。
  • Docker Desktop: 是一个应用程序,允许你在 Windows 或 macOS 上运行 Docker,它提供对 Docker CLI(命令行界面)和 GUI 工具的访问,以便管理镜像和容器。

# 2、Docker安装

  • Windows: 要在 Windows 上安装 Docker,请按照官方安装指南 (opens new window)进行操作。
  • Mac: 对于 macOS,请参阅安装指南 (opens new window)。
  • Linux: 对于 Linux,请查看针对具体发行版的说明 (opens new window)。

# 3、Docker命令

# 3.1、容器环境

# 1. 检查版本信息
docker version 
# 2. 检查更详细的docker环境信息
docker info
1
2
3
4

# 3.2、容器生命周期

# 创建容器
docker create --name my_nginx nginx:latest
# 启动容器
docker start my_nginx
# 创建+启动
docker run --name my_nginx nginx:latest
# 停止容器
docker stop my_nginx  # 优雅退出
docker kill my_nginx  # 暴力退出
1
2
3
4
5
6
7
8
9

# 3.3、容器运维

# 查看容器运行状态
docker ps -a
# 查看容器详细信息
docker inspect my_nginx
# 进入容器内部操作
docker exec -it my_nginx bash
# 查看容器内部进程
docker top my_nginx
# 查看容器CPU以及内存占用情况
docker stats my_nginx
# 修改容器名
docker rename my_nginx new_nginx
# 查看容器日志
docker logs -f my_nginx
# 查看镜像历史操作
docker history my_nginx:v1.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 3.4、容器rootfs

# 拷贝宿主机文件到容器
docker cp text.txt my_nginx:/
# 查看容器做了那些修改
docker diff my_nginx
# 将容器打包成镜像
docker commit -m "test commit my nginx" my_nginx my_nginx:v1.0
# 删除镜像
docker rmi my_nginx:v1.0
# 删除所有none镜像
docker image prune
1
2
3
4
5
6
7
8
9
10

# 3.5、镜像仓库

# 登录Docker Hub:
docker login
# 检索镜像
docker search nginx
# 给镜像打tag
docker tag my_nginx:v1.0 test/nginx-test:v1.1
# 推送镜像
docker push test/nginx-test:v1.1
# 拉取镜像
docker pull nginx
1
2
3
4
5
6
7
8
9
10

# 3.6、本地镜像管理

# 保存镜像为tar包
docker save my_nginx:v1.0 -o test.tar

# 构建镜像(假设Dockerfile在执行命令的目录)
docker build -t my_docker:v1.0
1
2
3
4
5

# 4、Dockerfile

# 4.1、基础镜像

# 从基础镜像构建
FROM nginx:latest
# 给镜像打标签
LABEL author="leong"
1
2
3
4

# 4.2、环境变量

# 构建环境变量
ARG port=80
# 运行时环境变量
ENV port=80
1
2
3
4

# 4.3、拷贝文件

# 拷贝
COPY test.txt /
# 拷贝并解压
ADD test.tar /
1
2
3
4

# 4.4、工作目录

# 指定容器内某个目录为工作目录(run命令执行时所在的目录)
WORKDIR /work
1
2

# 4.5、端口

# 端口暴露
EXPOSE 90
1
2

# 4.6、指令

# 在构建的时候执行的命令
RUN ls

# 容器启动时执行的命令
CMD [ "bash","-c","echo helloworld" ]
ENTRYPOINT [ "bash","-c","echo helloworld" ]
1
2
3
4
5
6

PS:

  • CMD:
    • 后面的CMD会覆盖前面的CMD
    • docker exec -it xxx bash [command]也会覆盖掉Dockerfile里面的CMD
  • ENTRYPOINT:
    • ENTRYPOINT的命令不会被覆盖

# 5、Docker-Compose

# 5.1、Quickstart

version: '3'
services:
  nginx1:
    image: nginx:1.14
    container_name: nginx1
    ports:
      - 8081:80
  nginx2:
    # nginx1启动后才开始构建nginx2
    depends_on:
      - nginx1
    # 根据Dockerfile构建
    build: 
      context: .
    container_name: nginx2
    ports:
      - 8082:80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 6、Docker快速部署环境案例

# 6.1、MySQL

Docker部署MySQL

上次更新: 2024/07/08, 18:19:51
go-micro简明教程

go-micro简明教程→

最近更新
01
vue3快速上手
07-31
02
程序从加载到运行的过程
07-08
03
进程、线程、协程
07-08
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Leong Y | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式