Docker的使用
Docker的使用
安装Docker
-
下载安装包进行安装
-
安装完毕启动Docker
-
Windows系统需要开启Hyper-V功能
- 在启用或者关闭Windows功能中启动Hyper-V功能
- Hyper-V 是微软提供的一种虚拟化技术,允许用户在一台物理计算机上创建和运行多个虚拟机(Virtual Machines, VMs)。每个虚拟机都可以运行独立的操作系统和应用程序,就像在独立的物理计算机上一样。
-
使用
docker version命令查看docker安装是否成功和docker服务是否启动 -
下载完安装包后自动安装在C盘中,更改安装路径
-
首先创建两个空的文件夹,分别存放Docker程序和Docker-Data(镜像等)
-
管理员身份打开cmd并进入到Docker安装包的路径中
-
进不去d盘使用
cd /d d:切换盘符 -
在安装包路径中执行:注意更改目录路径
-
start /w “” “Docker Desktop Installer.exe” install -accept-license --installation-dir=“D:\\JAVATool\\Docker\\Docker-install” --wsl-default-data-root=“D:\\JAVATool\\Docker\\Docker-data” --windows-containers-default-data-root=“D:\\JAVATool\\Docker-install”
-
-
-
安装完毕后家庭版需要开启Hyper功能,创建一个Hyper.cmd文件,文件内输入
-
pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL -
安装完毕后重启
-
-
在Docker的图形界面中配置镜像
-
在setting中的Docker Engine中添加镜像源
-
{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.imgdb.de", "https://docker-0.unsee.tech", "https://docker.hlmirror.com", "https://cjie.eu.org" ] }
-
-
使用
docker run hello-world测试是否安装完毕
访问Docker内容器
-
默认情况下,直接通过本机的 IP 地址加上配置的端口号是无法访问 Docker 容器内的 Redis 的,因为 Docker 容器的网络是隔离的。要让外部(包括本机)能够访问容器内的 Redis,需要明确地将容器的端口映射到宿主机的端口。
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ff2a5917e10b redis:latest "docker-entrypoint.s…" 16 seconds ago Up 15 seconds 0.0.0.0:6380->6379/tcp nifty_germain 17f18bbac025 redis:latest "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 6379/tcp crazy_germain 7fe575357d08 redis:latest "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 6379/tcp festive_austin 0d1195937b68 redis:latest "docker-entrypoint.s…" 14 hours ago Up 14 hours 6379/tcp charming_diffie- 在 Docker 中,每个容器都有自己的网络命名空间,因此容器内部的端口是独立的。即使多个容器使用相同的 容器端口(如 Redis 默认的
6379),它们也可以通过不同的 主机端口 映射到外部。 - 容器
nifty_germain- 容器端口:
6379/tcp(Redis 默认端口)。 - 主机端口:
0.0.0.0:6380->6379/tcp,表示主机的6380端口映射到容器的6379端口。 - 这意味着可以通过主机的
6380端口访问这个 Redis 容器。
- 容器端口:
- 其他容器
- 容器端口:
6379/tcp(Redis 默认端口)。 - 主机端口:未映射(仅显示
6379/tcp),表示这些容器的6379端口没有映射到主机的任何端口。 - 这些容器只能通过 Docker 网络内部访问,无法直接从主机访问。
- 容器端口:
- 在 Docker 中,每个容器都有自己的网络命名空间,因此容器内部的端口是独立的。即使多个容器使用相同的 容器端口(如 Redis 默认的
-
默认情况下的网络隔离
- Docker 容器运行在独立的网络命名空间中,容器内的服务(如 Redis)默认只能通过容器内部的 IP 地址和端口访问。
- 如果你没有显式地将容器的端口映射到宿主机,外部网络(包括本机)无法直接访问容器内的 Redis。
-
让外部访问容器内的 Redis
-
为了让外部(包括本机)能够访问容器内的 Redis,需要通过 端口映射 将容器内的 Redis 端口(默认是
6379)映射到宿主机的某个端口。 -
在启动 Redis 容器时,使用
-p参数将容器端口映射到宿主机端口。例如:-
docker run --name my-redis -d -p 6379:6379 redis-p 6379:6379:将宿主机的6379端口映射到容器的6379端口。- 这样,外部可以通过宿主机的 IP 地址和
6379端口访问 Redis。
-
-
-
绑定 Redis 到所有网络接口
-
默认情况下,Redis 只绑定到
127.0.0.1,这意味着它只能从本地访问。为了让 Redis 监听所有网络接口,需要修改 Redis 配置文件或启动时指定参数。-
在启动 Redis 容器时,添加
--bind 0.0.0.0参数: -
docker run --name my-redis -d -p 6379:6379 redis redis-server --bind 0.0.0.0 -
在命令中显式地写上
redis-server是为了覆盖默认的启动命令,并传递额外的参数(如--bind 0.0.0.0)。
-
-
-
防火墙和安全组
- 如果宿主机有防火墙或运行在云服务器上,确保放行 Redis 端口(如
6379)。 - 对于云服务器(如 AWS、阿里云等),还需要在安全组中配置允许访问 Redis 端口的规则。
- 如果宿主机有防火墙或运行在云服务器上,确保放行 Redis 端口(如
Docker中常用命令
-
从 Docker Hub 或其他镜像仓库拉取镜像。
-
docker pull <image_name>:<tag><image_name>: 镜像名称。<tag>: 镜像标签(版本),默认为latest。
-
-
列出本地所有的 Docker 镜像。
-
docker images
-
-
删除本地的一个或多个镜像。
-
docker rmi <image_name>:<tag>
-
-
创建并启动一个容器。
-
docker run [options] <image_name>:<tag> -
常用选项:
-d: 后台运行容器(detached 模式)。-p: 端口映射,格式为主机端口:容器端口。-v: 挂载卷,格式为主机目录:容器目录。--name: 为容器指定一个名称。
-
-
列出正在运行的容器。
-
docker ps # -a: 列出所有容器(包括已停止的)。 docker ps -a
-
-
进入容器
-
使用
docker exec进入容器 -
docker exec -it my-redis redis-clidocker exec:在运行的容器中执行命令。-it:以交互模式运行命令。my-redis:容器名称。redis-cli:Redis 命令行工具。
-
-
启动、停止或重启容器。
-
docker start/stop/restart -
docker start <container_id_or_name> docker stop <container_id_or_name> docker restart <container_id_or_name>
-
-
删除一个或多个容器。
-
docker rm -
docker rm <container_id_or_name>
-
Docker 镜像相关命令总结表格
| 命令 | 功能描述 | 示例 |
|---|---|---|
docker pull |
从仓库拉取镜像 | docker pull ubuntu:20.04 |
docker images |
列出本地所有镜像 | docker images |
docker rmi |
删除本地镜像 | docker rmi ubuntu:20.04 |
docker build |
根据 Dockerfile 构建镜像 | docker build -t myapp:1.0 . |
docker image inspect |
查看镜像的详细信息 | docker image inspect ubuntu:20.04 |
docker tag |
为镜像打标签 | docker tag ubuntu:20.04 myubuntu:1.0 |
docker save |
将镜像保存为 tar 文件 | docker save -o ubuntu_20.04.tar ubuntu:20.04 |
docker load |
从 tar 文件加载镜像 | docker load -i ubuntu_20.04.tar |
docker image prune |
删除未使用的镜像 | docker image prune -a |
Docker 容器相关命令总结表格
| 命令 | 功能描述 | 示例 |
|---|---|---|
docker run |
创建并启动容器 | docker run -d -p 8080:80 --name mycontainer nginx:latest |
docker ps |
列出容器 | docker ps -a |
docker start |
启动容器 | docker start mycontainer |
docker stop |
停止容器 | docker stop mycontainer |
docker restart |
重启容器 | docker restart mycontainer |
docker rm |
删除容器 | docker rm mycontainer |
docker exec |
在容器中执行命令 | docker exec -it mycontainer /bin/bash |
docker logs |
查看容器日志 | docker logs -f mycontainer |
docker inspect |
查看容器详细信息 | docker inspect mycontainer |
docker cp |
在容器和主机之间复制文件 | docker cp mycontainer:/app/logs ./logs |
docker stats |
查看容器资源使用情况 | docker stats mycontainer |
docker attach |
连接到正在运行的容器 | docker attach mycontainer |
docker commit |
将容器保存为新的镜像 | docker commit mycontainer myapp:1.1 |

浙公网安备 33010602011771号