docker教程
Last Update:
Word Count:
Read Time:
本教程是在 Windows 11 的 WSL2 上安装和配置 Docker ,如果不知道如何配置可以参照以下教程:WSL的安装与使用|Zenith 。
安装 Docker Desktop for Windows
1、下载 Docker Desktop:
- 访问 Docker 官网 下载 Windows 版安装包。
2、安装 Docker Desktop:
- 双击安装包,按向导完成安装。
安装时勾选 “Use WSL 2 instead of Hyper-V”。- 新版 Docker Desktop 会自动化判断你的系统是否启用 WSL 2 并进行对应的安装
- 安装完成会自动重启电脑,注意文件保存
3、启动 Docker Desktop:
- 安装完成后启动 Docker Desktop。可以先不登录
在设置(Settings) > General 中确认勾选:(新版 Docker Desktop 默认强制勾选可以不做配置)Use the WSL 2 based engine
4、检查确认 Docker 是否使用了 WSL 2
在 PowerShell 中运行:
1
wsl -l -v
如果看到
docker-desktop
,且版本为 2,则证明 Docker 正在使用 WSL 2。打开 WSL 2 终端(Ubuntu),运行:
1
docker --version
如果看到输出版本信息,说明 Docker 已成功运行在 WSL 2 中。
直接在 ubuntu 中安装 Docker
1、更新系统包索引:
1 |
|
2、安装必要的包以允许apt通过HTTPS使用仓库:
1 |
|
3、添加 Docker 的官方 GPG 密钥:
1 |
|
4、添加 Docker 的稳定仓库:
1 |
|
5、再次更新系统包索引:
1 |
|
6、安装Docker CE(社区版):
1 |
|
7、验证Docker是否安装成功:
1 |
|
下载镜像
在 Docker Desktop 中下载镜像
Docker Hub 是一个公共的 Docker 镜像仓库,其中包含了大量的镜像,用户可以从中拉取镜像到本地使用
例如,要拉取一个名为
Nginx
的镜像,可以进行如下操作:
- 启动 Docker Desktop 进入 Images
- 搜索
Nginx
pull
第一个镜像文件- 启动
Nginx
镜像
- 配置名字(例如:nginxweb)
- 配置端口映射(例如:80)
- 选择将容器中的文件存储在主机中的位置(可选)(例如:D:\nginxweb-storage)
- 选择挂载到容器中的位置,实现容器与主机的文件共享(可选)(例如:/nginxweb)
- 运行
在 ubuntu 中下载镜像
也可以在ubuntu中使用命令行完成:
例如,要拉取一个名为
opengauss
的镜像,可以进行如下操作:使用以下命令拉取镜像
1docker pull opengauss/opengauss
可以通过 docker images
命令查看当前已下载的镜像
设置 Docker 镜像源
在旧版本下设置 Docker 镜像源
由于某些不可描述的问题,Docker 官方镜像经常会拉不下来,常用方式是通过设置镜像源的方式解决(但是大部分源都已经挂了),其他方式可以自行 bing 搜索
在旧版本下 Docker Desktop 会自动创建两个 WSL2 发行版:
docker-desktop
:运行 Docker Engine(守护进程)。docker-desktop-data
:存储镜像和容器数据。
进入 docker-desktop
发行版:
1 |
|
首先修改 /etc/docker/daemon.json
文件为如下格式
1 |
|
上述镜像源只是一个示例,可以自行寻找或搭建其他源
然后重启 Docker:service docker restart
可以通过 docker info
命令查看配置是否生效
在新版本下设置 Docker 镜像源
在新版本 Docker Desktop 中进行了存储优化,Docker 团队合并了 docker-desktop
和 docker-desktop-data
的功能:**仅保留 docker-desktop
**,数据和引擎合并到一个 WSL 2 发行版。
在新版本中要通过 Docker Desktop 的 GUI 或 API 动态管理配置。
进入 Settings > Docker Engine。
直接编辑 JSON 配置:
1 |
|
点击 Apply & Restart,Docker 会自动重启并应用新配置
在终端运行以下命令,检查镜像源是否已加载:
1 |
|
输出应包含你添加的镜像地址:
1 |
|
上述镜像源只是一个示例,可以自行寻找或搭建其他源
使用容器
1、启动容器
拉取镜像成功后就可以启动容器了
或者也可以不拉取镜像直接启动容器,docker会自动下载对应的镜像文件
1 |
|
--privileged
:赋予容器内的进程几乎相同的权限,容器内的进程可以访问宿主机的所有设备--name opengauss_container
:给容器指定一个名称,这里是opengauss_container
-d
:表示在后台运行容器-e
:传递参数GS_PASSWORD=your_password -e GS_USERNAME=your_username
:自定义数据库账号密码-p 5432:5432
:将容器的 5432 端口映射到本机的 5432 端口
如果你仅仅是想创建一个容器,暂时并不想启动他,可以使用 docker create
命令
与 docker run
命令几乎一致,只是少了 -p
参数。使用 docker create
创建的容器,在用 docker start
启动时,默认总是以后台(detached)方式运行,不管有没有加 -d
参数
2、查看容器状态
docker ps -a
命令可以查看所有容器的状态
docker start <容器名>/<容器id>
和 docker stop <容器名>/<容器id>
可以启动 / 停止已有容器
- 使用
docker start
启动的容器是不需要添加参数的,会保留使用docker run
创建时使用的参数
docker inspect <容器名>/<容器id>
可以查看容器的所有信息,其中就包括了创建时使用的参数
docker logs <容器名>/<容器id>
可以查看容器日志
- 但是这种方式只能查看现有日志,不能刷新,可以在后面加
-f
参数使其滚动刷新追踪输出:docker logs <容器名>/<容器id> -f
3、使用容器
上面以 opengauss 数据库为例,所以接下来我们可以使用
gsql
或数据库管理工具来连接数据库。如果是其他项目,通过端口使用即可
每个 Docker 容器都是一个独立的运行环境,每个容器内部表现的都像一个独立的 Linux 系统,可以使用 docker exec <容器名>/<容器id> <想要执行的命令>
在容器内部执行命令
但是这样会非常的麻烦,可以通过 docker exec -it <容器名>/<容器id> /bin/sh
命令进入容器内部,获得一个交互式的命令行,之后可以用 exec
命令或者使用 Ctrl + D
快捷键退出到宿主机
额外介绍:Dockerfile
Dockerfile 是一个文件,用于描述镜像是如何制作的,之前用 docker pull
命令拉取的镜像就是用 Dockerfile 制作的
可以看菜鸟教程 Docker Dockerfile-菜鸟教程
额外介绍:Docker 网络
Docker 容器不光环境和宿主机隔离,网络也和宿主机隔离
Docker 主要有四种网络模式:Bridge、Host、Container、None。其中桥接模式(Bridge)和直连模式(Host)是最常用的,其余两种可以自行 bing 搜索
桥接模式
桥接模式是 Docker 的默认网路模式。所有容器都在一个子网内,通过网桥与宿主机连接,每个容器都分配了一个内部 ip 地址,容器网络与宿主机网络隔离,通过端口映射访问
可以通过 docker network create <子网名>
创建新的子网,默认创建的子网也是桥接模式,可以将指定容器加入指定的子网,子网间也是相互隔离的。并且 Docker 子网内部有 DNS 机制,可以将容器名转换为子网 ip 地址
直连模式
直接使用宿主机的 ip 地址,通过宿主机端口可以直接访问容器,无需建立端口映射。可以通过这个命令启动一个直连模式的容器:
1 |
|
使用 docker network list
可以展示出 Docker 所有的网络
使用 docker network rm <网络id>
可以删除一个子网
额外介绍:Docker Compose
如果我们要用 Docker 部署一个完整的包含前端、后端、中间件、数据库的项目,一种容易想到的方式是分别拉取不同镜像,分别创建容器,但是这样会有三个问题
- 比较繁琐 复杂
- 项目中可能存在容器互相依赖的情况
- 容器的网络可能会有特殊要求
可能这时候会想到,我把所有的项目都打包到一起,跑在一个巨大的容器里。这样也会有三个问题
- 镜像太大
- 如果有一个模块挂壁了,整个项目都直接挂壁了
- 不方便扩容
这时候就需要 Docker Compose 出场了
Docker Compose 是一个容器编排技术,使用 yaml 文件管理多个容器,里面描述了容器之间是如何创建以及如何协同工作的,比如在启动后端项目前,需要先启动一个 MySQL 容器:
1 |
|
这个 depends_on
字段就可以规定容器的启动顺序
在写好了 docker-compose.yaml
文件后,就可以用 docker compose up -d
一键启动了,与 docker compose
相关的还有其他命令
docker compose stop
: 停止所有容器docker compose down
: 停止并删除所有容器docker compose start
: 启动所有容器
注意 docker compose up -d
只能识别名为 docker-compose.yaml
的文件,改个名字就无法识别了。如果要识别其他名字的 yaml
文件可以使用 -f
参数:
1 |
|
Docker Compose 只适合简单项目启动,不适合大型项目启动。对于企业级大规模服务器集群的容器编排需求,通常会使用 Kubernetes
🌧️
上述内容参考自:
Docker 常见命令与操作 | 你不定积分没加CのBlog