最近公司应用需要逐渐实现docker部署。由于各种原因不能使用外网,现在记录离线版本docker安装。
首先进入官网下载二进制安装包
https://docs.docker.com/install/linux/docker-ce/binaries/#install-static-binaries
下载二进制包
https://download.docker.com/linux/static/stable/
选择自己需要的版本,此处我选择最新的ce版本,如果下载过程比较慢,可以是用迅雷下载,速度杠杠的!!
ce版本是社区版本(免费)
ee版本是商业版本(付费)
准备好安装包后,我们就直接把安装包上传到服务器,连上局域网,使用scp上传(windows可以是用其他工具,博主用的是mac)。
1、上传二进制包到服务器
scp docker-18.06.3-ce.tgz [email protected]:/usr/local/docker
2、解压
cd /usr/local/docker
tar xzf docker-18.06.3-ce.tgz
3、将二进制文件移动到可执行文件上的目录路径,例如/usr/bin/如果你跳过这一步,你必须在调用docker或dockerd命令。
cp docker/* /usr/bin/
4、启动docker守护进程
sudo dockerd &
5、设置开机自启动
sudo systemctl enable docker
6、测试是否安装成功
#查看docker信息
docker info
#查看镜像
docker images
docker search [name] 搜索镜像
docker pull [name] 拉取容器镜像
docker images 查看容器镜像
docker ps -a 查看容器进程
docker run 创建一个新的容器并运行一个命令
docker create 创建一个新的容器
docker exec 在容器中执行命令
docker start 启动一个容器
docker restart 重启一个容器
docker stop 停止一个容器
其中docker run 命令
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
使用docker安装mysql,zookeeper,kafka,centos7等等。
docker search mysql 之后可以看到镜像列表。
如果需要查看镜像的具体版本号进入https://hub.docker.com/查看
1.安装mysql:
#搜索mysql的镜像
docker search mysql
#拉取镜像,拉mysql5.7版本的镜像
docker pull mysql:5.7
#创建并启动一个容器
docker run --name test-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root@123456@qq -e MYSQL_DATABASE=agriculture -e TZ=Asia/Shanghai -d mysql:5.7
2. 安装kafka(单机版本)
kafka强依赖zookeeper
#拉取镜像,拉zookeeper 3.5.8版本的镜像
#网上很多人使用wurstmeister/zookeeper 但是现在出来了官方的镜像所以选择官网的
docker pull zookeeper:3.5.8
#拉取镜像,拉kafka 2.12-2.4.1版本的镜像
docker pull wurstmeister/kafka:2.12-2.4.1
#创建并启动zookeeper容器
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name my-zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime zookeeper:3.5.8
#创建并启动kafka
docker run -d --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name my-kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.1.206:2181/my-kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.206:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka:2.12-2.4.1
#docker ps 查看容器是否启动成功
docker ps
#进入kafka容器测试
docker exec -it my-kafka bash
#进入kafka目录
cd /opt/kafka_2.12-2.4.1/bin/
#注:此处我不用网上都用的--zookeeper而是用--bootstrap-server 不知是我部署的问题还是什么,就是用不起,但是--bootstrap-server就没问题。
#我是用./kafka-topics.sh -help查看了帮助文档,文档描述的是--zookeeper是已经DEPRECATED,建议不要使用
#创建topic(replication-factor 1 1个副本 --partitions 3 三个分区)
#副本数不能大于borker数量,此处我是单机,所以为1。分区可以多个,相当于多个队列的意思。
./kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic my-topic
#查看topic信息,如分区数,副本数,在线数
./kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-topic
#测试生产消息
./kafka-console-producer.sh --broker-list localhost:9092 --topic my-topic
#测试消费消息
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --from-beginning
#删除topic,一般不要删除
./kafka-topics.sh --delete --zookeeper 192.168.1.206:2181/my-kafka --topic my-topic
#删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录
kafka关键参数说明:
-e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
-e KAFKA_ZOOKEEPER_CONNECT=192.168.2.13:2181/my-kafka 配置zookeeper管理kafka的路径localhost:2181/my-kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.2.13:9092 把kafka的地址端口注册给zookeeper,如果是远程访问要改成外网IP,类如Java程序访问出现无法连接。
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
在原来的服务器中生成docker镜像
# 将指定镜像保存成 tar 归档文件。
docker save docker的镜像id > custom-mysql.tar
导入到需要安装的服务器
#导入使用 docker save 命令导出的镜像。
docker load < custom-mysql.tar
导入后查看是否成功
#查看docker镜像
docker images
#归属到某一仓库
docker tag docker的镜像id custom-mysql:5.7