深色模式
Docker 学习笔记
Docker 官网 —— https://www.docker.com/
Docker 入门 —— https://docs.microsoft.com/zh-cn/windows/dev-environment/docker/overview
什么是 Docker?
Docker 是一种工具,用于创建、部署和运行应用程序(通过使用容器)。 容器使开发人员可以将应用与需要的所有部件(库、框架、依赖项等)打包为一个包一起交付。 使用容器可确保此应用的运行与之前相同,而不受任何自定义设置或运行该应用的计算机上先前安装的库的影响(运行应用的计算机可能与用于编写和测试应用代码的计算机不同)。 这使开发人员可以专注于编写代码,而无需操心将运行代码的系统。
了解更多,请查看 Docker 容器简介
Docker Desktop
Docker Desktop for Windows 为生成、交付和运行 Docker 化的应用提供了一个开发环境。 通过启用基于 WSL 2 的引擎,可以在同一计算机上的 Docker Desktop 中运行 Linux 和 Windows 容器。
安装适用于 WSL 的 Docker Desktop
安装适用于 Windows 的 Docker Desktop
官网 Docker Desktop for Windows 下载安装教程
官网 Docker 入门 Docker 指导和设置文档,其中包含有关如何入门的分步说明(包括视频演练)
什么是容器映像?
容器映像是一种包含软件的可移植程序包。 它在运行时便成为了我们的容器。 容器是映像的内存中实例。
容器映像是不可变的。 生成映像后,无法更改该映像。 更改映像的唯一方法是创建新映像。 此特性可保证在生产环境中使用的映像与在开发环境和 QA 环境中使用的相同。
Dockerfile
Dockerfile 是一种文本文件,其中包含用于生成和运行 Docker 映像的说明。
- 用于创建新映像的基础映像或父级映像
- 用于更新基础操作系统和安装其他软件的命令
- 要包含的生成项目,例如开发的应用程序
- 要公开的服务,例如存储和网络配置
- 要在启动容器时运行的命令
示例 Dockerfile
Bash
FROM nginx
RUN echo '这是一个 nginx 镜像' > /usr/share/nginx/html/index.html
1
2
2
映像命令
sh
# 使用 Dockerfile 定义来生成映像,-t 命名映像 . 表示当前目录是构建上下文
docker build -t temp-nginx .
docker images # 列出映像
docker rmi [images ID] # !!!删除此 ID 的镜像
1
2
3
4
2
3
4
容器命令
sh
docker run -d -p 8080:80 --name temp-nginx-test temp-nginx
# -d 指定容器以守护进程方式在后台运行
# -p 指定主机与容器内部的端口号映射关系
# –name 指定容器名称
docker ps -a # 列出可用容器,-a 查看所有状态
docker stats # 容器服务监视
docker pause [container ID] # 暂停容器
docker restart [container ID] # 重启容器
docker stop [container ID] # 停止此 ID 的容器
docker start [container ID] # 启动此 ID 的容器
docker rm [container ID] # !!!删除此 ID 的容器
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
容器存储配置
删除容器后,将销毁容器中的所有数据。 考虑存储数据时,始终将容器视为临时容器非常重要。 容器可以使用两种选项来保持数据。
第一种选项是使用卷,第二种选项则是绑定装载。
卷存储在主机文件系统上的特定文件夹位置。 选择一个文件夹,确保其中的数据只能由 Docker 进程修改。 绑定装载在概念上与卷相同,但是,你可以在主机上装载任何文件或文件夹,而不是使用特定文件夹。 卷是公认的用于容器的首选数据存储策略。
sh
docker inspect docker_vol_name # 查看容器卷
1
使用 Docker 安装 Nginx
拉取镜像到本地
bash
docker search nginx # 获取 nginx 镜像列表
docker pull nginx # 拉取 nginx 镜像到本地
1
2
2
启动容器
bash
docker run -d -p 8080:80 --name nginx-test nginx
1
创建主机工作目录
bash
mkdir -p ./v-nginx/{conf.d,log,html}
1
将容器中的相应文件复制到主机工作目录
bash
docker cp nginx-test:/etc/nginx/nginx.conf ./v-nginx
docker cp nginx-test:/etc/nginx/conf.d/. ./v-nginx/conf.d
docker cp nginx-test:/var/log/nginx/. ./v-nginx/log
docker cp nginx-test:/usr/share/nginx/html/. ./v-nginx/html
1
2
3
4
2
3
4
停止并删除容器
bash
docker stop nginx-test # 停止容器
docker rm nginx-test # !!!删除容器
1
2
2
再次启动容器并挂载主机工作目录
bash
docker run -d -p 80:80 --name nginx-test \
-v /home/www/v-nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/www/v-nginx/conf.d:/etc/nginx/conf.d \
-v /home/www/v-nginx/log:/var/log/nginx \
-v /home/www/v-nginx/html:/usr/share/nginx/html \
nginx
1
2
3
4
5
6
2
3
4
5
6
进入容器
bash
docker exec -it nginx-test /bin/bash
1
执行 exit
命令可退出容器
Docker Compose
Docker Compose 是一个用于定义和运行多个 Docker 容器的工具。它允许您通过 YAML 文件来配置应用程序的服务、网络和卷,并使用单个命令启动、停止和管理整个应用程序的容器。这使得在开发、测试和部署过程中,快速搭建和管理多个 Docker 容器变得更加容易。
示例 docker-compose.yml
yml
version: "3"
services:
vitepress:
restart: always
image: nginx:latest
volumes:
- ./docs/.vitepress/dist:/usr/share/nginx/html
networks:
- network
ports:
- "8080:80"
networks:
network:
driver: bridge
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
运行 docker-compose
Bash
docker-compose -v # 检查 docker-compose 版本
docker-compose up # 根据 docker-compose.yml 配置文件构建镜像及容器并启动相应服务
docker-compose down # !!!删除容器
docker-compose up -d # 在后台运行容器
docker-compose build # 重新构建镜像
docker-compose start # 启动已有容器
docker-compose stop # 停止已有容器
1
2
3
4
5
6
7
2
3
4
5
6
7