Docker 和 虚拟机的区别
虚拟机需要启动完整的系统,内核、工具等
Docker 是容器的一种实现方式,镜像是一个模板,容器是模板的实例。
查看本地镜像:docker images
查看正在运行的容器:docker ps
运行一个容器:docker run –name some-nginx -d -p 8080:80 nginx:1.22
查看容器的信息:docker inspect 容器名
将容器连接到网络:docker network (dis)connect 网络名 容器名
之后访问容器 docker run -it --rm mysql:5.7 mysql -h172.17.0.2 -uroot -p
=》 docker run -it --rm --network 网络名 mysql:5.7 mysql -hsome-mysql -uroot -p
Docker 存储
创建一个卷:docker volume create 卷名
Docker 网络
如果容器不指定网络情况下,都是 Docker0 路由的,Docker0 会给容器分配一对 veth-pair。
通过 docker network inspect 网络id
查看
自定义网络
- 桥接 (bridge) :默认
- none :不配置网络
- host :和宿主机共享网络
-- 创建自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
-- 创建容器到指定网络
docker run -d -P --name tomcat01 --net mynet tomcat
自定义网络可以直接通过容器名 ping
网络连通
现在创建一个新的容器到 docker0 网段
连通命令
Docker 部署前后端分离项目-若依
准备工作
1、创建 mysql 容器
docker run -d \
--name mysql \
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=1314 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \ # 映射路径
--network ruoyi \
mysql:8.0.19
在启动 mysql 容器后,运行中内存会很大,需要在进入容器内为其配置文件中设置参数:
/etc/mysql/conf.d 目录执行 vim docker.cnf
performance_schema_max_table_instances=400
table_definition_cache=400
performance_schema=off
table_open_cache=64
innodb_buffer_pool_chunk_size=64M
innodb_buffer_pool_size=64M
2、创建 redis 容器
docker run \
--name redis \
-p 6380:6379 \
-v /root/redis/conf:/usr/local/etc/redis \
-v /root/redis/data:/data \
-d \
--network ruoyi \
redis:6.0.8 \
redis-server /usr/local/etc/redis/redis.conf
3、创建 nginx 容器
docker run -d \
--name nginx \
-p 81:80 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
--network ruoyi \
nginx:1.22
由于 nginx 的配置文件容器出错,我们可以先创建一个 nginx 容器复制其配置文件,再删除它。
# 复制配置
docker cp nginx:/etc/nginx/nginx.conf /root/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /root/nginx/conf/conf.d
docker cp nginx:/usr/share/nginx/html /root/nginx/
4、部署后端 Dokcerfile
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 拷贝jar包
COPY /root/ruoyi-admin.jar /home/ruoyi/app.jar
# 入口
ENTRYPOINT ["java", "-jar", "app.jar"]
5、创建项目镜像
docker build -t ruoyi:1.0 -f /root/Dockerfile .
6、创建项目容器
docker run -d \
--name ruoyi \
-p 8081:8081 \
-v /root/ruoyi/uploadPath:/home/ruoyi/uploadPath \
--network \
ruoyi \
ruoyi:1.0
7、最后运行容器
docker run -d \
-p 81:80 \
-p 443:443 \
--name nginx \
--restart=always \
--network ruoyi \
-e TZ="Asia/Shanghai" \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /root/nginx:/var/log/nginx \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/cert:/etc/nginx/cert \
nginx:1.22
现在可以通过 服务器id : nginx端口 访问界面了!
其中容易出错的点是配置 nginx 时,其配置文件对于后端的映射。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1216271933@qq.com