Docker for win10 桌面版的安装及配置(偏向脱坑)

11,439 阅读3分钟

安装

按照它的指引教程,无脑下一步即可

下载地址:

docs.docker.com/desktop/win…

安装完成后,它会有新手引导,按照上面的命令运行即可,大概4步做完后,docker就已经安装完成。

此时可以通过查看版本号,查看docker的相关信息

docker -v

image-20211002124650593

后续就可以在power shell中使用docker的命令来操作docker

例如:image-20211002125351759

配置

换源

使用国内源替代掉docker的默认源

    "https://hub-mirror.c.163.com",
    "https://ustc-edu-cn.mirror.aliyuncs.com",
    "https://ghcr.io",
    "https://mirror.baidubce.com"

image-20211002125135969

测试

拉取Nginx镜像

docker pull nginx:latest

端口映射+新建并启动Nginx

docker run --name my-nginx -p 80:80 -d nginx

--name my-nginx 指定容器的名称

-p 80:80 映射端口

-d 守护进程运行

nginx 镜像版本,也可以指定版本,如:nginx:1.18.0

如果单纯想启动一个测试用的nginx就启动完了,测试效果如下

image-20211002130028097

停止+删除nginx

image-20211002130107383

stop代表停止,右边的垃圾桶图标则是删除

命令行删除:

image-20211002130230409

docker网络连接(真正的坑点)

出现连接容器的bug,大部分都是因为这个坑

Docker for win10的docker实际运行在新建的WSL2宿主机。那此时如何与Windows通信?

image-20211002130606915

此时存在3个IP:

  • docker容器的IP
  • Linux宿主机IP
  • 本地Windows IP

访问哪个IP才能访问到容器内部的应用?

使用常用的测试容器Nginx

测试结果:

image-20211002130856112

可以看到使用localhost,即可访问。这是WSL2的优化

同时,大量镜像甚至没有安装net-tools,无法直接查看IP。即默认,容器对外部隐藏IP

如果容器默认对外部隐藏IP,那连接容器的方式就完全通过 docker宿主机IP+端口转发(访问宿主机上指定的端口,然后宿主机端口帮忙跳转到容器端口)。

docker for windows桌面版是一种特殊的Windows安装docker的方式。其中docker宿主机IP被设定和本地 Windows IP一样。而WSL2直接安装的方式中,两者是不同IP,只不过在同一个WSL子网下。

实际ping容器的IP和端口号

image-20211002131123357

这里陷入过误区,一直在用容器端口+3306连接数据库,一直认为是docker for windows有坑。或者是Windows防火墙策略。

异端口转发测试(装docker,跑这个测试):

查看被禁用的端口

netsh interface ipv4 show excludedportrange protocol=tcp

image-20211002131323180

选择9999作为测试端口号进行测试:

image-20211002180230031

image-20211002131351510

image-20211002131405588

查看端口转发:

image-20211002131427672

docker中的MySQL安装+配置+连接

配置运行容器

查看禁止的端口:

netsh interface ipv4 show excludedportrange protocol=tcp

image-20211002180509289

选择6666做为本地端口号

启动MySQL容器,需要指定初始密码+端口映射

这里密码设置为了 root

docker run --name MYSQL -e MYSQL_ROOT_PASSWORD=root -p 6666:3306 -itd mysql:5.7 /bin/bash

连接到容器

image-20211002180904695

image-20211002180921594

登录容器内的MySQL

image-20211002180943998

配置MySQL-改字符集:

进入容器修改my.cnf文件

查找 my.cnf文件

mysql --help | grep my.cnf

image-20211002181307134

修改/etc/mysql/my.cnf文件

坑点:没有nano和vi

image-20211002181400955

没有vi和nano,如何改文件+换源?

使用手动echo添加源,再安装nano

  • 备份源

    cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
  • 删掉原本的sources.list

    rm -rf /etc/apt/sources.list
    
  • 手动echo添加源

    echo 源 > sources.list

    echo deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb http://mirrors.aliyun.com/debian-security buster/updates main deb-src http://mirrors.aliyun.com/debian-security buster/updates main deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib > sources.list
    
  • 更新

    apt update
    apt upgrade
    
  • 安装nano

    apt install nano
    

开始修改

nano /etc/mysql/my.cnf

添加进去的字符集参数

[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

进入mysql中查询字符集

show variables like '%character%';

image-20211002181959487

重启MySQL容器后再查询字符集

image-20211002182024730

配置MySQL -允许远程登录

选择mysql库

use mysql;

查看用户表

SELECT `Host`,`User` FROM user;

image-20211002182249295

如果不是%,则使用修改命令

UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;

本地Windows连接MySQL容器

IP使用localhost,端口号填新建容器时选择的本地转发端口

image-20211002182418573

连接成功

image-20211002182632947

参考

blog.lupf.cn/articles/20…

blog.csdn.net/weixin_4585…

zhuanlan.zhihu.com/p/365632905

www.cnblogs.com/sablier/p/1…

zhuanlan.zhihu.com/p/372062996

zhuanlan.zhihu.com/p/266534015

zhuanlan.zhihu.com/p/143857664