Docker入门(二)

docker数据卷/目录挂载

这里所谓的数据卷/目录类似于一个共享文件/文件夹,数据卷的文件和数据内容共享且相互绑定,通常是宿主机映射到容器内目录,且该数据卷是虚拟的。从而达成了对容器内数据以及配置等文件的操作和读取的功能,在对数据库,Nginx等部署时进行挂载,减少对容器内部的二次配置。

当然数据卷可以先单独创建,在创建容器时通过使用--mount进行挂载

# 创建一个数据卷:docker volume create 数据卷名称
docker volume create volumetest
# 查看已有数据卷
docker volume ls
# 查看数据卷的信息: docker volume inspect 数据卷名称
docker volume inspect volumetest
# 输出,/var/lib/docker/volumes/ 这个目录是默认数据卷的目录
[
    {
        "CreatedAt": "2024-06-17T09:36:45+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/volumetest/_data",
        "Name": "volumetest",
        "Options": null,
        "Scope": "local"
    }
]
#创建容器时挂载
docker run -itd \
> --name=volumetest \
> --mount source=数据卷名称, target=容器对应的目录 \
> 数据卷名
# 删除数据卷:docker volume rm 数据卷名称
docker volume rm volumetest

需要挂载目录时,--mount 还需要添加参数 type=bind,可以用参数-v代替,-v灵活度更高且不需要创建数据卷,推荐使用-v

# 使用--mount
--mount type=bind, source=数据卷名, target=容器内目标目录
# 使用-v
-v 宿主机挂载目录:容器目标目录

在容器创建时可使用参数-v配置目录挂载,参数说明:-v 宿主机目录:容器内目录,下面是创建MySQL容器并配置的示例,符号反斜杠\仅为换行方便查看,无实际意义。

# 使用 -v
docker run -d \ 
> -p 3306:3306 \
> --name mysqltest \
> -v /root/mysql/conf:/etc/mysql/conf.d \
> -v /root/mysql/logs:/logs \
> -v /root/mysql/data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=123 \
> mysql

Dockerfile

Dockerfile是一种文本文件,常用来自定义镜像,内容是一条条镜像的构建说明的指令。
Dockerfile构建镜像是一层一层建的。

Dockerfile文件常用指令:

# FROM:基础镜像信息,默认优先从本地查找,本地不存在则从远程拉取
FROM openjdk:8-jre-slim
# RUN:镜像构建时的操作指令,类似于以shell执行方式执行后面的指令
RUN echo '这是一个测试案例,'
# COPY:将主机目录或文件复制到镜像容器指定路径 <源路径> <目标路径>
COPY ./java.jar /app.jar
# ADD:与COPY功能类似,但ADD可以自动解压gzip, bzip2 以及 xz文件并复制到目标路径,官方推荐使用COPY
# 本例中这条命令和COPY功能一样
ADD ./java.jar /app.jar
# EXPOSE:生命容器运行时监听的端口
EXPOSE 8080
# VOLUME:容器的挂载点或声明卷,可在docker run 中使用-v修改
VOLUME <路径>
# CMD:类似RUN命令,但是CMD是在docker容器启动run时运行,RUN是在镜像构建build时运行
# 这条指令相当于运行 java -jar /app.jar 
CMD ["java", "-jar", "/app.jar"]

Dockerfile文件编写好后,使用docker build构建镜像。

docker build -t 镜像名:tag标签 Dockerfile文件位置

不写标签默认是latest,如:
docker build -t testjar .
其中.表示Dockerfile在当前目录下

构建好镜像后使用docker images查看镜像列表

[root@localhost upload]# docker images
REPOSITORY      TAG               IMAGE ID       CREATED       SIZE
my_java8        8-jre             54301e8a1f0d   2 years ago   194MB
openjdk         8-jre-slim        54301e8a1f0d   2 years ago   194MB
mysql           latest            3218b38490ce   2 years ago   516MB
moby/buildkit   buildx-stable-1   19340e24de14   2 years ago   144MB
testjar        latest            b8604a3fe854   5 seconds ago   218MB

然后再可以使用docker run运行容器

docker run -d \
> --name 容器名称 \
> -p 宿主机端口:容器监听端口 \
> -v 宿主机挂载目录:容器内目标目录 \
> testjar

Docker容器连接

都知道Docker容器之间是隔离不互通的,那当这边的一个容器服务需要调用另一个容器的服务时应该怎么办,这时就要考虑容器连接

实现容器互联方式有多种,比较常用的是network网络,还有端口映射。

network网络

我们可以通过将两个或多个容器加入到同一个网络实现容器之间的互联

  • 创建网络
docker network create -d bridge netname

-d:指定 Docker 网络类型,有 bridge、overlay

  • 查看网络
docker network ls

  • 运行容器连接网络
    使用--network参数连接
docker run -itd --name test1 --network netname 镜像名
docker run -itd --name test2 --network netname 镜像名

进入容器ping测试 连通性,ping test1, ping test2

当有多个容器需要互联时,推荐使用Compose方式

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值