Docker 是基于 Linux 的容器化技术。
win+s 搜索 windows功能, 勾选下面两个选项,根据提示重启电脑。

以管理员身份运行cmd 并执行以下命令
1wsl --set-default-version 22wsl --update --web-download
根据自己电脑CPU型号下载对应的安装包。

下载完成后双击安装即可,默认安装在C盘。如果你想指定安装到其他位置,需要以指令的形式安装, --installation-dir=安装的路径
xxxxxxxxxx11start /w "" "Docker Desktop Installer.exe" install --installation-dir=D:\Develop\Docker
官方地址: https://get.docker.com/ 【需要科学上网】
本文以 Ubuntu-24.04.3-STL 为例
下载脚本
xxxxxxxxxx11curl -fsSL https://get.docker.com -o install-docker.sh安装 docker
xxxxxxxxxx11sudo sh install-docker.sh启动 docker
xxxxxxxxxx11sudo systemctl start docker请参考其他博客。
Docker官方镜像仓库: https://hub.docker.com
编辑 daemon.json 文件
xxxxxxxxxx11sudo vim /etc/docker/daemon.json修改以下内容, 添加国内镜像源
xxxxxxxxxx101{2 "registry-mirrors": [3 "https://docker.m.daocloud.io",4 "https://mirror.ccs.tencentyun.com",5 "https://docker.1panel.live",6 "https://hub.rat.dev",7 "https://docker.mirrors.ustc.edu.cn/", 8 "https://hub-mirror.c.163.com/"9 ]10}重启docker
xxxxxxxxxx41# 重新加载配置2sudo systemctl daemon-reload3# 重启 docker4sudo systemctl restart docker
sudo docker pull 镜像名[:镜像版本] (不指定版本号,默认拉取最新版本)
x1# 获取最新的 nginx 镜像2sudo docker pull nginx3
4# 从官方仓库的官方命名空间里下载最新版本的nginx docker镜像5sudo docker pull docker.io/library/nginx:latest6# 拉取特定 cpu 架构下的nginx镜像7sudo docker pull --plaform=xxx nginxdicker.io: 表示registry仓库地址
library : 命名空间,即每个作者的名字
nginx:latest: 表示 镜像名:镜像版本号,latest 表示最新版本
xxxxxxxxxx11sudo docker images
sudo docker rmi 镜像ID/镜像名
xxxxxxxxxx11sudo docker rmi nginx
sudo docker create 镜像名, 创建一个容器,不运行。
sudo docker run 镜像名
xxxxxxxxxx11sudo docker run -d --name test_nginx -p 80:80 -v /blog/html:/usr/share/nginx/html nginx -d:detached mode 分离模式,表示让容器在后台运行,不会阻塞当前的窗口
--name: 给容器起一个名字 test_nginx
-p:端口映射,宿主机端口:容器内端口。 将主机的80端口映射到容器的80端口
-v:volume 挂载卷, 宿主机目录:容器内目录。将宿主机目录/blog/html与容器内目录/usr/share/nginx/html相互关联。
此挂载方式属于绑定挂载,使用绑定挂载时,宿主机目录会暂时覆盖容器内目录。
相互关联的目录相当于一个全局资源,任意一方对其修改都会使之改变。比如在容器内部新增一个test.txt 文件,在宿主机上就能看到新增的文件。当删除容器时,容器内部所有文件(包括关联的这个目录)都会被删除,但是宿主机上的这个关联的目录会被保存下来。
用于持久化数据,避免容器删除后数据丢失。
绑定挂载
-v 宿主机目录:容器内目录
注意:宿主机目录必须以/或者./ 开头,否则会被识别为命名卷挂载。
xxxxxxxxxx11sudo docker run -d -p 80:80 -v /blog/html:/usr/share/nginx/html nginx 命名卷挂载
创建一个名为 nginx_html 的存储空间(命名卷)
xxxxxxxxxx11sudo docker volume create nginx_html-v 卷的名字:容器内目录
xxxxxxxxxx11sudo docker run -d -p 80:80 -v nginx_html:/usr/share/nginx/html nginx 命名卷在宿主机的真实位置, sudo docker volume inspect + 命名卷名字
xxxxxxxxxx11sudo docker volume inspect nginx_html命名卷在第一次使用的时候,docker会把容器的文件夹内容同步到命名卷文件夹里面,进行一个初始化,而绑定挂载却没有这个功能。
查看所有的命名卷
xxxxxxxxxx11sudo docker volume list删除指定命名卷
xxxxxxxxxx11sudo docker volume rm nginx_html删除所有没有任何容器在使用的卷
xxxxxxxxxx11sudo docker volume prune -a如:在云服务器上启动一个mongo 数据库,并设置数据库的用户名和密码两个参数
xxxxxxxxxx61sudo docker run -d \2 --name my_mongo \3 -p 27017:27017 \4 -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \5 -e MONGO_INITDB_ROOT_PASSWORD=secret \6 mongo在windows 上访问
xxxxxxxxxx11mongosh "mongodb://用户名:密码@服务器IP地址:27017"
ps: process status, 进程状态,只能查看到正在运行的容器
-a: 表示all, 查看所有的容器状态
xxxxxxxxxx11sudo docker ps -a
sudo docker start 容器ID/容器名
sudo docker stop 容器ID/容器名
xxxxxxxxxx21sudo docker start test_nginx2sudo docker stop test_nginx查看容器创建时的参数
inspect: 检查,审阅的意思
xxxxxxxxxx11sudo docker inspect 容器ID/容器名
sudo docker rm 容器ID/容器名
xxxxxxxxxx21# 删除名为 test_nginx 的容器 2sudo docker rm -f test_nginxrm:remove 删除,无法删除正在运行的容器。
-f :force 强制删除,可以在容器正常运行的状态下,删除容器。
alpine : 轻量级的linux 系统
xxxxxxxxxx11sudo docker run -it --rm alpine-it: 让控制台进入容器内部进行交互
--rm : 当容器停止(退出)的时候,自动删除。
退出的指令: exit
--restart always: 只要容器停止了,就立即重启。包含容器因为内部错误崩溃或宿主机断电等场景。
--restart unless-stopped: 跟always 类似,但是手动停止的容器,不会自动重启。
xxxxxxxxxx21sudo docker run -d --restart always nginx 2sudo docker run -d --restart unless-stopped nginx sudo docker logs 容器ID/容器名 -f
-f : follow, 追踪输出。
xxxxxxxxxx11sudo docker logs test_nginx -f
sudo docker exec xxxxx(容器ID) linux指令
xxxxxxxxxx21# 进入容器内部查看有哪些进程2sudo docker exec 容器ID ps -ef进入容器内部,获得一个交互式的命令行环境
sudo docker exec -it 容器ID/容器名 /bin/bash
xxxxxxxxxx201# 语法:2sudo docker exec -it 容器ID/容器名 /bin/bash3
4# 创建一个 nginx 容器5sudo docker run -d --name test -p 8080:80 nginx6# 进入 test 容器内部7sudo docker exec -it test /bin/bash8# docker 内部 nginx 容器的默认网页存放目录9cd /usr/share/nginx/html10
11# 容器内部是一个极简的操作系统,很多命令会缺失,有些命令要自己下载12# 首先查看容器内的linux发行版本13cat /etc/os-release14# 此时发现是debian的,包管理是apt,如果是centos, 则使用yum15# 更新索引16apt update17apt install vim18# 修改文件等操作 ...19# ... ...20# 输入:exit 退出容器
详细记录了镜像是如何制作的
创建一个子网 network1
xxxxxxxxxx11sudo docker network create network1创建一个容器,且宿主机无法访问。并将这个容器添加到 network1, --network network1
xxxxxxxxxx71sudo docker run -d \2 --name my_mongodb \3 --hostname mongo \4 -e MONGO_INITDB_ROOT_USERNAME=admin \5 -e MONGO_INITDB_ROOT_PASSWORD=123456 \6 --network network1 \7 mongomongodb 的网页客户端
xxxxxxxxxx81sudo docker run -d \2 --name my_mongo_express \3 -p 9000:8081 \4 -e ME_CONFIG_MONGODB_SERVER=my_mongodb \5 -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \6 -e ME_CONFIG_MONGODB_ADMINPASSWORD=123456 \7 --network network1 \8 mongo-express在浏览器输入: 服务器IP地址:9000 即可访问, 网页登录的账号密码是,admin:pass
PS. 如果你配置好之后无法访问,请查看防火墙是否打开,云安全组是否打开,端口号映射是否正确。我第一次使用的是Centos 9, 不知道为什么一直打不开,切换到Ubuntu-24.04-STL 版本后,测试可正常使用。
docker 容器共享宿主机的网络,容器直接使用宿主机的IP地址,无需端口映射。即容器内的服务直接运行在宿主机的端口上。
xxxxxxxxxx11sudo docker run -d --network host nginx查看所有网络,包括创建的子网
xxxxxxxxxx11sudo docker network list删除创建的子网,无法删除默认的三种网络模式:bridge, host, none
xxxxxxxxxx11sudo docker network rm 网络ID/网络名
轻量级容器编排技术
xxxxxxxxxx421version: '3.8' # Compose 文件版本,建议使用 3.8 以兼容最新 Docker 特性2
3# 定义网络(对应 --network network1)4networks:5 network1:6 driver: bridge # 默认桥接网络,与 Docker 命令的网络类型一致7
8# 定义服务9services:10 # MongoDB 服务(对应 my_mongodb 容器)11 my_mongodb:12 image: mongo # 使用的镜像13 container_name: my_mongodb # 容器名称14 hostname: mongo # 容器主机名15 restart: unless-stopped # 可选:容器退出时除非手动停止,否则自动重启16 environment:17 # 初始化 root 用户和密码(与 Docker 命令的环境变量一致)18 MONGO_INITDB_ROOT_USERNAME: admin19 MONGO_INITDB_ROOT_PASSWORD: 12345620 networks:21 - network1 # 加入 network1 网络22 23 # Mongo-Express 服务(对应 my_mongo_express 容器)24 my_mongo_express:25 image: mongo-express # 使用的镜像26 container_name: my_mongo_express # 容器名称27 restart: unless-stopped # 可选:自动重启28 ports:29 - "9000:8081" # 端口映射(主机:容器)30 environment:31 # 配置 MongoDB 连接信息32 ME_CONFIG_MONGODB_SERVER: my_mongodb # 连接的 MongoDB 服务名(容器名)33 ME_CONFIG_MONGODB_ADMINUSERNAME: admin # MongoDB 管理员用户名34 ME_CONFIG_MONGODB_ADMINPASSWORD: 123456 # MongoDB 管理员密码35 # 可选:关闭基本认证(默认 Mongo-Express 会有 admin/user 认证,如需关闭可添加)36 # ME_CONFIG_BASICAUTH_USERNAME: ""37 # ME_CONFIG_BASICAUTH_PASSWORD: ""38 networks:39 - network1 # 加入 network1 网络40 depends_on:41 - my_mongodb # 依赖 MongoDB 服务,确保先启动 MongoDB42
运行并创建文件中定义的容器,同一个文件中的容器,默认属于同一个子网。如果已经执行过下面指令,再次执行不会产生效果。
xxxxxxxxxx11sudo docker compose up -d停止并删除容器
xxxxxxxxxx11sudo docker compose down仅停止容器
xxxxxxxxxx11sudo docker compose stop启动容器
xxxxxxxxxx11sudo docker compose startdocker 会严格寻找本目录下的,compose.yaml 文件,如果没有则报错。可以使用-f (--file)参数指定compose文件。
xxxxxxxxxx11sudo docker compose -f /file/compose.yaml
问题描述?
电脑已经连接上网络,QQ和微信也可以正常发送消息,但是浏览器显示网络无连接。
原因?
如果你是第一次使用 WSL,在科学上网的前提下,你的电脑会把自动代理设置打开。表现为:当你不开科学上网工具时,浏览器无法正常访问互联网。
解决办法?
打开设置 --> 网络和Internet --> 代理 --> 手动设置代理(使用代理服务器)-->关闭并保存。



END