docker部署kodbox##深度解析

docker pull镜像kodbox

docker pull tznb/kodbox:1.15

不一定要1.15版本,不加:1.15默认拉取最新版

docker run 启动 映射本地磁盘

docker run -d -it --name kodbox -p 1111:80 -v /data/docker/kodbox:/var/www/html --restart=always tznb/kodbox:1.15   #1111端口可随意改

查看docker任务,kodbox已经运行

image
发现我们run的时候并没有带入cmd参数,却又cmd命令在执行脚本,在程序启动的时候,通过docker inspect kodbox查看发现在dockfile构建镜像时创建的命令在上传打包移植后,原来的参数会保留在容器的配置文件里,在容器启动的时候运行
image

然后进入容器查看具体的实现方式

docker exec -it kodbox bash

在通过netstat 查看运行了什么服务
进入容器后发现没有netstat,然后我们安装net-tools工具
发现代理不对,无法更新apt 源
修改代理,主机docker 使用主机的局域网代理,这里使用docker 的ip地址,使用127.0.0.1不好使,无法连接到主机的代理端口
然后update跟新源,安装net-tools
image
这里的docker ip 可以通过ip a或者docker inspect 容器id 查看
通过netstat查询得信息如下
image
发现启动了nginx服务正向代理了kodbox得web服务,在docker 容器得80端口,
并且通过nginx -V查看所有得配置文件,找到配置文件得位置
image
然后cd到改目录查看
image
然后cat 打开查看里面暴露得端口和站点得目录
image
发现刚好对应kodbox得目录,网页打开站点从index.php启动配置
image

补充:docker-compose方式启动容器

将以下内容写入到docker-compose.yml文件中:

version: "3.1"
 services:
   db:
     image: mariadb
     command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
     volumes:
       - "./db:/var/lib/mysql"        #左边 ./db 代表数据库持久化目录位置
     environment:
       - "TZ=Asia/Shanghai"
       - "MYSQL_ROOT_PASSWORD=sbsn555"
       - "MYSQL_DATABASE=kodbox"
       - "MYSQL_USER=kodbox"
       - "MYSQL_PASSWORD=sbsn555"
   app:
     image: kodcloud/kodbox
     ports:
       - 5326:80        #左边 5326 是主机访问端口,可按需修改
     links:
       - db
       - redis
     volumes:
       - "./site:/var/www/html"        #左边 ./site 代表kodbox持久化目录位置
     restart: always
   redis:
     image: redis:alpine
     environment:
       - "TZ=Asia/Shanghai"
     restart: always
# 编写compose文件:
version: '3.0'
services:
  kodcloud:
    container_name: kodcloud
    image: kodcloud/kodbox
    restart: always
    ports:
      - 1111:80
    depends_on: 
      - mysql
      - redis
  mysql:
    container_name: mysql
    image: mysql:8.0.29
    restart: always
    volumes:
      - /root/docker/mysql/data:/var/lib/mysql
      - /root/docker/mysql/conf:/etc/mysql/conf.d
      - /root/docker/mysql/logs:/logs
    ports:
      - 9004:3306
    environment:
      - "MYSQL_ROOT_PASSWORD=2002"
  redis:
    container_name: redis
    image: redis:5.0
    restart: always
    volumes:
      - /root/docker/redis/data:/data
      - /root/docker/redis/redis.conf:/etc/redis/redis.conf
    ports:
      - 9005:6379

然后再使用docker-compose up -d启动即可

关于docker volume迁移(重点)

第一种

拷贝物理逻辑卷内容,然后再新得镜像映射,此时新得镜像里面得路径是空得,然后会把物理路径拷贝内容到容器里登陆host的/var/lib/docker/volume目录找到对应的volume,打包带走,在新host的volume中解压.

第二种

上面注部分提到过volume的特点,可以利用这点来进行迁移,假设有一个卷test需要迁移,步骤如下
1.将test卷映射得容器提交成镜像使用docker commit 容器id 新得镜像名
2.新机器上新建同名volume,然后pull或者import镜像image-A
3.通过镜像image-A启动容器B,挂载卷test,由于test是空的而容器目录有内容,docker会将container目录中的内容拷贝到volume中.
4.删除镜像image-A,容器A,容器B,由于数据卷不会被删除,因而就完成了迁移,可以给新的容器使用.
这样volume就随着容器迁移到新的host上了

posted @ 2023-11-27 20:12  学不会xuebuhui  阅读(550)  评论(0编辑  收藏  举报
Language: javascript