1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r
2、使用 root
权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update
3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源
方法1,sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
方法2: wget https://download.docker.com/linux/centos/docker-ce.repo --no-check-certificate -P /etc/yum.repos.d/
方法3:下载好docker-ce.repo放入到/etc/yum.repos.d/目录下
6、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r
7、安装docker
$ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0 $ sudo yum install# 例如:sudo yum install docker-ce-17.12.0.ce
8、启动并加入开机启动
$ sudo systemctl start docker $ sudo systemctl enable docker
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version
1、因为之前已经安装过旧版本的docker,在安装的时候报错如下:
Transaction check error: file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64 file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64 file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64 file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
2、卸载旧版本的包
$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
3、再次安装docker
$ sudo yum install docker-ce
4,kafka.Dockerfile
FROM centos:6.6
ENV KAFKA_VERSION "1.0.0"
RUN mkdir /etc/yum.repos.d/backup &&\
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ &&\
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo &&\
sed -i "s/mirrors.aliyun.com/mirrors.aliyun.com/g" /etc/yum.repos.d/CentOS-Base.repo
RUN yum -y install nc vim lsof wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel pwgen python-pip
RUN mkdir /opt/java &&\
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz" -P /opt/java
RUN mkdir /opt/kafka &&\
wget http://apache.fayea.com/kafka/$KAFKA_VERSION/kafka_2.11-$KAFKA_VERSION.tgz -P /opt/kafka
RUN tar zxvf /opt/java/jdk-8u141-linux-x64.tar.gz -C /opt/java &&\
JAVA_HOME=/opt/java/jdk1.8.0_141 &&\
sed -i "/^PATH/i export JAVA_HOME=$JAVA_HOME" /root/.bash_profile &&\
sed -i "s%^PATH.*$%&:$JAVA_HOME/bin%g" /root/.bash_profile &&\
source /root/.bash_profile
RUN tar zxvf /opt/kafka/kafka*.tgz -C /opt/kafka &&\
sed -i 's/num.partitions.*$/num.partitions=3/g' /opt/kafka/kafka_2.11-$KAFKA_VERSION/config/server.properties
RUN echo "source /root/.bash_profile" > /opt/kafka/start.sh &&\
echo "cd /opt/kafka/kafka_2.11-"$KAFKA_VERSION >> /opt/kafka/start.sh &&\
#echo "sed -i 's%zookeeper.connect=.*$%zookeeper.connect=zookeeper:2181%g' /opt/kafka/kafka_2.11-"$KAFKA_VERSION"/config/server.properties" >> /opt/kafka/start.sh &&\
echo "[ ! -z $""ZOOKEEPER_CONNECT"" ] && sed -i 's%.*zookeeper.connect=.*$%zookeeper.connect='$""ZOOKEEPER_CONNECT'""%g' /opt/kafka/kafka_2.11-"$KAFKA_VERSION"/config/server.properties" >> /opt/kafka/start.sh &&\
echo "[ ! -z $""BROKER_ID"" ] && sed -i 's%broker.id=.*$%broker.id='$""BROKER_ID'""%g' /opt/kafka/kafka_2.11-"$KAFKA_VERSION"/config/server.properties" >> /opt/kafka/start.sh &&\
echo "[ ! -z $""BROKER_PORT"" ] && sed -i 's%port=.*$%port='$""BROKER_PORT'""%g' /opt/kafka/kafka_2.11-"$KAFKA_VERSION"/config/server.properties" >> /opt/kafka/start.sh &&\
echo "sed -i 's%#advertised.host.name=.*$%advertised.host.name='$""(hostname -i)'""%g' /opt/kafka/kafka_2.11-"$KAFKA_VERSION"/config/server.properties" >> /opt/kafka/start.sh &&\
echo "[ ! -z $""ADVERTISED_HOST_NAME"" ] && sed -i 's%.*advertised.host.name=.*$%advertised.host.name='$""ADVERTISED_HOST_NAME'""%g' /opt/kafka/kafka_2.11-"$KAFKA_VERSION"/config/server.properties" >> /opt/kafka/start.sh &&\
echo "sed -i 's%#host.name=.*$%host.name='$""(hostname -i)'""%g' /opt/kafka/kafka_2.11-"$KAFKA_VERSION"/config/server.properties" >> /opt/kafka/start.sh &&\
echo "[ ! -z $""HOST_NAME"" ] && sed -i 's%.*host.name=.*$%host.name='$""HOST_NAME'""%g' /opt/kafka/kafka_2.11-"$KAFKA_VERSION"/config/server.properties" >> /opt/kafka/start.sh &&\
echo "delete.topic.enable=true" >> /opt/kafka/kafka_2.11-$KAFKA_VERSION/config/server.properties &&\
echo "group.initial.rebalance.delay.ms=0" >> /opt/kafka/kafka_2.11-$KAFKA_VERSION/config/server.properties &&\
echo "bin/kafka-server-start.sh config/server.properties" >> /opt/kafka/start.sh &&\
chmod a+x /opt/kafka/start.sh
RUN yum install -y nc
EXPOSE 9092
WORKDIR /opt/kafka/kafka_2.11-$KAFKA_VERSION
ENTRYPOINT ["sh", "/opt/kafka/start.sh"]
5,zookeeper.Dockerfile
FROM centos:7
RUN yum -y install vim lsof wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel pwgen python-pip
RUN mkdir /opt/java &&\
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz" -P /opt/java
RUN tar zxvf /opt/java/jdk-8u141-linux-x64.tar.gz -C /opt/java &&\
JAVA_HOME=/opt/java/jdk1.8.0_141 &&\
sed -i "/^PATH/i export JAVA_HOME=$JAVA_HOME" /root/.bash_profile &&\
sed -i "s%^PATH.*$%&:$JAVA_HOME/bin%g" /root/.bash_profile &&\
source /root/.bash_profile
ENV ZOOKEEPER_VERSION "3.4.12"
RUN mkdir /opt/zookeeper &&\
wget http://mirror.olnevhost.net/pub/apache/zookeeper/zookeeper-$ZOOKEEPER_VERSION/zookeeper-$ZOOKEEPER_VERSION.tar.gz -P /opt/zookeeper
RUN tar zxvf /opt/zookeeper/zookeeper*.tar.gz -C /opt/zookeeper
RUN echo "source /root/.bash_profile" > /opt/zookeeper/start.sh &&\
echo "cp /opt/zookeeper/zookeeper-"$ZOOKEEPER_VERSION"/conf/zoo_sample.cfg /opt/zookeeper/zookeeper-"$ZOOKEEPER_VERSION"/conf/zoo.cfg" >> /opt/zookeeper/start.sh &&\
echo "/opt/zookeeper/zookeeper-$"ZOOKEEPER_VERSION"/bin/zkServer.sh start-foreground" >> /opt/zookeeper/start.sh
EXPOSE 2181
ENTRYPOINT ["sh", "/opt/zookeeper/start.sh"]
6,docker-compose.yml
version: '2'
services:
zookeeper0:
build:
context: .
dockerfile: zookeeper.Dockerfile
image: jason/zookeeper:3.4.6
container_name: zookeeper0
hostname: zookeeper0
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
expose:
- 2181
- 2888
- 3888
environment:
ZOOKEEPER_PORT: 2181
ZOOKEEPER_ID: 0
ZOOKEEPER_SERVERS: server.0=zookeeper0:2888:3888 server.1=zookeeper1:28881:38881 server.2=zookeeper2:28882:38882
zookeeper1:
build:
context: .
dockerfile: zookeeper.Dockerfile
image: jason/zookeeper:3.4.6
container_name: zookeeper1
hostname: zookeeper1
ports:
- "2182:2182"
- "28881:28881"
- "38881:38881"
expose:
- 2182
- 2888
- 3888
environment:
ZOOKEEPER_PORT: 2182
ZOOKEEPER_ID: 1
ZOOKEEPER_SERVERS: server.0=zookeeper0:2888:3888 server.1=zookeeper1:28881:38881 server.2=zookeeper2:28882:38882
# depends_on:
# - zookeeper0
zookeeper2:
build:
context: .
dockerfile: zookeeper.Dockerfile
image: jason/zookeeper:3.4.6
container_name: zookeeper2
hostname: zookeeper2
ports:
- "2183:2183"
- "28882:28882"
- "38882:38882"
expose:
- 2183
- 2888
- 3888
environment:
ZOOKEEPER_PORT: 2183
ZOOKEEPER_ID: 2
ZOOKEEPER_SERVERS: server.0=zookeeper0:2888:3888 server.1=zookeeper1:28881:38881 server.2=zookeeper2:28882:38882
# depends_on:
# - zookeeper1
kafka0:
build:
context: .
dockerfile: kafka.Dockerfile
image: jason/kafka:0.8.2.2
container_name: kafka0
hostname: kafka0
ports:
- "9092:9092"
environment:
ZOOKEEPER_CONNECT: zookeeper0:2181,zookeeper1:2182,zookeeper2:2183
BROKER_ID: 0
BROKER_PORT: 9092
ADVERTISED_HOST_NAME: kafka0
HOST_NAME: kafka0
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
expose:
- 9092
# links:
# - zookeeper
kafka1:
build:
context: .
dockerfile: kafka.Dockerfile
image: jason/kafka:0.8.2.2
container_name: kafka1
hostname: kafka1
ports:
- "9093:9093"
environment:
ZOOKEEPER_CONNECT: zookeeper0:2181,zookeeper1:2182,zookeeper2:2183
BROKER_ID: 1
BROKER_PORT: 9093
ADVERTISED_HOST_NAME: kafka1
HOST_NAME: kafka1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
expose:
- 9093
# links:
# - zookeeper
kafka2:
build: .
build:
context: .
dockerfile: kafka.Dockerfile
image: jason/kafka:0.8.2.2
container_name: kafka2
hostname: kafka2
ports:
- "9094:9094"
environment:
ZOOKEEPER_CONNECT: zookeeper0:2181,zookeeper1:2182,zookeeper2:2183
BROKER_ID: 2
BROKER_PORT: 9094
ADVERTISED_HOST_NAME: kafka2
HOST_NAME: kafka2
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
expose:
- 9094
# links:
# - zookeeper
将docker-compose.yml,zookeeper.Dockerfile,kafka.Dockerfile放入同一个文件夹中,运行
docker-compse up --build 命令即可