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
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
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
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
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
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
2
3
4
5
# 4、Dockerfile
# 4.1、基础镜像
# 从基础镜像构建
FROM nginx:latest
# 给镜像打标签
LABEL author="leong"
1
2
3
4
2
3
4
# 4.2、环境变量
# 构建环境变量
ARG port=80
# 运行时环境变量
ENV port=80
1
2
3
4
2
3
4
# 4.3、拷贝文件
# 拷贝
COPY test.txt /
# 拷贝并解压
ADD test.tar /
1
2
3
4
2
3
4
# 4.4、工作目录
# 指定容器内某个目录为工作目录(run命令执行时所在的目录)
WORKDIR /work
1
2
2
# 4.5、端口
# 端口暴露
EXPOSE 90
1
2
2
# 4.6、指令
# 在构建的时候执行的命令
RUN ls
# 容器启动时执行的命令
CMD [ "bash","-c","echo helloworld" ]
ENTRYPOINT [ "bash","-c","echo helloworld" ]
1
2
3
4
5
6
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 6、Docker快速部署环境案例
# 6.1、MySQL
上次更新: 2024/07/08, 18:19:51