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已经运行
发现我们run的时候并没有带入cmd参数,却又cmd命令在执行脚本,在程序启动的时候,通过docker inspect kodbox查看发现在dockfile构建镜像时创建的命令在上传打包移植后,原来的参数会保留在容器的配置文件里,在容器启动的时候运行
然后进入容器查看具体的实现方式
docker exec -it kodbox bash
在通过netstat 查看运行了什么服务
进入容器后发现没有netstat,然后我们安装net-tools工具
发现代理不对,无法更新apt 源
修改代理,主机docker 使用主机的局域网代理,这里使用docker 的ip地址,使用127.0.0.1不好使,无法连接到主机的代理端口
然后update跟新源,安装net-tools
这里的docker ip 可以通过ip a或者docker inspect 容器id 查看
通过netstat查询得信息如下
发现启动了nginx服务正向代理了kodbox得web服务,在docker 容器得80端口,
并且通过nginx -V查看所有得配置文件,找到配置文件得位置
然后cd到改目录查看
然后cat 打开查看里面暴露得端口和站点得目录
发现刚好对应kodbox得目录,网页打开站点从index.php启动配置
补充: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上了