docker centos7容器中配置jar包运行的jdk8,pg,mongo,redis,nginx环境

1.拉取centos7镜像,并创建容器实例,
docker pull centos:7
docker run -itd -p 82:82 -p 5432:5432 -p 6379:6379 -p 27017:27017 --privileged -v /sys/fs/cgroup:/sys/fs/cgroup --name MyContainer  centos:7 /usr/sbin/init
#进入容器
docker exec -it MyContainer /bin/bash

​​docker run​: 运行一个容器
​​-itd​: 分别代表交互式,终端,和以守护进程模式运行容器
​​-p 82:82 -p 5432:5432 -p 6379:6379 -p 27017:27017​: 将容器内部的端口映射到宿主机上的对应端口
​​--privileged​: 赋予容器较高的权限
​​-v /sys/fs/cgroup:/sys/fs/cgroup​: 挂载宿主机的/sys/fs/cgroup目录到容器中,不然systemctl会报错
​​--name MyContainer​: 为容器指定名称为"MyContainer"
​​centos:7​: 使用centos:7镜像进行启动
​​/usr/sbin/init​: 在容器内运行/usr/sbin/init进程
**注:(docker容器启动后添加端口映射)**
首先停止docker服务 systemctl stop docker     systemctl stop docker.socket
1.获取配置文件路径
docker inspect 容器id | grep HostsPath
2.进入配置文件路径,修改hostconfig.json配置文件的PortBindings
3.修改config.v2.json配置文件的ExposedPorts和Ports

2.修改yum源
#更新yum
yum update
yum install vim
#修改root密码
yum install -y passwd openssh-server openssh-clients
passwd root
#备份
mv /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo.back 
vim /etc/yum.repos.d/CentOS-Base.repo

替换为下面:

[base]
name=CentOS-7 - Base - Alibaba Cloud
baseurl=http://mirrors.aliyun.com/centos/7/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-7 - Updates - Alibaba Cloud
baseurl=http://mirrors.aliyun.com/centos/7/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras - Aliyun Mirror
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-$releasever

[centosplus]
name=CentOS-$releasever - Plus - Aliyun Mirror
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-$releasever
vim /etc/yum.repos.d/CentOS-fasttrack.repo
[fasttrack]
name=CentOS-7 - fasttrack
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repp
oo
#=fasttrack&infra=$infra
baseurl=http://mirrors.aliyun.com/centos/7/os/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

清除缓存:

yum clean all
yum makecache
3.安装jdk8
cd /usr/local
yum install wget
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk-8u141-linux-x64.tar.gz 
mv jdk1.8.0_141/ jdk8
#修改环境变量
vim /etc/profile

export JAVA_HOME=/usr/local/jdk8
export JAVA_BIN=/usr/local/jdk8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

source /etc/profile
vim ~/.bashrc      
source /etc/profile   #这个要加,不然每次重启容器都要刷新环境变量
java -version  查看java版本
4.安装nginx
#下载依赖
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz
#在 nginx-1.12.0 文件夹下执行
cd nginx-1.12.0
./configure     #默认配置
make    #编译
make install
cd /usr/local/nginx/sbin
./nginx        #启动
ps -aux | grep nginx     #查看nginx是否启动
#配置环境变量
vim /etc/profile
在原有的PATH后面添加nginx的路径(:/usr/local/nginx/sbin)
export PATH=$PATH:$JAVA_HOME/bin:/usr/local/nginx/sbin
source /etc/profile
#修改PID位置
vim /usr/local/nginx/conf/nginx.conf
取消注释#pid logs/nginx.pid;
创建PID目录和文件
mkdir -p /usr/local/nginx/logs
touch /usr/local/nginx/logs/nginx.pid
#加入system开机自启动
vim /usr/lib/systemd/system/nginx.service

添加内容:


[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target
ps -ef | grep nginx    #kill掉进程,然后测试命令
systemctl enable nginx
systemctl daemon-reload
systemctl start nginx
5.安装postgres14.4
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql14-server
yum install postgresql-contrib  #默认插件包
yum install postgresql14-devel

#这里报错

Error: Package: postgresql14-devel-14.10-1PGDG.rhel7.x86_64 (pgdg14)
           Requires: llvm-toolset-7-clang >= 4.0.1
Error: Package: postgresql14-devel-14.10-1PGDG.rhel7.x86_64 (pgdg14)
           Requires: llvm5.0-devel >= 5.0
 #执行下面命令
 # llvm5.0-devel
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install llvm5.0-devel
# Install CentOS SCLo RH repository:
yum install centos-release-scl-rh
# llvm-toolset-7-clang
yum install llvm-toolset-7-clang 

yum install postgresql14-devel

#创建实例并添加开机自启

/usr/pgsql-14/bin/postgresql-14-setup initdb
systemctl enable postgresql-14
systemctl start postgresql-14

#安装完毕后,系统会在Linux的系统创建数据库超级用户 postgres,密码为空。登录会拒绝访问修改pg_hba.conf的文件以及postgresql.conf文件。
#bin 目录在/usr/pgsql-14/bin/ 的路径之下,里面包含了postgresql 的命令。
#pg_hba.conf 文件默认在/var/lib/psql/pg版本号/下。
#postgresql.conf文件默认在/var/lib/psql/pg版本号/下。

#先修改root密码
su root
passwd
vim /var/lib/psql/14/data/pg_hba.conf

为了实现外部远程访问,配置做如下修改:

[xander@localhost ~]$ sudo vim /var/lib/pgsql/14/data/pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

# llow all access to
host    all             all             0.0.0.0/0                scram-sha-256

修改 postgresql.conf 文件,把listen_addresses的注释放开,并且把内容修改为*

vim /var/lib/psql/14/data/postgresql.conf
# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;

修改postgres密码进行测试

su postgres
psql
ALTER USER postgres WITH PASSWORD  'postgres';

创建用户和库

CREATE USER testuser CREATEDB PASSWORD 'User123456';
create database test;
GRANT ALL PRIVILEGES ON DATABASE test TO testuser;

#安装插件
git上下载pg_bigm 插件

#上传到容器
docker cp pg_bigm-master.zip MyContainer:/home/app/
yum install unzip
yum install zip 
#解压文件并进入文件夹执行
make USE_PGXS=1 PG_CONFIG=/usr/pgsql-14/bin/pg_config
make USE_PGXS=1 PG_CONFIG=/usr/pgsql-14/bin/pg_config install
#进入数据库执行
create extension pg_bigm;
#创建索引
CREATE INDEX entityname_bigm_idx ON sys_directory_entity USING gin (entity_name gin_bigm_ops);
6.安装mongo5.0并开启单节点副本用于支持事务
vim /etc/yum.repos.d/mongodb-org-5.0.repo
#加入下面内容
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

启动:systemctl start mongod
重启:systemctl restart mongod
关闭:systemctl stop mongod
查看运行状态:systemctl status mongod

#启动可能遇到的问题,启动后出现或日志中出现 错误代码 code=14 则说明之前服务器上安装过Mongo 但是数据并没有完全清除

cd /tmp
rm -rf mongodb-27017.sock
systemctl restart mongod

#修改配置文件

vim /etc/mongod.conf
#将127.0.0.1改为0.0.0.0

#配置单节点副本
replication:
  replSetName: rs0
#保存配置文件后重启mongo
systemctl restart mongod
mongo
初始化副本集:
cfg={_id:"rs0",members:[ {_id:0,host:"localhost:27017"}] }
rs.initiate(cfg)
rs.conf()  #查看副本集配置
rs.status()  #查看副本集状态

#开启认证

vim /etc/mongod.conf
#添加security:
security:
  authorization: enabled

开启认证重启mongo后报错:

Dec 06 04:33:55 b27c61f72eef mongod[7086]: {"t":{"$date":"2023-12-06T04:33:55.329Z"},"s":"I",  "c":"CONTROL",  "id":7484500, "ctx":"-","msg":"Environment variable MONGODB_CONFIG_OVERRIDE_NOFORK == 1, overriding \"processManagement.fork\" to false"}
Dec 06 04:33:55 b27c61f72eef mongod[7086]: BadValue: security.keyFile is required when authorization is enabled with replica sets
Dec 06 04:33:55 b27c61f72eef mongod[7086]: try '/usr/bin/mongod --help' for more information

解决方案,添加keyfile:

mkdir -p /usr/local/mongo
openssl rand -base64 128 > /usr/local/mongo/keyFile
#keyFile文件的权限必须为600,如果权限太大,启动时会报“error opening file: /data/mongodb/keyFile: bad file”
cd /usr/local/mongo
chmod 600 keyFile
chown mongod keyFile   
vim /etc/mongod.conf
security:
  authorization: enabled
  keyFile: /usr/local/mongo/keyFile

#创建用户

#创建超级用户
mongo
use admin
db.createUser(
  {
    user: "root",
    pwd: "123456",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
#创建普通用户
use  test
db.createUser({user: "admin", pwd: "admin123", roles: [{role: "readWrite", db: "test" }]})
#测试连接
mongo --port 27017 -u "admin" --authenticationDatabase "test" -p

#卸载mongo

systemctl stop mongod   #停止服务
yum erase $(rpm -qa | grep mongodb-org)    #删除多有相关依赖
rm -rf /var/log/mongodb
rm -rf /var/lib/mongo

7.安装redis6.2.6
#安装gcc
yum install -y gcc tcl
cd /usr/local
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar -xzf redis-6.2.6.tar.gz
cd redis-6.2.6
make && make install

#修改配置让Redis以后台方式启动

cd /usr/local/redis-6.2.6
# 0.0.0.0则可以在任意IP访问
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes 
# 密码
requirepass 123456

#设置开机自启

vim /etc/systemd/system/redis.service
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis-6.2.6/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis

8.用到的命令
linux将 tar包压缩为tar.gz
tar -czvf file.tar.gz file
解压tar.gz
tar -xzvf file.tar.gz
// docker
#将容器打包成镜像
docker commit obm_centos7 obm_image
#将docker镜像打包
docker save -o my_image_v1.tar my_image:v1
#将镜像的tar包转为镜像
docker load -i /path/to/image.tar

// 修改时区(时区不对,有时候vim改jar包内容,能改但是不能保存)
timedatectl set-timezone Asia/Shanghai     
timedatectl

// commit 将容器打包成镜像,变得非常大
先进入要打包的容器,执行以下命令对根目录下的文件打包:
tar -cvf img.tar --exclude=/proc --exclude=/sys --exclude=img.tar /
然后将打包好的文件拷贝到宿主机下随便一个目录下:
sudo docker cp 容器ID:/img.tar .
最后生成新的镜像:
cat img.tar | sudo docker import - img
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leven.C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值