[Docker] Win10中安装Docker并运行Nginx镜像
附:docker容器命令
命令 | 用途 | 示例 | 教程 |
---|---|---|---|
docker pull | 获取镜像 (image) | docker pull nginx | - |
docker build | 使用 Dockerfile 创建镜像 (image) | docker build github.com/creack/docker-firefox | 查看 |
docker images | 列出本地镜像 (image) | docker images | 查看 |
docker cp | 用于容器与主机之间的数据拷贝 | docker cp /www/runoob 96f7f14e99ab:/www/ | 查看 |
docker commit | 从容器创建一个新的镜像 | docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1 | 查看 |
docker rmi | 删除本地一个或多个镜像 (image) | docker rmi -f runoob/ubuntu:v4 | 查看 |
docker run | 创建一个新的容器并运行一个命令 (container) | docker run --name mynginx -d nginx:latest | 查看 |
docker ps | 列出容器列表 | docker ps | 查看 |
docker stop | 关闭容器 | - | - |
docker start | 启动容器 | - | - |
docker restart | 重启容器 | - | - |
docker attach | exec | 进入容器内部 | - | - |
docker inspect | 获取容器/镜像的元数据 | - | - |
docker logs | 获取容器的日志 | - | 查看 |
docker top | 查看容器中运行的进程信息 | - | - |
docker port | 列出指定的容器的端口映射 | docker port mymysql | 查看 |
docker wait | 阻塞运行直到容器停止,然后打印出它的退出代码 | docker wait CONTAINER | - |
docker rm | 删除容器 | - | - |
一、安装Docker
进入官网:https://www.docker.com/products/docker-desktop
可能需要先注册登录,很简单的。
点击 Download Desktop for Mac and Windows 后进入下载流程
选择for windows,点击 Next Step 开始下载。
我下载回来的包 500 多M,还是比较大的,双击安装即可。
安装完成后,打开cmd,运行:
docker -v
能正常显示出当前docker的版本号说明安装成功。
注意:可能更新的Win10系统,还需要下载Linux内核更新包:
- 下载最新包: 适用于 x64 计算机的 WSL2 Linux 内核更新包
- 备注: 如果使用的是 ARM64 计算机,请下载 ARM64 包。 如果不确定自己计算机的类型,请打开命令提示符或 PowerShell,并输入:systeminfo | find "System Type"。
- 运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)
二、运行Nginx镜像
进入 Docker Hub 镜像仓库。
搜索 nginx
我们可以看到第一个就是官方的,直接点击进入
在这个页面选择对应的镜像 tag 后,复制执行即可下载。如:docker pull nginx:1.20.0-perl
下载完成后,我们可以执行以下命令查看已经拉取回来的镜像。
docker images
接下来,我们就可以运行这个nginx镜像了。
运行镜像有两种方式:前台 、后台 。
前台运行
docker run hub.c.163.com/library/nginx
通过上面的命令我们运行起了nginx,你会发现命令行什么反应都没有了(可以通过Ctrl + c来关闭)。
我们重开一个cmd,运行:
docker ps
查看是否成功运行了nginx。
可以看到,nginx 正在运行。我们在之前的窗口 Ctrl + c 关闭它后,再运行 docker ps ,进程就会被关闭了。
后台运行
运行容器的格式
docker run --name container-name:tag -d image-name
// --name:自定义容器名,不指定时,docker 会自动生成一个名称
// -d:表示后台运行容器
// image-name:指定运行的镜像名称以及 Tag
进入容器内部
docker exec 命令用于进入容器内部, -it 是这个命令的可选参数。-i 表示保证我们输入有效,-t 是给我们分配一个伪终端,多个参数可以连起来写,就成了 -it
参数后边是容器名称或id,可以只输入开头的几个字符,它就会自动帮我们识别到。
那么接下来,我们运行命令:
docker exec -it 46a bash
# 46a 是我们上面运行的容器id头三位,您需要换成自己的
可以看到像是进入了一个新的主机。其实这确认是一个虚拟主机,因为我们的 nginx 本来就是运行在 linux 容器上,在这里我们可以执行 **linux **的命令。
我们可以通过命令
which nginx
来查看nginx在什么位置
然后可以通过 exit 命令退出到之前的主机。
exit
停止容器
# docker stop [容器id]
docker stop 46a
三、让浏览器可以访问
我们上面虽然启动了nginx,但你可能已经发现,我们在浏览器中无法访问容器中的nginx。
我们先停止已经启动的容器,再执行下面的命令:
docker run -d -p 8080:80 nginx
如果windows弹出防火墙提示,点击允许访问。
这个时候我们再来通过 netstat 命令检查一下是否真的打开了 8080 端口
netstat -na|grep 8080
可以看到,已经是监听状态了。我们直接在浏览器中打开试试。
四 、创建容器挂载
上面第三步我们的nginx虽然跑起来了,但只是个默认页。实际上我们一般需要代理转发,需要修改配置。我们直接修改容器的配置很不方便,这时候,可以用上挂载功能,让容器加载或写入宿主机器上的挂载目录。这样,我们直接在宿主机上就可以修改配置或查看日志了。
创建挂载目录:
mkdir -p /home/nginx/conf
mkdir -p /home/nginx/log
mkdir -p /homt/nginx/html
将容器中的 nginx.conf 文件复制到宿主机
# 生成容器
docker run --name nginx -p 8090:80 -d nginx
# 将容器 nginx.conf 文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /home/nginx/
# 删除这个容器
docker rm nginx
创建 Nginx 容器并运行
docker run \
--name nginx \
-p 80:80 \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx
单行命令模式:
docker run --name nginx -p 8090:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/log:/var/log/nginx -v /home/nginx/html:/usr/share/nginx/html -d nginx
- 第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件
- 第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志
- 第三个-v:挂载静态页面目录
\
: shell 命令换行