docker

  1. Docker 和 虚拟机的区别
  2. Docker 存储
  3. Docker 网络
    1. 自定义网络
    2. 网络连通
  4. Docker 部署前后端分离项目-若依
    1. 准备工作

Docker 和 虚拟机的区别

虚拟机需要启动完整的系统,内核、工具等

Docker 是容器的一种实现方式,镜像是一个模板,容器是模板的实例。

image-20240319140809181

查看本地镜像: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 存储

image-20240319153237440

创建一个卷:docker volume create 卷名

Docker 网络

image-20240415165528783

image-20240415191928794

如果容器不指定网络情况下,都是 Docker0 路由的,Docker0 会给容器分配一对 veth-pair。

通过 docker network inspect 网络id 查看

image-20240415192837156

自定义网络

  • 桥接 (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

网络连通

image-20240415201510604

现在创建一个新的容器到 docker0 网段

image-20240415201820589

连通命令

image-20240415202812841

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端口 访问界面了!

image-20240322095418176

其中容易出错的点是配置 nginx 时,其配置文件对于后端的映射。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1216271933@qq.com

×

喜欢就点赞,疼爱就打赏