Docker下软件的安装和配置
1、配置全局JDK环境
(1)通过yum命令下载jdk yum install java-1.8.0-openjdk* -y
(2)查看jdk环境是否已经自动配置成功
java -version 查看版本
javac 查看java环境变量
2、安装Docker
(1)通过 uname -r 命令查看你当前的内核版本是否支持安装docker uname -r
系统的内核版本高于 3.10即可
(2)通过yum命令下载docker
yum install docker
(3)启动、设置开启开机启动
sudo systemctl start docker
sudo systemctl enable docker
(4)验证安装是否成功
docker version
出现client和service两部分表示docker安装启动都成功了!!!
(5)修改docker仓库资源国内加速器
vim /etc/docker/daemon.json
在文件中加入
{
"registry-mirrors": ["https://hub.mirror.c.163.com"]
}
保存退出
停止docker服务 systemctl stop docker
启动docker服务 systemctl start docker
(6)docker操作镜像和容器命令
查看镜像 docker images
搜索镜像 docker search 镜像名/镜像名:TAG
拉取镜像 docker pull 镜像名
删除镜像 docker rmi 镜像ID
==================================================================================
查看容器 docker ps -a
制作容器 docker run -tid --name 新容器名称 -p 宿主机端口:容器端口 -v 宿主机目录:容器目录 镜像名 //镜像名为 REPOSITORY:TAG
进入容器 docker exec -it 运行的容器ID /bin/bash 退出用exit
启动容器 docker start 容器id
停止容器 docker stop 容器id
删除容器 docker rm 容器id
从主机复制到容器 sudo docker cp host_path containerID:container_path
从容器复制到主机 sudo docker cp containerID:container_path host_path
==================================================================================
出现容器停止如下图的情况
rm -rf 移除容器挂载在磁盘对应的文件即可;如mysql容器停止,删除容器,移除/usr/local/mysql8.5之后,重新运行容器就行
3、下载tomcat镜像
(1)搜索tomcat镜像(命令后面为镜像名)
docker search tomcat
(2)拉取镜像(命令后面为镜像名)
docker pull docker.io/tomcat
(3)制作并运行容器(命令后也可为镜像ID)
docker run -tid --name tomcat-8.5 -p 8080:8080 -v /usr/local/tomcat-8.5/webapps:/usr/local/tomcat/webapps docker.io/tomcat:latest
(4)若访问tomcat报404,执行以下命令,若无,跳过
docker exec -it 运行的容器ID /bin/bash
cd /usr/local/tomcat
cp -r webapps.dist/* ./webapps
(5)上传jenkins.war包到宿主机/usr/local/tomcat-8.5/webapps下,访问http://106.12.140.159:8080/jenkins界面如下
4、下载nginx镜像
(1)搜索nginx镜像(命令后面为镜像名)
docker search nginx
(2)拉取镜像(命令后面为镜像名)
docker pull docker.io/nginx
(3)制作并运行测试容器(命令后也可为镜像ID)
docker run -tid --name nginx-test -p 80:80 docker.io/nginx:latest
(4)利用测试容器生成挂载目录及文件
mkdir -p /usr/local/nginx-1.17/{conf/conf.d,logs}
docker cp nginx-test:/etc/nginx/nginx.conf /usr/local/nginx-1.17/conf/nginx.conf
docker cp nginx-test:/etc/nginx/conf.d/default.conf /usr/local/nginx-1.17/conf/conf.d/default.conf
docker cp nginx-test:/var/log/nginx /usr/local/nginx-1.17/logs
(5)停止并删除测试容器
docker stop nginx-test
docker rm nginx-test
(6)制作并运行容器(命令后也可为镜像ID)
docker run -tid --name nginx-1.17 -p 80:80 -v /usr/local/nginx-1.17/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx-1.17/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /usr/local/nginx-1.17/logs:/var/log/nginx docker.io/nginx:latest
(7)访问nginx页面
5、下载mysql镜像
(1)搜索mysql镜像(命令后面为镜像名) docker search mysql (2)拉取镜像(命令后面为镜像名) docker pull docker.io/mysql (3)制作并运行容器(命令后也可为镜像ID) docker run -tid --name mysql8.5 -p 3306:3306 -v /usr/local/mysql8.5/data:/var/lib/mysql -v /usr/local/mysql8.5/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=12345 docker.io/mysql:latest
(4)Mysql8以上版本密码加密方式改变,Navivat连接会出现2095错误,8以下版本直接跳过
docker exec -it mysql8.5 bash
mysql -u root -p
show databases;
use mysql;
#查看用户加密方式,将caching_sha2_password变为mysql_native_password即可
select host,user from user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345';
FLUSH PRIVILEGES;
(5)使用Navicat连接mysql数据库
6、下载oracle镜像
(1)搜索oracle镜像(命令后面为镜像名)
docker search oracle (2)拉取镜像(命令后面为镜像名) docker pull docker.io/wnameless/oracle-xe-11g-r2 (3)制作并运行容器(命令后也可为镜像ID) docker run -tid --name oracle-11 -p 1521:1521 -e ORACLE_ALLOW_REMOTE=true docker.io/wnameless/oracle-xe-11g-r2:latest (4)远程连接 (hostname: 49.233.32.242 port: 1521 sid: xe username: system password: oracle)
(5)在Navicat上选择System用户执行命令命令创建表空间和用户并授权
create tablespace clover_tablespace datafile '/u01/app/oracle/clover_local.dbf' size 100M;
create user clover identified by 12345 default tablespace clover_tablespace;
grant connect,RESOURCE,dba to clover;
(6)切换用户登陆Naviat
( hostname: 49.233.32.242 port: 1521 sid: xe username: clover password: 12345 )
7、下载redis镜像
(1)搜索redis镜像(命令后面为镜像名) docker search redis (2)拉取镜像(命令后面为镜像名) docker pull docker.io/redis
(3)容器启动
docker run -tid --name redis5.0 -p 6379:6379 redis
(4)进入redis容器
docker exec -it redis5.0 /bin/bash
(5)运行redis客户端
redis-cli
(6)设置redis的密码
config set requirepass 12345
(7)查看redis的密码
config get requirepass
(8)认证
auth 12345
(9)之后两次exit退出容器即可
(10)可视化工具连接
8、下载rabbitmq镜像
(1)搜索rabbitmq镜像(命令后面为镜像名,rabbitmq后不带management的启动后是无法打开管理界面的)
docker search rabbitmq:management
(2)拉取镜像(命令后面为镜像名)
docker pull rabbitmq:management
(3)制作并运行容器(命令后也可为镜像ID)
docker run -tid --name rabbitmq-3.8 -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /usr/local/rabbitmq-3.8/data:/var/lib/rabbitmq docker.io/rabbitmq:management
(4)输入106.12.140.159:15672,访问rabbitmq管理界面(默认账户密码都是guest)
(5)添加管理员账号及权限
docker exec -it 运行的容器ID /bin/bash
rabbitmqctl add_user admin 12345
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
exit
9、下载gitlab镜像
(1)搜索gitlab镜像(命令后面为镜像名) docker search gitlab (2)拉取镜像(命令后面为镜像名)
docker pull docker.io/gitlab/gitlab-ce (3)制作并运行容器(命令后也可为镜像ID)
docker run -tid --name gitlab-12.8 -p 7443:443 -p 7080:80 -p 7022:22 -v /usr/local/gitlab-12.8/config:/etc/gitlab -v /usr/local/gitlab-12.8/logs:/var/log/gitlab -v /usr/local/gitlab-12.8/data:/var/opt/gitlab docker.io/gitlab/gitlab-ce:latest
(4)配置gitlab.rb生成一个固定的项目的URL访问地址
gitlab.rb的文件内容都是隐藏的,可拉取后直接添加如下配置
vim /usr/local/gitlab-12.8/config/gitlab.rb
#配置http协议所使用的访问地址,不加端口号默认为80 external_url 'http://106.12.140.159' #配置ssh协议所使用的访问地址和端口 gitlab_rails['gitlab_ssh_host'] = '106.12.140.159' #此端口是run时22端口映射的7022端口 gitlab_rails['gitlab_shell_ssh_port'] = 7022
(5)重启gitlab(后面为容器ID)
docker restart 29871b5e712b
(6)若出现502报错,如端口未冲突,初次加载会出现502情况,等待几分钟刷新即可,如无,可跳过
(7)页面出现自动更改密码操作,更改密码即可
(8)输入root密码进入,创建项目
10、下载airflow镜像
(1)依赖环境准备
1.1 docker下安装配置mysql环境(查看下载mysql镜像)
通过docker拷贝修改容器内配置文件
从容器复制到主机: sudo docker cp b8a37430c9a9:/etc/mysql/my.cnf /usr/local/mysql8.5/conf
从主机复制到容器: sudo docker cp /usr/local/mysql8.5/conf/my.cnf b8a37430c9a9:/etc/mysql
修改my.cnf文件,以便正常连接,修改后需要重启mysql
vim /etc/mysql/my.cnf
explicit_defaults_for_timestamp=1
1.2 docker下安装redis环境(查看下载redis镜像)
(2)airflow镜像的拉取和配置
2.1 拉取镜像
docker pull puckel/docker-airflow
2.2 创建外挂文件夹
mkdir -p -v /usr/local/airflow-1.10.9/{dags,logs}
2.3 制作并运行容器
docker run -tid --name airflow-1.10.9 -p 8080:8080 puckel/docker-airflow
2.4 拷贝airflow.cfg到指定目录
docker cp $(docker ps -a | grep 'airflow-1.10.9' |awk '{print $1}'):/usr/local/airflow/airflow.cfg /usr/local/airflow-1.10.9
2.5 创建airflow用户和库,并添加权限
use mysql; create database airflow; alter database `airflow` character set utf8; create user 'airflow'@'%' identified by 'airflow'; create user 'airflow'@'local-ip' identified by 'airflow'; create user 'airflow'@'localhost' identified by 'airflow'; grant all on airflow.* to 'airflow'@'%'; alter user 'airflow'@'%' identified with mysql_native_password by 'airflow'; flush privileges;
2.6 修改airflow.cfg配置(之后放入本地备份)
# 设置执行策略、可选SequentialEXecutor(默认)、LocalExecutor(适合单机)、CeleryExecutor executor = CeleryExecutor # 数据库连接设置 sql_alchemy_conn = mysql://airflow:airflow@49.233.32.242:3306/airflow?charset=utf8 # 配置celery的broker_url(存储要执行的命令然后celery的worker去消费) broker_url = redis://49.233.32.242:6379/0
# broker_url = amqp://guest:guest@49.233.32.242:5672/ # 配置celery的result_backend (存储任务执行状态)、 也可以用redis存储 result_backend = db+mysql://airflow:airflow@49.233.32.242:3306/airflow?charset=utf8 #######以下可选择性调整######### # 时区设置 default_timezone = Asia/Shanghai # 界面使用的时区 default_ui_timezone = Asia/Shanghai # 是否加载案例demo load_examples = False #######以上可选择性调整#########
2.7 删除容器并重新运行容器
docker stop airflow-1.10.9 && docker rm airflow-1.10.9
rm -rf /usr/local/airflow-1.10.9
mkdir -p -v /usr/local/airflow-1.10.9/{dags,logs}
上传修改后的airflow.cfg 文件到/usr/local/airflow-1.10.9下
docker run -tid --name airflow-1.10.9 -p 8080:8080 -v=/usr/local/airflow-1.10.9/airflow.cfg:/usr/local/airflow/airflow.cfg -v=/usr/local/airflow-1.10.9/dags:/usr/local/airflow/dags puckel/docker-airflow webserver scheduler
2.8 初始化airflow数据到mysql数据库
docker exec -it airflow-1.10.9 /bin/bash
airflow initdb
出现airflow.exceptions.AirflowException: Could not create Fernet object: Incorrect padding
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
export AIRFLOW__CORE__FERNET_KEY=上一步执行的结果
重新 airflow initdb
(3)、启动成功后,即可正常访问
http://49.233.32.242:8080
(4)、部署DAG
将编写Dag的python文件上传到宿主机/usr/local/airflow-1.10.9/dags目录
重新执行2.6操作中的重新运行容器语句,页面访问查看效果
(5)、集群部署
主节点执行上述(1)(2)(3)(4)的操作,启动 webserver scheduler ( 启动webserver时会自动启动worker)
从节点和主节点使用相同的 airflow.cfg ,dags下存放相同的 dag文件 , 启动命令如下 :
docker run -tid --name airflow-1.10.9 -p 8080:8080 -v=/usr/local/airflow-1.10.9/airflow.cfg:/usr/local/airflow/airflow.cfg -v=/usr/local/airflow-1.10.9/dags:/usr/local/airflow/dags puckel/docker-airflow webserver
集群搭建后,同一dag中的tasks可在多台机器上运行
11、Docker下部署SpringBoot应用
(1)将SpringBoot项目打包生成war包/jar包 例如: SpringBoot_LogManage-0.0.1-SNAPSHOT.war (2)编写Dockerfile.txt,完成后去除后缀,变为Dockerfile
FROM java:8 ADD SpringBoot_LogManage-0.0.1-SNAPSHOT.war /SpringBoot_LogManage.war ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/SpringBoot_LogManage.war"]
(3) 将war包和Dockerfile上传到服务器/home/docker目录下
(4)构建镜像
cd /home/docker
docker build -t dragoncredit . #后面的点不能少,这里的dragonCredit是自定义的镜像名,必须都小写
(5)运行容器(命令后也可为镜像ID,文件映射位置为项目中已经配置的路径,与宿主机一致)
docker run -tid --name dragoncredit-1.0 -p 8888:8888 -v /home/logs:/home/logs dragoncredit:latest
(6)打开网页查看项目启动情况