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.遇见的问题
- mac出现
docker Failed to get D-Bus connection
解决办法:参考1 参考2
编辑~/Library/Group\ Containers/group.com.docker/settings.json修改deprecatedCgroupv1
参数为true
,默认是false - 修改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