Docker基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


数据卷

数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器内产生的数据。


1. 数据卷挂载

  • 如何挂载数据卷?
    • 在创建容器时,利用 -v 数据卷名:容器内目录 完成挂载
    • 容器创建时,如果发现挂载的数据卷不存在时,会自动创建
  • 数据卷的常见命令有哪些?
    • docker volume ls : 查看数据卷
    • docker volume rm : 删除数据卷
    • docker volume inspect : 查看数据卷详情
    • docker volume prune : 删除未使用的数据卷

2. MySQL本地目录挂载

基于宿主机实现MySQL数据目录、配置文件、初始化脚本的挂载(查看官方镜像文档)

  • 挂载 /root/mysql/data 到容器内的 /var/lib/mysql 目录
  • 挂载 /root/mysql/init 到容器内的 /docker-entrypoint-initdb.d 目录,且携带SQL脚本
  • 挂载 /root/mysql/conf 到容器内的 /etc/mysql/conf.d 目录,且携带配置文件
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  mysql


自定义镜像

之前我们一直在使用别人准备好的镜像,那如果我要部署一个Java项目,把它打包为一个镜像该怎么做呢?


1. 镜像的结构

  • 镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖。
  • 因此,自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运行配置等文件,并且打包而成。

在这里插入图片描述

2. Dockerfile语法

  • 由于制作镜像的过程中,需要逐层处理和打包,比较复杂,所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可。
  • 而这种记录镜像结构的文件就称为Dockerfile,其对应的语法可以参考官方文档
  • Dockerfile就是利用固定的质量来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像。
  • 构建镜像的命令:docker build -t 镜像名 Dockerfile 目录
    在这里插入图片描述

网络

  • 我们创建了一个Java项目的容器,而Java项目往往需要访问其它各种中间件,例如MySQL、Redis等。
  • 但是,容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能MySQL容器的IP会发生变化,连接会失败。
  • 所以,我们必须借助于docker的网络功能来解决这个问题。
# 1.首先通过命令创建一个网络
docker network create hmall

# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID     NAME      DRIVER    SCOPE
639bc44d0a87   bridge    bridge    local
403f16ec62a2   hmall     bridge    local
0dc0f72a0fbb   host      host      local
cd8d3e8df47b   none      null      local
# 其中,除了hmall以外,其它都是默认的网络

# 3.让dd和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect hmall mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect hmall dd

# 4.进入dd容器,尝试利用别名访问db
# 4.1.进入容器
docker exec -it dd bash
# 4.2.用db别名访问
ping db
# 结果
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.056 ms
# 4.3.用容器名访问
ping mysql
# 结果:
PING mysql (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.054 ms
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值