• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
6ui7
博客园    首页    新随笔    联系   管理    订阅  订阅
[Docker] Notes about how to use Docker

前言

简单来说,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 盘的内容,而不是默认内容,这两者被关联起来,修改是相互影响的。这时假如这个容器被删除,我们再次运行镜像仍是我们已经修改好的文件。

一些重要步骤:

  1. 在本地创建好挂载目录

  2. 运行容器 (注意 windows 系统的绝对路径)

docker run -d -p 80:80 -v C:/dockerMo/nghtml:/usr/share/nginx/html --name app01 nginx
  1. 在本地目录中写入要改入的文件 如:修改 html 页面
echo hello > index.html
  1. 可进入容器并检查是否成功挂载上
docker exec -it app01 bash
  1. 访问本地地址 localhost:80:80 查看

卷映射:假如挂载的目录文件为空,则自动填充容器内默认的文件,以内部为准。防止出现挂载后本地目录文件为空导致容器运行失败或错误的情况。卷可以帮助我们持久化容器的数据,即使容器被删除,数据也不会丢失,卷可以在容器之间共享或独立使用。

  1. 创建卷
docker volume create test1
  1. 查看卷
docker volume ls
  1. 查看卷的位置
docker inspect test1
  1. 运行容器
 docker run -d -p 99:80 
-v C:/dockerMo/nghtml:/usr/share/nginx/html
-v test1:/etc/nginx
--name app02 nginx
  1. 修改文件(启动一个临时容器并挂载卷)
docker run -it --rm -v test1:/data busybox
  1. 进入文件或者修改创建都ok
    如编辑文件 :
vi /data/nginx.conf

容器相互访问
通过容器的 ip 地址可实现内部访问

  1. 查看容器 ip
docker inspect test1

app01 : 172.17.0.2
app02 : 172.17.0.3

  1. 进入 app01 容器内部控制台
docker exec -it app01 bash
  1. 通过访问 ip 地址访问 app02
curl http://172.17.0.3

由于ip可能会变化,因此我们想到通过域名访问。docker0 默认不支持主机域名。创建自定义网络,容器名就是稳定域名。

  1. 创建自定义网络
docker network create mynet
  1. 启动容器
docker run -d -p 88:80 --name app1 --network mynet nginx
docker run -d -p 99:80 --name app2 --network mynet nginx
  1. 进入容器通过域名(容器名)访问其他容器
docker exec -it app1 bash
curl http://app2:80

这里的端口是 80 .是因为我们是容器之间相互访问,而不再是通过宿主机访问,因此用的不是暴露给主机的端口,而是内部端口。

一些运行镜像的注意点

  1. 关注容器的 暴露端口(网络)、配置文件、数据文件(防止丢失)、环境变量
    即 网络 存储 环境变量

  2. 编写这些命令参照 Docker Hub 的文档

  3. 命令顺序 -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 ?
用来快速部署和管理多容器环境的工具,让开发和部署变得更高效、更便捷。

  1. 编写 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:
  1. 运行compose.yaml文件
docker compose -f compose.yaml up -d
  1. 删除所有容器镜像
docker compose -f compose.yaml down --rmi all -v

一些总结
除此之外, Docker 还有编写镜像文件等操作。
通过此次对 Docker 的学习,我了解了 Docker 的一些基本操作。以及学会了如何查阅官方文档。

posted on 2024-12-24 18:46  即将回村喂鸡  阅读(17)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3