文章目录
1. 安装 Docker
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
本文介绍 Docker CE 的安装使用。
卸载旧版本。较旧版本的Docker被称为docker或docker-engine。如果已安装这些,请卸载它们以及相关的依赖项。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
使用以下命令设置稳定存储库。这里使用阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
使用存储库安装。在新主机上首次安装Docker Engine - Community之前,需要设置Docker存储库。之后,可以从存储库安装和更新Docker。
设置存储库,安装所需的包。yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序。
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
更新 yum 缓存:
sudo yum makecache fast
安装 Docker-ce:
sudo yum -y install docker-ce
启动 Docker CE
sudo systemctl enable docker
sudo systemctl start docker
测试运行 hello-world
docker run hello-world
设置镜像加速,在 /etc/docker/daemon.json 中写入如下内容,如果文件不存在请新建该文件。
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"http://hub-mirror.c.163.com"
]
}
重新启动服务。
sudo systemctl daemon-reload
sudo systemctl restart docker
2. 安装 Registry
registry是镜像仓库,用于存储和分发Docker镜像
docker run -d \
--name registry \
-p 5000:5000 \
--restart=always \
-v /mnt/docker/registry:/var/lib/registry \
registry:2
--restart=always
,随docker一起自动启动或关闭
-v /mnt/docker/registry:/var/lib/registry
,自定义存储位置,将registry容器内/var/lib/registry文件夹挂载到/mnt/docker/registry下。
registry 使用
将拉取下来的mysql镜像上传到本地registry
拉取mysql镜像
docker pull mysql:5.7.27
标记镜像,将mysql:5.7.27标记为localhost:5000/mysql-5.7.27
docker image tag mysql:5.7.27 localhost:5000/mysql-5.7.27
上传镜像到仓库
docker push localhost:5000/mysql-5.7.27
进入到仓库容器中,查看镜像仓库;查看挂载的文件夹,同步了
docker exec -it registry /bin/sh
删除本地缓存mysql:5.7.27和localhost:5000/mysql:5.7.27的镜像,这不会将localhost:5000/mysql:5.7.27从registry中删除,再测试从registry中拉取。
docker image remove mysql:5.7.27
docker image remove localhost:5000/mysql-5.7.27
从本地仓库中拉取镜像
docker pull localhost:5000/mysql-5.7.27
要停止仓库,请使用docker container stop与任何其他容器相同的命令。
docker container stop registry
要删除容器,请使用docker container rm。
docker container stop registry && docker container rm -v registry
3. 安装 Portainer
Portainer是一个轻量级管理UI,可轻松管理Docker主机或Swarm集群,可以在任何Docker引擎上运行的单个容器组成,允许您管理Docker堆栈,容器,映像,卷,网络等等!它与独立的Docker引擎和 Docker Swarm兼容。
在独立的linux docker主机/单节点安装
docker run -d \
--name portainer \
-p 8000:8000 -p 9000:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer
portainer_data 是数据卷volumes,不存在的话docker会自动创建在/var/lib/docker/volumes下
访问 http://ip:9000
4. 安装 MySQL
未自定义挂载
下面命令没有设置自定义挂载,会自动挂载在Docker生成的随机名称下。
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7.27
自定义挂载
使用自定义 MySQL 配置文件
挂载/etc/mysql/my.cnf时要注意,它是文件,所以需要先在挂载的地方创建该文件,才能挂载,否则会报错
创建文件夹后再创建文件
mkdir -p /mnt/docker/mysql/conf
touch /mnt/docker/mysql/conf/my.cnf
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
docker run -d \
--name mysql-5.7.27 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-v /mnt/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v mysql_data:/var/lib/mysql \
mysql:5.7.27
用户名root,密码root
开启binlog
修改挂载出来的my.cnf文件
[mysqld]
server-id = 1
log-bin = /var/lib/mysql/logs/mysql-bin
binlog_format = row
expire-logs-days = 7
max-binlog-size = 500M
/var/lib/mysql/
为容器内路径,上面挂载到了mysql_data中,在Portainer中找到mysql_data的具体路径,创建logs文件夹,并在logs文件夹下创建mysql-bin.index文件。
时间不一致
Linux时间正确,时区没问题,但是MySQL的时间少了八个小时。
在my.cnf的[mysqld]添加。如果表中有存时间戳类型的字段,时间也会相应的改变,所以提前保证MySQL时间正确!
default-time-zone = '+08:00'
5 安装记录
5.1 安装 Zookeeper,Kafka
Kafka配置zookeeper地址和内外网监听地址
docker run -d \
--name zookeeper \
-p 2181:2181 -t \
wurstmeister/zookeeper
docker run -d --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.110.40:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.110.40:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
wurstmeister/kafka
5.2 安装 PostgreSQL
docker run -d \
--name postgres-9.6 \
-p 5432:5432 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=postgres \
postgres:9.6
5.3 安装 FTP
mkdir -p /usr/local/downloads/ftp
docker run -d \
--name vsftpd \
-p 20:20 \
-p 21:21 \
-p 21100-21110:21100-21110 \
-e FTP_USER=admin \
-e FTP_PASS=admin \
-e PASV_ADDRESS=192.168.110.40 \
-e PASV_MIN_PORT=21100 \
-e PASV_MAX_PORT=21110 \
-v /usr/local/downloads/ftp:/home/vsftpd \
--restart=always \
fauria/vsftpd
挂载/home/vsftpd到/usr/local/downloads/ftp
安装完后默认会在/usr/local/downloads/ftp创建指定用户的文件夹,上传下载文件都在admin文件夹下
5.4 安装 Redis
使用自定义 Redis 配置文件,官网下载 redis.conf并修改
# 不限制ip访问
bind 0.0.0.0
# 关闭保护模式
protected-mode no
# 设置密码
requirepass redis
# 开启aof
appendonly yes
docker run \
-p 6379:6379 \
--name redis \
-v /mnt/docker/redis/redis.conf:/etc/redis/redis.conf \
-v redis_data:/data \
-d redis redis-server /etc/redis/redis.conf
5.5 安装 Prometheus
创建prometheus.yml文件
# 全局配置,单独配置会覆盖
global:
# 多久收集一次数据
scrape_interval: 15s
# 每次收集数据的超时时间
scrape_timeout: 10s
# 多久评估一次规则
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: []
scheme: http
timeout: 10s
api_version: v1
# 收集数据配置
scrape_configs:
- job_name: prometheus
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- localhost:9090
docker安装
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /usr/local/softwares/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:latest
访问 ip:9090/metrics ,这是Prometheus产生的数据,可在 ip:9090 中查看
5.6 安装 Grafana
创建grafana文件夹,设置权限
mkdir grafana
chmod 777 grafana
Docker 安装
docker run -d \
--name=grafana \
-p 3000:3000 \
-v /usr/local/softwares/grafana:/var/lib/grafana \
grafana/grafana:latest
访问 ip:3000 账号密码admin,admin
添加Data Sources
可在官方和社区构建的仪表板中查找已配置好的Dashboard
再导入
5.7 安装 ElasticSearch
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
elasticsearch:7.13.2
5.8 安装 Kibana
docker run -d \
--name kibana \
-p 5601:5601 \
--link elasticsearch:elasticsearch \
kibana:7.13.2
5.9 安装 Zipkin
docker run -d \
--name zipkin \
-p 9411:9411 \
openzipkin/zipkin
5.10 安装RabbitMQ
docker run -d \
--name rabbitmq \
-p 15672:15672 \
-p 5672:5672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
rabbitmq:management
6. 错误总结
1.docker: Error response from daemon: driver failed programming external connectivity on endpoint
解决方法:
docker服务启动时定义的自定义链DOCKER由于某种原因被清掉,重启docker服务及可重新生成自定义链DOCKER
systemctl restart docker
2.Centos7 终端报Message from syslogd :kernel:unregister_netdevice
关闭syslog
service rsyslog stop
关闭rsylog服务之后,终端打字就不会受到影响了,如果还要看日志信息,可以使用journalctl -f
来进行查看。
7. 使用记录
将文件从计算节点复制到容器
docker cp FILE_PATH 容器ID:FILE_PATH
将文件从容器复制到计算节点
docker cp 容器ID:FILE_PATH FILE_PATH
参考:
Docker — 从入门到实践
Get Docker Engine - Community for CentOS
docker registry文档
hub.docker.com
portainer.io
Docker 命令大全
Docker常用命令
使用docker安装mysql,挂载外部配置和数据
docker 安装kafka
docker hub fauria / vsftpd
docker安装redis并以配置文件方式启动
Centos7 终端报Message from syslogd :kernel:unregister_netdevice
linux和mysql时间不同步解决
Prometheus 官方文档-配置详情
开源监控系统Prometheus配置说明
基于docker 搭建Prometheus+Grafana
【监控】Prometheus+Grafana监控简介
Grafana 官方和社区构建的仪表板