前言
简单来说,Docker 是一个开源的容器化平台,可以帮助我们在隔离的环境中运行应用程序。与虚拟机不同,Docker 容器通过共享宿主机的操作系统内核来实现资源隔离,使得容器比传统虚拟机更轻量、更高效。
一些名词
image (镜像) :
一些软件,可以通过 Docker Hub 来 pull 和 push 。
container (容器) :
用来运行某个镜像。各个容器互相独立,互不影响。
一些镜像加速地址
进入 docker 目录下添加 daemon.json 文件
添加内容:
{
"registry-mirrors": ["https://registry.docker-cn.com","https://y4xpdpoy.mirror.aliyuncs.com"]
}
//哇塞了 我弄了超久 所有镜像地址我都用不了 最后还是用了魔法 什么镜像都不如魔法好使
一些操作
目录挂载 :通常我们可以在容器内修改镜像某个文件,但是假如这个容器被删除,那我们再想要运行这个镜像,容器里这个文件仍会是默认内容,需要我们再次修改。这时候可以通过目录挂载技术,即创建一个本地文件映射到容器,相当于一个 U 盘,容器里会显示这个 U 盘的内容,而不是默认内容,这两者被关联起来,修改是相互影响的。这时假如这个容器被删除,我们再次运行镜像仍是我们已经修改好的文件。
一些重要步骤:
-
在本地创建好挂载目录
-
运行容器 (注意 windows 系统的绝对路径)
docker run -d -p 80:80 -v C:/dockerMo/nghtml:/usr/share/nginx/html --name app01 nginx
- 在本地目录中写入要改入的文件 如:修改 html 页面
echo hello > index.html
- 可进入容器并检查是否成功挂载上
docker exec -it app01 bash
- 访问本地地址 localhost:80:80 查看
卷映射:假如挂载的目录文件为空,则自动填充容器内默认的文件,以内部为准。防止出现挂载后本地目录文件为空导致容器运行失败或错误的情况。卷可以帮助我们持久化容器的数据,即使容器被删除,数据也不会丢失,卷可以在容器之间共享或独立使用。
- 创建卷
docker volume create test1
- 查看卷
docker volume ls
- 查看卷的位置
docker inspect test1
- 运行容器
docker run -d -p 99:80
-v C:/dockerMo/nghtml:/usr/share/nginx/html
-v test1:/etc/nginx
--name app02 nginx
- 修改文件(启动一个临时容器并挂载卷)
docker run -it --rm -v test1:/data busybox
- 进入文件或者修改创建都ok
如编辑文件 :
vi /data/nginx.conf
容器相互访问
通过容器的 ip 地址可实现内部访问
- 查看容器 ip
docker inspect test1
app01 : 172.17.0.2
app02 : 172.17.0.3
- 进入 app01 容器内部控制台
docker exec -it app01 bash
- 通过访问 ip 地址访问 app02
curl http://172.17.0.3
由于ip可能会变化,因此我们想到通过域名访问。docker0 默认不支持主机域名。创建自定义网络,容器名就是稳定域名。
- 创建自定义网络
docker network create mynet
- 启动容器
docker run -d -p 88:80 --name app1 --network mynet nginx
docker run -d -p 99:80 --name app2 --network mynet nginx
- 进入容器通过域名(容器名)访问其他容器
docker exec -it app1 bash
curl http://app2:80
这里的端口是 80 .是因为我们是容器之间相互访问,而不再是通过宿主机访问,因此用的不是暴露给主机的端口,而是内部端口。
一些运行镜像的注意点
-
关注容器的 暴露端口(网络)、配置文件、数据文件(防止丢失)、环境变量
即 网络 存储 环境变量 -
编写这些命令参照 Docker Hub 的文档
-
命令顺序 -d 后台启动 -p 端口暴露 -v 目录/卷挂载 -e 环境变量初始化
这里在 mysql 里实践一下
点击查看代码
docker run -d -p 3360:3360 `
>> -v D:\dockerMo\mysql:/etc/mysql/conf.d `
>> -v D:\dockerMo\mysql:/var/lib/mysql `
>> -e MYSQL_ROOT_PASSWORD=123456 `
>> mysql:8.0.40-debian
用 DataGrip 测试 连接成功
如何使用 docker compose
为什么使用docker compose ?
用来快速部署和管理多容器环境的工具,让开发和部署变得更高效、更便捷。
- 编写 compose.yaml 文件
![]()
点击查看代码
name: myblog
services:
mysql:
container_name: mysql
image: mysql:8.0
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: myblog
volumes:
- mysql-data:/var/lib/mysql
- D:/dockerMo/myblog:/etc/mysql/conf.d # 确保路径存在
restart: always
networks:
- blog
wordpress:
container_name: wordpress
image: wordpress:latest
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 123456
WORDPRESS_DB_NAME: myblog
volumes:
- wordpress:/var/www/html
restart: always
networks:
- blog
volumes:
mysql-data:
wordpress:
networks:
blog:
- 运行compose.yaml文件
docker compose -f compose.yaml up -d
- 删除所有容器镜像
docker compose -f compose.yaml down --rmi all -v
一些总结
除此之外, Docker 还有编写镜像文件等操作。
通过此次对 Docker 的学习,我了解了 Docker 的一些基本操作。以及学会了如何查阅官方文档。

浙公网安备 33010602011771号