Docker 容器化部署基础

Docker 容器化部署基础

基本

  • 镜像不仅包含应用本身, 还包括运行应用的环境,配置, 系统函数库等
  • 容器是隔离的

  • 镜像名字完整是 mysql:5.7

常见命令

  • docker inspect 容器名

日志

  • docker logs -f hmall

自动重启

  • docker update --restart=no nacos

demo


docker pull nginx
docker images
docker save --help

docker save -o nginx.tar nginx:latest

docker rmi nginx:latest

从tar 包加载镜像
docker load -i nginx.tar

docker run -d --name nginx -p 80:80 nginx:latest


docker exec -it nginx bash

别名

vi ~/.bashrc

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'


source ~/.bashrc

数据卷挂载

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html  nginx

docker volume ls

docker volume inspect html

[
    {
        "CreatedAt": "2025-01-30T22:01:25-08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/html/_data",
        "Name": "html",
        "Options": null,
        "Scope": "local"
    }
]
  • 数据卷名字要唯一
    • /var/lib/docker/volumes/ 下会有很多数据卷, 自动创建

本地挂载


docker run -d 
--name mysqlCustom 
-p 3307:3306 
-e MYSQL_ROOT_PASSWORD=1234 
-v /root/mysql/data:/var/lib/mysql 
-v /root/mysql/init:/docker-entrypoint-initdb.d 
-v /root/mysql/conf:/etc/mysql/conf.d  
mysql


D:\BaiduNetdiskDownload\java\javaee\SpringCloud微服务—资料\day02-Docker\资\mysql
  • 注意删除重建时要检查 data 文件夹是否为空, finalshellmysql.sock 不显示

自定义镜像

dockerFile

网络

自定义网络

demo

docker network create heima

ifconfig

br-9852d5095d79: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:8c:f8:42:b4  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:44ff:fe6f:e190  prefixlen 64  scopeid 0x20<link>
        ether 02:42:44:6f:e1:90  txqueuelen 0  (Ethernet)
        RX packets 73  bytes 7406 (7.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 119  bytes 12184 (11.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 多了 br-9852d5095d79 网段是 172.18.0.1
docker network connect heima mysqlCustom
  • mysqlCustom 的配置中多了一个网段如下
"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:ac:11:00:03",
                    "NetworkID": "d0bd5b3ef25b7538f53890a554c4a8efeb1ee298e7ae887d8ce0a6c900bb3161",
                    "EndpointID": "c8700ebba3bab506e40889f8378a230e36b8db79fccb73af94b7364b55109001",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DriverOpts": null,
                    "DNSNames": null
                },
                "heima": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [],
                    "MacAddress": "02:42:ac:12:00:02",
                    "NetworkID": "9852d5095d79a3a43d64a4eb8d28e31a478a9f695879c20b6ad70deef1195e96",
                    "EndpointID": "a919eac1641bdab467878c4c364550c8a1baa7eeec0154aff3f0bf94fd0fb66c",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DriverOpts": {},
                    "DNSNames": [
                        "mysqlCustom",
                        "d2fd3dcd672f"
                    ]
                }
            }

创建时加入

docker run -d --name dd -p 8080:8080 --network heima dockerdemo
  • network 中就没有 docker0
"Networks": {
                "heima": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:ac:12:00:03",
                    "NetworkID": "9852d5095d79a3a43d64a4eb8d28e31a478a9f695879c20b6ad70deef1195e96",
                    "EndpointID": "05abbdf3791796d8380bf30f8d7f228eb3092db2a6d7fd0a1f6641cf1a70d91d",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DriverOpts": null,
                    "DNSNames": [
                        "dd",
                        "9897540b887f"
                    ]
                }
            }

部署demo

部署后端

 docker build -t hmall .

docker run -d --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123  -v /root/mysql/data:/var/lib/mysql -v /root/mysql/init:/docker-entrypoint-initdb.d -v /root/mysql/conf:/etc/mysql/conf.d  mysql


docker network connect  heima  mysql 


docker run -d --name hmall -p 8080:8080 --network heima hmall


http://192.168.87.129:8080/search/list/?pageNo=1&pageSize=5

部署前端

  • 下载 nginx 镜像
  • 传输前端文件
  • 运行
docker run -d --name nginx -p 18080:18080 -p 18081:18081 -v /root/qianduan/html:/usr/share/nginx/html -v /root/qianduan/nginx.conf:/etc/nginx/nginx.conf --network heima nginx

  • 前端中设置的域名是 hmall 那么后端容器名字应该也是 hmall

dockerCompose

  • 传统部署形式繁琐
  • 不能体现出整体性, 维护困难

dockerCompose 可以管理一组相关联的容器, 实现多个相关联的容器快速部署

 docker compose -f docker-compose.yml up -d

demo

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

redis

docker pull redis

docker run --name my-redis -d redis

docker run --name my-redis -p 6379:6379 -d redis

docker run --name my-redis -v /my/redis/data:/data -d redis redis-server --appendonly yes

docker run --name my-redis \
  -p 6379:6379 \
  -v /my/redis/data:/data \
  -d redis redis-server --appendonly yes --requirepass "yourpassword"


docker exec -it my-redis redis-cli

docker stop my-redis
docker rm my-redis


docker start my-redis