首页 > 技术文章 > Docker下软件的安装和配置

liuyi-clover 2019-08-27 10:07 原文

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)打开网页查看项目启动情况

    

推荐阅读