1 安装MySQL
bash
# 查看MySQL镜像
docker search mysql
# 拉起镜像
docker pull mysql:5.7
# 创建MySQL数据映射卷,防止数据不丢失
mkdir -p /hmoe/tem/docker/mysql/data/
# 启动镜像
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /home/tem/docker/mysql/data/:/var/lib/mysql 镜像名称
-e 设置mysql 的登录密码。默认账号是root, -v是将容器中的数据映射本地,防止删除容器数据丢失, -p 外部3306端口映射到容器3306端口
mysl容器启动成功
mysql登录成功
2 mysql 主从读写分离
python
"""利用python脚本在docker上启动2个MySQL"""
import os
folderList = ['master', 'slave1']
localPath = os.path.dirname(os.path.abspath(__file__))
def create_config():
for index, folder in enumerate(folderList):
folder_path = os.path.join(localPath, folder)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
config_path = os.path.join(folder_path, 'conf')
if not os.path.exists(config_path):
os.makedirs(config_path)
data_path = os.path.join(folder_path, 'data')
if not os.path.exists(data_path):
os.makedirs(data_path)
config_data = """[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
log-error=/var/log/mysql/error.log
server-id={}
log-bin=/var/log/mysql/mysql-bin.log
expire_logs_days=30
max_binlog_size=256M
symbolic-links=0
# slow_query_log=ON
# slow_query_log_file=/var/log/mysql/slow.log
# long_query_time=1""".format(index+1)
config_file = os.path.join(config_path, 'mysqld.cnf')
with open(config_file, 'w') as f:
f.write(config_data)
def run_mysql():
for index, name in enumerate(folderList):
cmd = "docker run -d -p {0}:3306 --name=mysql_{1} " \
"-v {2}/{1}/conf:/etc/mysql/mysql.conf.d " \
"-v {2}/{1}/data:/var/lib/mysql " \
"-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7".format(4306+index, name, localPath)
os.system(cmd)
# print(cmd)
if __name__ == '__main__':
create_config()
run_mysql()
bash
# 先拉起mysql的镜像
docker pull mysql:5.7
# 在将上面的脚本复制到test.py的文件中, 执行脚本
python3 test.py
bash
#master, 进入容器中
docker exec -ti mysql_master bash
mysql -u root -p
grant replication slave on *.* to 'slave'@'%' identified by 'iamslave';
flush privileges;
show master status; #显示master上面的状态
#slave1
docker exec -ti mysql_slave1 bash
mysql -u root -p
reset slave;
change master to master_host='192.168.1.13', master_port=4306, master_user='slave', master_password='iamslave', master_log_file='mysql-bin.000003', master_log_pos=590;
start slave;
# master_host 为master的IP, master_port为master的端口,master_user为通信用户名,master_password为密码,master_log_file为master的bin日志,master_log_pos为master的log_pos
show slave status \G #查看状态如果Slave_IO_Running: Yes Slave_SQL_Running: Yes 则表示开启成功
3 安装ES+kibana
bash
# 安装ES
# 创建网络ES和kibana通信
docker network create es-net
mkdir -p /home/wuzhibin/docker/es/data
mkdir -p /home/wuzhibin/docker/es/plugins
# 启动容器
docker run -d --name es -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" -v /home/wuzhibin/docker/es/data:/usr/share/elasticsearch/data -v /home/wuzhibin/docker/es/plugins:/usr/share/elasticsearch/plugins --privileged --network es-net -p 9200:9200 -p 9300:9300 elasticsearch:7.12.1
# 如果启动报错,日志是映射没有权限的化, 在重新启动
chmod 777 -R /home/wuzhibin/docker/es
-
docker run -d: 这部分表示在后台运行容器。
-
--name es: 为容器指定一个名字,这里是 "es"。
-
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m": 设置 Java 虚拟机的参数,包括初始堆内存大小 (-Xms) 和最大堆内存大小 (-Xmx),这里都设置为 512MB。
-
-e "discovery.type=single-node": 设置 Elasticsearch 的节点发现机制为单节点,因为在这个配置中只有一个 Elasticsearch 实例。
-
-v es-data:/usr/share/elasticsearch/data: 将容器内 Elasticsearch 的数据目录挂载到宿主机的名为 "es-data" 的卷上,以便数据持久化。
-
-v es-plugins:/usr/share/elasticsearch/plugins: 类似上面,将容器内 Elasticsearch 的插件目录挂载到宿主机的名为 "es-plugins" 的卷上。
-
--privileged: 赋予容器一些特权,可能会有一些安全风险,需要慎用。
-
--network es-net: 将容器连接到名为 "es-net" 的网络上,目的是为了与其他容器进行通信。
-
-p 9200:9200 -p 9300:9300: 将容器内部的端口映射到宿主机上,这里分别是 Elasticsearch 的 HTTP REST API 端口(9200)和节点间通信的端口(9300)。
-
elasticsearch:7.12.1: 指定要运行的 Docker 镜像的名称和版本号,这里是 Elasticsearch 7.12.1 版本。
访问IP:9200 验证是否启动成功
bash
# 安装可视化工具kibana
# ELASTICSEARCH_HOSTS为上一个ES容器的ip
docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.1.113:9200 --network=es-net -p 5601:5601 kibana:7.12.1
访问kibana地址ip:5601
4 安装jekins
bash
#拉取jenkins镜像
docker pull jenkins/jenkins
# 查看镜像
docker images
# 创建保存容器数据的文件夹
mkdir -p /home/wuzhibin/docker/jenkin/data
#启动容器
docker run -u root -d -p 8000:8080 --name=jenkins -v /home/wuzhibin/docker/jenkins/data:/var/jenkins_home jenkins/jenkins
# 查看容器状态
docker ps
# 网页打开
ip:8000
# 进入容器,获取第一次登录密码
ip:8000访问jenkins的网址,第一次需要获取管理员的密钥
bash
# 进入容器
docker exec -ti jenkins bash
# 获取管理员的密钥
cat /var/jenkins_home/secrets/initialAdminPassword
# jenkin设置中可以更换插件地址,下载插件更快
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json # 更快
http://mirror.esuni.jp/jenkins/updates/update-center.json
5 安装rabbitmq
bash
# 下载镜像
docker pull rabbitmq:management
# 启动容器-e 设置账号为admin, 密码为admin, 这个镜像会直接安装rabbitmq+管理工具
docker run -di --hostname 0.0.0.0 --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 61613:61613 -p 1883:1883 rabbitmq:management
ip:15672 进入管理页面,账号密码为上面设置的账户和密码
6 安装redis
bash
# 下载镜像
docker pull redis
# 启动redis 容器 appendonly yes 表示开启持久化
docker run --name my-redis -d -p 6379:6379 -v /home/wuzhibin/docker/redis/data:/data redis redis-server /etc/redis/redis.conf --appendonly yes
7 安装管理docker工具
bash
# 拉起镜像
docker pull portainer/portainer
# 启动容器 privileged=True 设置特权模式,--restart=always 重启docker总是自启容器
docker run --name=portainer -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=True portainer/portainer
IP:8088 进入设置密码之后,选择连接本地的docker环境
进入之后可以看到运行的容器。这个工具可以很方便的管理docker不需要不需要记那么多docker命令,直接上去点点点。
8 docker 安装gitlab
GitHub是一个最大的同性交友网站,但是受限于需要梯子才能流畅访问(国内访问很慢),所以能否自己搭建一个私人的代码托管平台呢。
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。因此选择Git Lab来搭代码托管的私仓。
1. 启动镜像
bash
# 拉起汉化版本的gitlab
docker pull twang2218/gitlab-ce-zh
# 启动镜像
docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /home/wuzhibin/docker/gitlab/etc:/etc/gitlab -v /home/wuzhibin/docker/gitlab/log:/var/log/gitlab -v /home/wuzhibin/docker/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh
-d #后台运行,全称:detach
-p 8443:443 #将容器内部端口向外映射
-p 8090:80 #将容器内80端口映射至宿主机8090端口,这是访问gitlab的端口
-p 8022:22 #将容器内22端口映射至宿主机8022端口,这是访问ssh的端口
--restart always #容器自启动
--name gitlab #设置容器名称为gitlab
-v # 数据卷映射, 将容器中的日志数据和配置保到本地,数据持久化防止容器删除数据丢失
--privileged=true # 获取所有的权限
# 查看容器是否正常启动成功
docker ps
2. 修改配置文件
bash
# 进入容器
docker exec -it gitlab bash
# 修改gitlab.rb文件的配置
vim /etc/gitlab/gitlab.rb
bash
# 修改gitlab.yml的配置
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
3. 重启gitlab服务
bash
# 容器内重启
gitlab-ctl restart
# 退出容器
exit
3. GitLab是否能正常使用
IP:8089访问gitlab网站, 默认的账号为root,第一次进入需要修改密码, 进入可以正常使用