Contents

Docker项目安装记录集

:::tip 使用Dockerfile部署项目,docker安装不同软件 :::

部署java项目

创建Dockerfile

# 基础镜像是docker仓库的java:8(也就是jdk8的意思)
FROM java:8
#  作者签名
MAINTAINER xiaoxiang
#  简化 jar 的名字路径 (左边是服务器中jar包的路径,因为当前文件是和jar包同级,所以直接写名字即可,右边是镜像中要存放jar包的路径)
COPY test.jar /test.jar
# 设置时间
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#  执行 java -jar 命令 (CMD:在启动容器时才执行此行。RUN:构建镜像时就此行,后面的jar包路径就是上面要设置的jar包路径)
CMD java -jar /test.jar
#  设置对外端口为 8080
EXPOSE 8080

创建镜像

# 后面有个点,指定路径为当前路径的Dockerfile文件
docker build -t test .

运行jar包

  • -d代表后台运行
  • -p 8082:8082 端口映射,后一个8082是镜像的端口
  • -v 代表挂载一个宿主机目录到容器目录中,第一个是宿主机目录,第二个是容器目录
  • 第一个test/java代表是给容器的名字
  • 第二个test是上面创建镜像的名字
docker run -d -p 8080:8080 -v /opt/java:/opt/java --name test/java test

查看容器

docker ps -a

软件安装

安装Mysql

mkdir -p /opt/data/mysql/data
mkdir -p /opt/data/mysql/conf.d
docker run -di -p 3307:3306 -v /opt/data/mysql/conf.d:/etc/mysql/conf.d -v /opt/data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 --name mysql mysql

安装Redis

mkdir -p /opt/data/redis/data
mkdir -p /opt/data/redis/conf
vim /opt/data/redis/conf/redis.conf
docker run -d -p 6379:6379 --name redis  -v /opt/data/redis/redis.conf:/etc/redis/redis.conf  -v /opt/data/redis/data:/data redis redis-server /etc/redis/redis.conf --requirepass "密码"  --appendonly yes

redis.conf

protected-mode yes
port 6379
tcp-backlog 511
timeout 0
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass 密码
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

安装nginx

mkdir -p /opt/data/nginx/{conf,html,logs}
vim /usr/nginx/conf/nginx.conf
docker run --name nginx -d -p 80:80 -p 443:443 -v /opt/data/nginx/html:/usr/share/nginx/html:ro -v /opt/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro  -v /opt/data/nginx/conf.d:/etc/nginx/conf.d:ro -v /opt/data/nginx/logs:/var/log/nginx nginx

nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;


    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

安装nacos

使用挂载文件的方式

mkdir -p /opt/nacos/logs
mkdir -p /opt/nacos/conf
touch  /opt/nacos/conf/application.properties
docker run -d --name nacos \
-v /opt/nacos/conf/application.properties:/home/nacos/conf/application.properties \
-v /opt/nacos/conf/logs:/home/nacos/conf/logs \
-p 8848:8848 nacos/nacos-server

application.properties

server.servlet.contextPath=/nacos
server.port=8848
nacos.naming.empty-service.auto-clean=false
nacos.naming.empty-service.clean.initial-delay-ms=60000
nacos.naming.empty-service.clean.period-time-ms=20000
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
server.tomcat.basedir=
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.default.token.expire.seconds=18000
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.core.auth.caching.enabled=false
nacos.istio.mcp.server.enabled=false
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

安装elasticSearch

安装

docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

配置跨域和密码

# 进入容器
docker exec -it es /bin/bash
# 编辑文件
vi config/elasticsearch.yml
# 名称,保证唯一
cluster.name: es-1
# 为本机ip地址,docker中为0.0.0.0
network.host: 0.0.0.0
# 打开跨域,选填
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
# 开启安全认证,选填
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
# 重启镜像
docker restart es 
# 设置密码,进入bin目录
# 需要为4个用户分别设置密码:elastic、kibana、logstash_system、beats_system
cd /usr/local/kibana-7.6.2-linux-x86_64/bin && ./elasticsearch-setup-passwords interactive
# 浏览器查看
192.168.0.18:9200

安装中文分词 GitHub下载

# 下载后解压移动到/usr/share/elasticsearch/plugins,重启
docker cp elasticsearch-analysis-ik-7.8.0/ es:/usr/share/elasticsearch/plugins
docker restart es

安装Kibana

创建配置文件

server.name: kibana
server.host: "0"
# elasticSearch地址
elasticsearch.hosts: [ "http://127.0.0.1:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

#添加密码数据
elasticsearch.username: "elastic"
elasticsearch.password: "xxx"

安装

docker run -d --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kibana -p 5601:5601 -v /opt/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.4.1

# 浏览器查看
127.0.0.1:5601

安装Oracle11g

下载Oracle 11g R2安装包

# 创建目录
mkdir -p /opt/oracle/install/database

# 解压下载的文件
unzip -d linux.x64_11gR2_database_1of2.zip /opt/oracle/install/database
unzip -d linux.x64_11gR2_database_2of2.zip /opt/oracle/install/database
# 安装,安装过程很久,可能会卡在终端,可以新开一个终端查看是否安装完成
docker run --privileged --name oracle -p 1521:1521 -v /opt/oracle/install/database:/install docker.io/jaspeen/oracle-11g
# 进入容器
docker exec -it oracle11g /bin/bash
# 切换到oracle用户
su - oracle
# 进入数据库
sqlplus / as sysdba
-- 创建一个用户
create user username identified by password;

-- 给用户授权
grant create session,create table,create sequence,unlimited tablespace to username;

出现数据库不能连接错误

https://gitee.com/chen-zq/bgimages/raw/master/img/20201112195004.png

拷贝容器中的timezone文件到本地

# 第一个名字是容器和路径,第二个点代表拷贝到当前目录下
docker cp test/java:/etc/timezone .

修改

Etc/CST

放回原位

# 在文件所在的目录下拷贝到容器的 /etc/下
docker cp timezone 容器名称:/etc/

Docker访问宿主机

vim /etc/firewalld/zones/public.xml

添加

<rule family="ipv4">
  <source address="172.17.0.0/16" />
  <accept />
</rule>

重启防火墙

systemctl restart firewalld

Docker命令自动补全

yum install -y bash-completion

source /usr/share/bash-completion/bash_completion

source /usr/share/bash-completion/completions/docker

设置自启

设置自启动

docker update --restart=always 容器id

关闭自启动

docker update --restart=no 容器id

关闭所有自启动

docker update --restart=no $(docker ps -q)