共计 7093 个字符,预计需要花费 18 分钟才能阅读完成。
Docker
Docker 装置
装置依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
· 设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
· 装置 Docker-CE
sudo yum install docker-ce
装置 docker-compose
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -version
GUI 治理
这里举荐应用 Portainer 作为容器的 GUI 治理计划。官网地址:https://portainer.io/install…. 装置命令:
docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
拜访你的 IP:9000 即可进入容器治理页面。
Docker 部署 SpringBoot 我的项目
Dockerfile
# 该镜像须要依赖的根底镜像
FROM java:8
# 将当前目录下的 jar 包复制到 docker 容器的 / 目录下
ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar
# 运行过程中创立一个 mall-tiny-docker-file.jar 文件
RUN bash -c 'touch /mall-tiny-docker-file.jar'
# 申明服务运行在 8080 端口
EXPOSE 8080
# 指定 docker 容器启动时运行 jar 包
ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
# 指定维护者的名字
MAINTAINER gyt
将利用 jar 包及 Dockerfile 文件上传到 linux 服务器
在 Linux 上构建 docker 镜像
在 Dockerfile 所在目录执行以下命令:
# -t 示意指定镜像仓库名称 / 镜像名称: 镜像标签 . 示意应用当前目录下的 Dockerfile
docker build -t springboot-study-eureka .
查看 docker 镜像:
docker images
列出容器:
docker ps -a
Docker 装置 Zookeeper
下载 Zookeeper 镜像:
docker pull zookeeper
启动容器并增加映射
docker run --privileged=true -d --name zookeeper --publish 2181:2181 -d zookeeper:latest
进入 zookeeper 目录:
docker exec -it d5c6f857cd88 bash
./bin/zkCli.sh
启动命令改成以交互是的形式运行镜像,用以 kafka 连贯
docker run --privileged=true -itd --name zookeeper --publish 2181:2181 -d zookeeper:latest
- t 让 docker 调配一个伪终端并绑定到容器的规范输出上, - i 则让容器的规范输出放弃关上
Docker 装置 kafka
docker pull kafka
报错:pull access denied for kafka, repository does not exist or may require ‘docker login’
docker search kafka
docker pull wurstmeister/kafka
启动 kafka:
docker run -d --name kafka -p 9092:9092 --link zookeeper -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=106.54.121.152:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://106.54.121.152:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
参数阐明:-e KAFKA_BROKER_ID=0 在 kafka 集群中,每个 kafka 都有一个 BROKER_ID 来辨别本人
-e KAFKA_ZOOKEEPER_CONNECT=172.16.0.13:2181/kafka 配置 zookeeper 治理 kafka 的门路 172.16.0.13:2181/kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13:9092 把 kafka 的地址端口注册给 zookeeper,如果是近程拜访要改成外网 IP, 类如 Java 程序拜访呈现无奈连贯。-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置 kafka 的监听端口
-v /etc/localtime:/etc/localtime 容器工夫同步虚拟机的工夫
启动失败
查看日志发现是内存不足:
docker logs 84ec00e2f6ab
决定应用 docker-compose 启动(装置参考前文)
编辑 docker-compose.yml:
vim docker-compose.yml
version: '2'
services:
zookeeper:
image: zookeeper ## 镜像
ports:
- "2181:2181" ## 对外裸露的端口号
kafka:
image: wurstmeister/kafka ## 镜像
volumes:
- /etc/localtime:/etc/localtime ## 挂载地位(kafka 镜像和宿主机器之间工夫放弃始终)ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 106.54.121.152 ## 批改: 宿主机 IP
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ## 卡夫卡运行是基于 zookeeper 的
KAFKA_ADVERTISED_PORT: 9092
KAFKA_LOG_RETENTION_HOURS: 120
KAFKA_MESSAGE_MAX_BYTES: 10000000
KAFKA_REPLICA_FETCH_MAX_BYTES: 10000000
KAFKA_GROUP_MAX_SESSION_TIMEOUT_MS: 60000
KAFKA_NUM_PARTITIONS: 3
KAFKA_DELETE_RETENTION_MS: 1000
KAFKA_HEAP_OPTS: "-Xmx512M -Xms512M"
kafka-manager:
image: sheepkiller/kafka-manager ## 镜像:开源的 web 治理 kafka 集群的界面
environment:
ZK_HOSTS: 106.54.121.152 ## 批改: 宿主机 IP
ports:
- "9001:9000" ## 裸露端口
外网拜访配置:
cd /opt/kafka_2.11-1.1.0/config
vi server.properties
advertised.listeners=PLAINTEXT://ip:9092
docker-compose.yml 脚本寄存门路下执行
docker-compose up -d
终于胜利了
装置 kafka-manager
docker pull sheepkiller/kafka-manager
通过 http://106.54.121.152:9001/ 拜访 kafkamanager
Docker 装置 jenkins
docker pull jenkins
# 创立目录
mkdir jenkins
# 启动命令(不须要挂载目录)docker run --name jenkins_study -p 8081:8080 -d jenkins
# 启动命令(须要挂载目录的)docker run -d --name jenkins_study -p 8081:8080 -v /usr/local/jenkins:/usr/local/jenkins jenkins
## 遇到很多坑后,挂载目录很重要,这样启动后就本地的容器中 /var/jenkins_home 目录下的内容就会存入本机的 /var/jenkins_home 下,明码也能够从这个目录下获取而不必进入容器外部。mkdir /var/jenkins_home
sudo chown -R 1000 /var/jenkins_home
docker run -d --name jenkins_study -p 9090:8080 -v /var/run/docker.sock:/var/run/docker.sock -v
/usr/bin/docker:/usr/bin/docker -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro -v /usr/local/jdk/jdk1.8.0_212/bin/java:/usr/local/jdk/jdk1.8.0_212/bin/java -v /usr/local/jdk/jdk1.8.0_212:/usr/local/jdk/jdk1.8.0_212 -v /usr/local/maven:/usr/local/maven -v /var/jenkins_home:/var/jenkins_home -v /usr/local/jenkins:/usr/local/jenkins -v /var/jenkins_home:/var/jenkins_home jenkins/jenkins
运行容器 / 实例,须要思考到本地端口与 docker 容器的映射,以便通过本地主机能够拜访。因为容器自身并不会长久化文件,其实 docker 不倡议在容器中进行任何文件无关的写入操作,仅仅当作一个“容器”应用。如果容器利用运行过程中会产生许多重要的数据须要保留或配置,如 mysql 的 db 文件,jenkins 的插件、配置文件等,则倡议将容器的文件挂载到本地,也即 volume 映射。
查看 Jenkins 服务
docker ps | grep jenkins
拜访 http://106.54.121.152:8081/
进入容器外部
docker exec -it jenkins_study bash
执行 cat /var/jenkins_home/secrets/initialAdminPassword
失去明码并粘贴过来
新建用户 admin/admin
进入后发现插件无奈装置
Docker 形式装置的 Jenkins 版本。解决因 Jenkins 版本过低,而无奈装置插件
下载 Jenkins 的最新 war 包
cd /usr/local/jenkins/
wget http://mirrors.jenkins.io/war/latest/jenkins.war
以 root 用户进入容器
docker exec -it -u root jenkins_study bash
查看容器中 jenkins war 包的地位,并备份原来的 war 包
whereis jenkins
cd /usr/share/jenkins
cp jenkins.war jenkinsBAK.war
将 /usr/local/jenkins/ 下的包 cp 到 /usr/share/jenkins 下笼罩
cp /usr/local/jenkins/jenkins.war /usr/share/jenkins/
退出容器并重启
docker restart jenkins_study
重启后,显示启动胜利,然而就是网页上无法访问
查看 jenkins 的日志
docker logs -f jenkins_study
https://yq.aliyun.com/article…
Docker 私服
docker pull registry
> docker run -d \
-p 5000:5000 \
-v /usr/local/registry:/var/lib/registry \
--restart=always \
--name registry \
registry:latest
将镜像推到私服
将主机的 registry 镜像命名为合乎仓库要求 registry_url:port/ImageName:tag 的格局:
docker tag springboot-study-eureka:latest 106.54.121.152:5000/springboot-study-eureka:latest
docker push 106.54.121.152:5000/springboot-study-eureka
这是因为咱们启动的 registry 服务不是平安可信赖的。这时须要 批改客户端 docker 的配置 文件 /etc/docker/daemon.json,增加上面的内容(registry 服务地址):
{"registry-mirrors": [ "https://pee6w651.mirror.aliyuncs.com"],"insecure-registries": ["106.54.121.152:5000"]
}
“registry-mirrors”: [“https://pee6w651.mirror.aliyuncs.com”] 是阿里云代理的 Registry Hub 仓库的地址,能够放慢国内拜访 Registry Hub 仓库的速度。
systemctl restart docker
重启 docker
再次执行 push 操作,会看到上面后果
浏览器拜访 http://106.54.121.152:5000/v2/_catalog
Docker 装置 nginx
docker pull nginx
sudo docker run --name nginx-test -p 8081:80 -d nginx
在 docker 中部署 nginx
创立如下文件:
mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf
拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 能够查看 docker ps 命令输出中的第一列:
sudo docker cp container_id:/etc/nginx/nginx.conf ~/nginx/conf
sudo docker run -d -p 80:80 --name nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx
Docker 装置 consul
docker pull consul
# 冀望容器中的配置文件、数据、日志再容器异样敞开或被动删除后保留,则须要配置挂载
# 容器对应配置文件门路都是从 https://hub.docker.com/_/cons…
mkdir -p /data/consul/{conf,data}
这条语句有效
docker run --name consul -p 8599:8500 -v /data/consul/conf/:/consul/conf/ -v /data/consul/data/:/consul/data/ -d consul
这条语句可行
docker run --name consul -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect=1 -ui -bind=0.0.0.0 -client=0.0.0.0
–net=host docker 参数, 使得 docker 容器越过了 netnamespace 的隔离,免去手动指定端口映射的步骤
-server consul 反对以 server 或 client 的模式运行, server 是服务发现模块的外围, client 次要用于转发申请
-advertise 将本机公有 IP 传递到 consul
-bootstrap-expect 指定 consul 将期待几个节点连通,成为一个残缺的集群
-retry-join 指定要退出的 consul 节点地址,失败会重试, 可屡次指定不同的地址
-client consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS、RPC 等服务,默认是 127.0.0.1
-bind 该地址用来在集群外部的通信,集群内的所有节点到地址都必须是可达的,默认是 0.0.0.0
-allow_stale 设置为 true, 表明能够从 consul 集群的任一 server 节点获取 dns 信息, false 则表明每次申请都会通过 consul server leader
--name DOCKER 容器的名称
-client 0.0.0.0 示意任何地址能够拜访。-ui 提供图形化的界面。