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文件夹是否为空,finalshell中mysql.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