Docker安装开发环境
目录
Docker
Docker 安装 Mysql
- Docker 查看可用Mysql镜像(推荐使用mysql5.7)
# docker安装mysql
$ docker search mysql:5.7
- mysql配置
$ vi /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
- Docker mysql目录挂载&启动mysql
# docker启动mysql
$ docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=root \
--restart=always \
-d mysql:5.7
参数说明
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf/my.cnf:/etc/my.cnf:将配置文件挂载到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
- 设置防火墙
# 允许3306端口 通过防火墙
$ firewall-cmd --permanent --zone=public --add-port=3306/tcp
# 重新加载防火墙
$ firewall-cmd --reload
- Docker 自启动镜像
# 重启主机Mysql也会自动启动
$ docker update mysql --restart=always
Docker 安装 Redis
- Docker 查看可用Redis镜像
# pull最新redis版本
$ docker search redis
- 创建统一外部配置目录 & redis.conf 配置文件
# 创建目录
$ mkdir -p /mydata/redis/{conf,data}
# 创建 redis.confi 配置文件
# redis.conf 配置文件的内容自定下载, 使用官方的配置文件
# redis.conf 配置文件中的 daemonize 一定要设置为no, 否则会出现 `STATUS` 为 `Exited (0) 2 minutes ago` 的信息
$ touch /mydata/redis/conf/redis.conf
......
daemonize no # 是否以守护进程运行, 设置为no
bind 0.0.0.0 # 允许任何人访问
requirepass 123456 # 设置登录密码
- Docker redis目录挂载&启动redis
# 启动 redis 容器
$ docker run -p 6379:6379 --name redis \
--privileged=true \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis:7.0.11-alpine redis-server /etc/redis/redis.conf
# 参数说明
##--privileged=true: 容器内的root拥有真正root权限, 否则容器内root只是外部普通用户权限;
##-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf: 映射配置文件;
##-v /mydata/redis/data:/data: 映射数据目录;
##redis-server /etc/redis/redis.conf: 指定配置文件启动redis-server进程
# 查看映射是否成功
$ pwd
/mydata/redis/conf
# Redis开启持久化
$ vi redis.conf
......
appendonly yes
- 设置防火墙
# 允许6379端口 通过防火墙
$ firewall-cmd --permanent --zone=public --add-port=6379/tcp
# 重新加载防火墙
$ firewall-cmd --reload
- Redis测试
# 进入redis容器
# -a 123456: 指定 redis 密码
$ docker exec -it redis2 redis-cli -a 123456
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> exit
Docker 安装 Zookeeper
- Docker 推荐使用zookeeper(推荐使用zookeeper3.4.11)
# docker安装zookeeper
$ docker pull zookeeper:3.4.11
- Docker 启动zookeeper3
# 启动zookeeper
$ docker run --name zookeeper -p 2181:2181 --restart always -d zookeeper:3.4.11
# 使用docker ps 查看启动是否成功
$ docker ps
- 设置防火墙
# 允许2181端口 通过防火墙
$ firewall-cmd --permanent --zone=public --add-port=2181/tcp
# 重新加载防火墙
$ firewall-cmd --reload
Docker 安装 Nginx
- Docker pull nginx
# 创建nginx目录
$ cd /mydata/
$ mkdir nginx
# pull nginx
$ docker pull nginx:1.10
- Docker 获取conf配置文件
# 启动nginx
$ docker run -p 80:80 --name nginx -d nginx:1.10
# 使用docker ps 查看启动是否成功
$ docker ps
# 将容器内的配置文件拷贝到当前conf目录
$ docker container cp nginx:/etc/nginx ./conf
# 将容器内的html文件拷贝到当前html目录
$ docker container cp nginx:/usr/share/nginx/html ./html
# 将容器内的html文件拷贝到当前logs目录
$ docker container cp nginx:/var/log/nginx ./logs
# 停止nginx
$ docker stop nginx
# 删除nginx
$ docker rm nginx
- Docker 启动nginx
# 启动nginx
$ docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10
- Docker 删除nginx
# 停止nginx
$ docker stop nginx
# 删除nginx
$ docker rm nginx
- 设置nginx
# 设置启动nginx
$ docker update nginx --restart=always
Docker 安装 Postgres
- Docker pull postgres
# 创建pgsql目录
$ cd /data
$ mkdir /data/pgsql
# 创建pgsql数据目录
$ cd /data
$ mkdir /data/pgsql/data
# pull postgres
$ docker pull postgres:latest
-
Docker 获取conf配置文件
将容器里面文件拷贝到宿主机
# 启动pgsql
$ docker run --name pgsql -e POSTGRES_PASSWORD=postgres -p 5432:5432 -v /data/pgsql/data:/var/lib/postgresql/data --restart always -d postgres
# 使用docker ps 查看启动是否成功
$ docker ps
# 将容器内的pg_hba.conf、postgresql.conf配置文件拷贝到当前目录
$ docker cp pgsql:/var/lib/postgresql/data/pg_hba.conf /opt/
$ docker cp pgsql:/var/lib/postgresql/data/postgresql.conf /opt/
- 修改conf配置文件
# 修改pg_hba.conf文件,pg_hba.conf文件末尾添加 host all all 0.0.0.0/0 password
$ vi /opt/pg_hba.conf
host all all 0.0.0.0/0 password
# 修改postgresql.conf文件把端口注释去掉
$ vi /etc/postgresql.conf
port=5432
- 将配置文件复制到容器内
# 复制pg_hba.conf配置文件到容器中
$ docker cp /opt/pg_hba.conf pgsql:/var/lib/postgresql/data/pg_hba.conf
# 复制postgresql.conf配置文件到容器中
$ docker cp /opt/postgresql.conf pgsql:/var/lib/postgresql/data/postgresql.conf
- 设置防火墙
# 允许5432端口 通过防火墙
$ firewall-cmd --permanent --zone=public --add-port=5432/tcp
# 重新加载防火墙
$ firewall-cmd --reload
- 设置开机启动
$ docker update --restart=always pgsql
Docker 安装 Jenkins
- 拉取 Jenkins 镜像
# 查询镜像
$ docker search jenkins
# pull jenkins/jenkins:lts
$ docker pull jenkins/jenkins:lts
# 查看镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins/jenkins lts 2a4bbe50c40b 7 months ago 441MB
- 创建挂载目录
# 创建挂载文件夹
$ mkdir -p /data/jenkins_home
# 文件权限授予
$ chmod 777 /data/jenkins_home
- 启动容器
$ docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /data/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins:lts
# 参数说明
-d 后台运行容器,并返回容器ID;
-uroot 使用 root 身份进入容器,推荐加上避免容器内执行某些命令时报权限错误;
-p 9095:8080: 将容器内8080端口映射至宿主机9095端口,该端口访问jenkins的端口;
-p 50000:50000: 将容器内50000端口映射至宿主机50000端口;
--name jenkins: 设置容器名称为jenkins;
-v /data/jenkins_home:/var/jenkins_home: var/jenkins_home目录为容器jenkins工作目录,将硬盘上的目录挂载到该位置,方便后续更新镜像后继续使用原来的工作目录;
-v /etc/localtime:/etc/localtime: 宿主机和容器时间同步,让容器使用和服务器同样的时间设置;
jenkins/jenkins:lts: 镜像的名称,这里也可以写镜像ID;
- 查看 Jenkins 登录密码
# 日志查看
$ docker logs Jenkins容器名字
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
f6231fc3255f43e3847e8ef32ee3440a
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
# exec命令行查看
$ docker exec Jenkins容器名字 cat /var/jenkins_home/secrets/initialAdminPassword
f6231fc3255f43e3847e8ef32ee3440a
- 修改源地址
# 进入jenkins_hoome目录
$ cd /data/jenkins_home/
# 查看源地址
$ cat hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url>
</site>
</sites>
# 换源
$ vi hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
# 重启容器
$ docker restart jenkins
- 访问Jenkins
$ curl http://192.168.188.188:9095/
......
Authentication required
......
- 安装 Jenkins 插件
$ docker exec -it jenkins sh
# 安装 gitlab 插件
# jenkins 提供了 plugins.sh 文件来进行安装插件
e28b67$ install-plugins.sh gitlab-plugin
Docker 安装 ElasticSearch&Kibana
# 存储和检索数据
docker pull elasticsearch:7.4.2
# 可视化检索数据
docker pull kibana:7.4.2
至少保证内存可用量为300+,越多越好
# 查看可用内存大小
free -m
ElasticSearch 安装
- 运行 ElasticSearch 容器
# 创建elasticsarch的config
mkdir -p /mydata/elasticsearch/config
# 创建elasticsarch的data
mkdir -p /mydata/elasticsearch/data
# 配置elasticsearch.yml
# 注: 'host:'中 ':'后跟着空格
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
# 设置elasticsearch目录权限
chmod -R 777 /mydata/elasticsearch/
# 启动elasticsearch
# 特别注意:-e ES_JAVA_OPTS="-Xms64m -Xmx256m" 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了 ES
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
# 当 Docker 重启时,容器能自动启动
docker update elasticsearch --restart=always
docker restart elasticsearch
- 访问 ElasticSearch
# 查看虚拟机ip
ip addr
# 访问 ip:9200
192.168.188.128:9200
Kibana 安装
- 运行 Kibana 容器
# 启动kibana
# ELASTICSEARCH_HOSTS 一定改为自己虚拟机的地址
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.188.128:9200 -p 5601:5601 \
-d kibana:7.4.2
# 当 Docker 重启时,容器能自动启动
docker update kibana --restart=always
docker restart kibana
- 访问 Kibana 容器
# 查看虚拟机ip
ip addr
# 访问 ip:5601
192.168.188.128:5601
参考文档
参考文档1: 点我传送 - mysql
参考文档2: 点我传送 - redis
参考文档3: 点我传送 - zookeeper
参考文档4: 点我传送 - nginx
参考文档5: 点我传送 - Postgres
参考文档6: 点我传送 - Jenkins
参考文档7: 点我传送 - ElasticSearch
参考文档8: 点我传送 - Kibana