docker打包转移

1.容器导出为image

# 停止容器
sudo docker stop master
sudo docker stop slave1
sudo docker stop slave2
sudo docker stop mysql
sudo docker stop redis
#master
sudo docker commit master master:v1
sudo docker save > master.tar master:v1
#-b SIZE 指定每个文件的大小,其单位可以为b(512字节)、k(1K)、m(1M)
#-d 使用数字而不是字母作为后缀名
#-a X 指定后缀名的长度,默认为2位
split -b 1024m master.tar -d master.tar.
#slave1
sudo docker commit slave1 slave1:v1
sudo docker save > slave1.tar slave1:v1
split -b 1024m slave1.tar -d slave1.tar.
#slave2
sudo docker commit slave2 slave2:v1
sudo docker save > slave2.tar slave2:v1
split -b 1024m slave2.tar -d slave2.tar.
#mysql
sudo docker commit mysql mysql:v1
sudo docker save > mysql.tar mysql:v1
#redis
sudo docker commit redis  redis:v1
sudo docker save > redis.tar redis:v1

2.image导入的转移的机器

#创建镜像
docker load < master.tar
#sudo cat master.tar.*|docker load -i
docker load -i slave1.tar.*
#sudo cat slave1.tar.*|docker load -i
docker load -i slave2.tar.*
#sudo cat slave1.tar.*|docker load -i
docker load <mysql.tar
docker load <redis.tar

3.转移的机器从镜像启动容器

#docker 自启
systemctl enable docker

#创建网络
docker network create --subnet=172.172.0.0/24 centos-br0 
#创建mysql容器
docker run -p 3306:3306 \
--name mysql \
--network centos-br0 \
--ip 172.172.0.6 \
-v /export/data/mydata/mysql/log:/var/log/mysql:rw \
-v /export/data/mydata/mysql/data:/var/lib/mysql-files:rw \
-v /export/data/mydata/mysql/conf:/etc/mysql:rw \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:v1
#master
docker run -itd \
--name master \
--network centos-br0 \
--hostname master \
--add-host master:172.172.0.11 \
--add-host slave1:172.172.0.12 \
--add-host slave2:172.172.0.13   \
--ip 172.172.0.11 \
--privileged \
-p 50070:50070 -p 2181:2181 -p 8088:8088 -p 8020:8020 -p 9000:9000 -p 4040:4040 -p 9870:9870 -p 8080:8080 -p 16010:16010 -p 9001:9001 -p 10000:10000 -p 7077:7077 -p 23:22 \
-v /home/software:/opt/software \
-v /export/mdata:/opt/data \
-v /export/dfss/mdfs:/opt/module/hadoop/tmp/dfs \
master:v1 /usr/sbin/init
#slave1 
docker run -itd \
--name slave1 \
--network centos-br0 \
--hostname slave1 \
--add-host master:172.172.0.11 \
--add-host slave1:172.172.0.12 \
--add-host slave2:172.172.0.13   \
--ip 172.172.0.12 \
--privileged \
-p 50071:50070 -p 2182:2181 -p 8188:8088 -p 8021:8020 -p 9100:9000 -p 4041:4040 -p 9871:9870 -p 8081:8080 -p 16011:16010 -p 9011:9001 -p 10001:10000 -p 7177:7077 -p 24:22 \
-v /home/software:/opt/software \
-v /export/s1data:/opt/data \
-v /export/dfss/s1dfs:/opt/module/hadoop/tmp/dfs \
slave1:v1 /usr/sbin/init
#slave2
docker run -itd \
--name slave2 \
--network centos-br0 \
--hostname slave2 \
--add-host master:172.172.0.11 \
--add-host slave1:172.172.0.12 \
--add-host slave2:172.172.0.13   \
--ip 172.172.0.13 \
--privileged \
-p 50072:50070 -p 2183:2181 -p 8288:8088 -p 8022:8020 -p 920:9200 -p 4042:4040 -p 9872:9870 -p 8082:8080 -p 16012:16010 -p 9012:9001 -p 10002:10000 -p 7277:7077 -p 25:22 \
-v /home/software:/opt/software \
-v /export/s2data:/opt/data \
-v /export/dfss/s2dfs:/opt/module/hadoop/tmp/dfs \
slave2:v1 /usr/sbin/init
#redis
docker run \
--restart=always --log-opt \
max-size=100m --log-opt \
max-file=2 \
-p 6379:6379 --name redis \
--network centos-br0 \
--ip 172.172.0.7 \
-v /export/data/myredis/myredis_conf:/etc/redis/redis.conf \
-v /export/data/myredis/data:/data \
-d redis:v1 redis-server /etc/redis/redis.conf  \
--appendonly yes \
 --requirepass 123456
 redis:v1
#设置容器自启动
#docker update --restart=always 容器id 或 容器名称
docker update --restart=always mysql
docker update --restart=always redis
docker update --restart=always master
docker update --restart=always slave1
docker update --restart=always slave2

4.测试

# 启动了的话不需要再启动
docker start master
docker start slave1
docker start slave2
# 进入容器
docker exec -it master /bin/bash
docker exec -it slave1 /bin/bash
docker exec -it slave2 /bin/bash

#容器自启
docker update --restart=always
#取消容器自启
docker update --restart=no
# 启动hadoop
start-all.sh
#启动hive
/opt/module/startHive.sh
#启动hbase
start-hbase.sh
#启动kafka
/opt/module/startKafka.sh start

5.结束测试

#关闭
stop-all.sh
stop-hbase.sh
/opt/module/startKafka.sh stop

6.遇见的问题

  1. mac出现docker Failed to get D-Bus connection
    解决办法:参考1 参考2
    编辑~/Library/Group\ Containers/group.com.docker/settings.json修改deprecatedCgroupv1参数为true,默认是false
  2. 修改windows的docker存储位置
    参考
    docker-desktop-data磁盘映像通常位于以下位置:C:\Users\86180\AppData\Local\Docker\wsl\data
wsl --list -v
1.退出docker
2.导出本地已有数据
 wsl --export docker-desktop-data "D:\\docker-desktop-data.tar"
 wsl --export docker-desktop "D:\docker\docker-desktop.tar"
 3.删除本地数据
 wsl --unregister docker-desktop-data
 wsl --unregister docker-desktop
 4.导入数据到新盘,设置路径,这里我设置的路径为D:\\Download\\Docker\\wsl
 wsl --import docker-desktop-data "D:\\Download\\Docker\\wsl" "D:\\docker-desktop-data.tar" --version 2
 wsl --import docker-desktop D:\docker\desktop "D:\docker\docker-desktop.tar" --version 2
5.wsl --list -v
  NAME                   STATE           VERSION
* docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2
  5.重启docker
  

Docker的镜像和容器可以有两种方式导出

1.Docker save #ID or #Name

2.Docker export #ID or #Name

docker save和docker export的区别
1.docker save保存的是镜像,docker export保存的是容器
2.docker save会保留镜像所有的历史记录,docker export不会,即没有commit历史
3.docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
4.docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

实例

docker save -o nginx.tar nginx:latest 或 docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)

docker load -i nginx.tar 或 docker load < nginx.tar

其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

docker export -o nginx-test.tar nginx-test

#导出为tar

docker export #ID or #Name > /home/export.tar

其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)

docker import [options] file|URL|- [REPOSITORY[:TAG]]

示例
docker import nginx-test.tar nginx:imp

cat nginx-test.tar | docker import - nginx:imp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厨 神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值