docker入门到部署

本文介绍了Docker的基础概念,包括`dockerrun`与`dockerstart`的区别,`dockerexec`的用途,数据卷的挂载,以及如何使用Dockerfile自定义镜像。还讲解了容器间的互连、实地部署应用(包括后端和前端)和DockerCompose的使用。
摘要由CSDN通过智能技术生成

docker入门到部署

镜像相关命令

镜像相关命令

1.注意 docker rundocker start 的区别

一个是重新创建一个容器,一个是在原有的基础上重新运行该容器。

2.docker exec用途

进入容器内部,更改操作。

docker pull nignix
docker pull

数据卷

数据卷(volume):虚拟目录,是容器内部宿主机目录之间映射桥梁

通过数据卷,就可以通过宿主机中的高级操作如vi编辑文件来代替容器内的编辑文件操作(容器只提供运行的基本环境,一般没有vi等应用。

image-20231013175307042

命令操作都是在docker volume首部下进行

  • 必须在docker run -v数据卷:容器内目录,实现挂载。
root@stwu-virtual-machine:~# docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
  • 查看数据卷目录

    使用docker volume ls

    root@stwu-virtual-machine:~# docker volume ls
    DRIVER    VOLUME NAME
    local     73c66b3305b3bd8b127f7ad724387130050084383df24892b868bcbdc8adc6df
    local     226f93a5b32c9c0f3aad9c6c5410df963d43720b072fac81cabdd6c027b2e2bf
    local     ed266f68b5485071eded83a734a06e3bc2180294a5d5da75333625205509e4f4
    local     html
    
  • 详细查看挂载的数据卷信息

    docker inspect /html,可以看到在宿主机上存储位置。就可以通过cd来进入文件,即容器内部的文件中。

    image-20231013193619958

我们使用MobaXtern来添加文件信息,可以看到添加到宿主机的文件,可以访问到容器内部的文件,实现挂载。(ps:我这里是除了小问题,所以创建了一个新的nginx2,端口映射是81,正常来说是没问题的)

image-20231015165332488

本地目录挂载

1.查看容器是否有挂载

使用docker inspect name其中name为容器的名字,如你的mynginx等。

这里查看一下自己的mysql容器是否有挂载。

右边是自己的,可能是因为mysql版本号的问题,我用的5.7版本。

image-20231015170436075

上面是匿名挂载目录。

2.直接本地目录挂载

我们以-mysql的从重新配置为例子

本地目录必须以"I"或"./"开头,如果直接以名称开头,会被识别为数据卷而非本地目录

  • -V mysql : /var/ib/mysql会被识别为-个数据卷叫mysq|

  • -V ./mysq|: /var/lib/mysql会被识别为当前目录下的mysq|目录

image-20231015173109345

我这里是想挂载到电脑的 dockerData中,所以更改了一下挂载目录,确保已经有这些目录哈

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /dockerData/mysql/data:/var/lib/mysql \
  -v /dockerData/mysql/init:/docker-entrypoint-initdb.d \
  -v /dockerData/mysql/conf:/etc/mysql/conf.d \
  mysql

镜像文件dockerfile

自定义镜像上传,帮助构建分层的镜像层级

docker build -t name:tag .

后面的.是指同一目录下的dockerfile

image-20231015231038437

容器之间的互连

docker network ~

image-20231015223803395

用docker network connect ~可以看到新添加的类型为bridge的网络

image-20231015224000499

  • 容器添加到新建的网络

    例如这里的docker network connect wst mysql,再次查询mysql内部信息可以看到新添wst的网关。

image-20231015224303307

  • 如果在创建容器时就使用自定义网关

    docker run -d --network ~ …

    使用--network直接加入网络


实地部署应用

可以看项目部署_哔哩哔哩_bilibili,这个老师讲的真的好,大家可以

1.先部署后端项目

先打包成可运行的jar包,跟随dockerfile文件,复制到虚拟机文件中,进行上传成镜像。注意网络的配置,保证后面的容器处于同一个网路。

2.部署前端项目

创建一个nginx容器,键nginx.conf和html进行挂载。主要是conf的文件编写啊~ 网络的配置。

提升:DockerCompose

  • 手动部署的缺点:容器太多,麻烦;没有整体思想

  • 使用DockerCompose:直接部署,整体性

单独的docker-compose.yml文件思实现所有的容器之间的信息编写。并集创建关联为一体的项目部署,增加整体性。

基本格式如下:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall

然后在虚拟机中使用docker compose~信息

image-20231016125047072

这样直接删除其他的容器甚至镜像,直接创建。删除也没有残留。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值