docker总结,一套搞定,常用命令,项目部署,jar包打包成镜像/容器

docker 归总

一、学习路线

1、学习视频(黑马程序员)

(https://www.bilibili.com/video/BV1HP4118797/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=6acc7ed97919d92de048f2b1e5803427)

2、文档

安装文档:(https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d)

学习文档:(https://b11et3un53m.feishu.cn/wiki/MWQIw4Zvhil0I5ktPHwcoqZdnec)

二、安装

1.卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

2.配置Docker的yum库

首先要安装一个yum工具

yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装Docker

最后,执行命令,安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4.启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

5.配置镜像加速

具体命令如下:

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

请添加图片描述请添加图片描述

三、项目部署

1、创建网络

docker network create pxh

2、安装底座(MySQL、Redis)

(1)安装mysql
docker run -d \
  --name mysql \
  -p 3306:3306 \
  --log-opt max-size=10m \
  --log-opt max-file=50 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=pxh123456 \
  -v /docker/mysql/data:/var/lib/mysql \
  -v /docker/mysql/conf:/etc/mysql/conf.d \
  -v /docker/mysql/init:/docker-entrypoint-initdb.d \
  --network pxh \
  mysql:5.7.36

上面使用的MySQL是8的,如果需要5的版本,请改成:8.0.31

以上数据库的密码为pxh123456,如需变更,请修改

以上网桥为pxh,如需变更,请修改

挂载的配置文件: pan.cnf

[client]
#设置客户端默认字符集utf8mb4
default-character-set=utf8mb4
[mysql]
#设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
#配置服务器的服务号,具备日后需要集群做准备
server-id = 1
#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
log-bin=mysql-bin
#设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满
expire_logs_days=30
#解决MySQL8.0版本GROUP BY问题
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
#允许最大的连接数
max_connections=1000
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'
# 无需密码
# skip-grant-tables
(2) 安装redis
docker run \
--restart=always \
--log-opt max-size=10m \
--log-opt max-file=50 \
-p 6379:6379 \
--name redis \
-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf  \
-v /usr/local/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes
--requirepass pxh123456 

以上代码中不包含网络配置,如需网络配置,可以尝试添加

--network pxh \

如需设置redis密码:可以加入:

--requirepass pxh123456 

挂载的配置文件: redis.conf ,配置文件中包含密码设置

# Redis服务器配置 
 
# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1  
#bind 127.0.0.1  
 
# 服务器端口号  
port 6379 
 
#配置密码,不要可以删掉
requirepass pxh123456
  
 
 
#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no
 
#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /data/dockerData/redis/run/redis6379.pid  
 
#默认为no,redis持久化,可以改为yes
appendonly yes
 
 
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300
 
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
save 900 1
save 300 10
save 60 10000
 
# 按需求调整 Redis 线程数
tcp-backlog 511
 
 
# 设置数据库数量,这里设置为16个数据库  
databases 16
 
 
# 启用 AOF, AOF常规配置
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
 
 
# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128
 
 
# 是否记录系统日志,默认为yes  
syslog-enabled yes  
 
#指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice
  
# 日志输出文件,默认为stdout,也可以指定文件路径  
logfile stdout
 
# 日志文件
#logfile /var/log/redis/redis-server.log
 
 
# 系统内存调优参数   
# 按需求设置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

3、创建jar包镜像和容器

(1)配置启动文件 Dockerfile

​ 文件: Dockerfile

​ 文件内容:

# 基础镜像
FROM openjdk:17
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY ***.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

基础镜像可以选择相对应得Java版本,可以为:openjdk:8

***.jar 为你需要创建镜像得jar包名

启动配置文件名必须是: Dockerfile

配置文件和jar包放在同一个文件夹下。

请添加图片描述

(2)创建镜像
docker build -t jarsxweb-nacos .

jarsxweb-nacos 为你创建的镜像名称

执行这条命令之前先 cd 到你文件夹的目录下

(3)创建容器
docker run -d --name jarsxweb-nacos --network pxh \
-p 8016:8848 \
--log-opt max-size=100m \
--log-opt max-file=5 \
-v /docker/nacos/conf/application.properties:/root/nacos/conf/application.properties \
 jarsxweb-nacos

如有配置文件:application.properties nacos的配置文件:

注意修改数据库账号密码:

# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
spring.datasource.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=1
db.url.0=jdbc:mysql://mysql:3306/herefly-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=pxh123456
### The auth system to use, currently only 'nacos' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}


### The token expiration in seconds:
nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}

### The default token:
nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}

### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
# default current work dir
server.tomcat.basedir=
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false

nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

4、安装Nginx镜像和容器

docker run -d \
  --name nginx \
  -p 806:806 \
  -p 807:807 \
  --log-opt max-size=100m \
  --log-opt max-file=5 \
  -v /docker/nginx/html:/usr/share/nginx/html \
  -v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /docker/nginx/cert:/etc/nginx/cert \
  --network sxweb \
  nginx:1.24.0

cert : 域名配置文件

html: 项目路径

nginx.conf 配置文件 : nginx.conf

这里要注意因为在docker网桥中没有分配localhost和127.0.0.1,因此,在涉及到IP访问时,如需要访问本地,请使用容器名称

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    # 限制body大小
    client_max_body_size 100m;

    server {
        listen       806;

        # https配置参考 start
        #listen       443 ssl;

        # 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径
        #ssl on;
        #ssl_certificate      /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改
        #ssl_certificate_key  /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
        #ssl_session_timeout 5m;
        #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        #ssl_prefer_server_ciphers on;


        # 限制外网访问内网 actuator 相关路径 
        location ~ ^(/[^/]*)?/actuator(/.*)?$ {
            return 403;
        }
	
	# 前台
	# 页面
 	location /front {
            alias /usr/share/nginx/html/sxweb/front; # docker映射路径 不允许更改
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
	# 访问地址
 	location /api/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # websocket参数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass http://jarsxweb-gateway:8080/;
        }



	# 后台
	# 页面
        location / {
            root   /usr/share/nginx/html/sxweb/dist; # docker映射路径 不允许更改
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
	# 文件上传
	 location /proxy/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # websocket参数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass http://jarsxweb-gateway:8080/;
        }
	# 文件映射
 	location /resource/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # websocket参数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass http://jarsxweb-gateway:8080/resource/;
        }
	# 系统模块
 	 location /monitor/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # websocket参数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass http://jarsxweb-gateway:8080/monitor/;
        }
	# 内容管理模块
	 location /cms/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # websocket参数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass http://jarsxweb-gateway:8080/cms/;
        }
	# 系统模块
	 location /system/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # websocket参数
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass http://jarsxweb-gateway:8080/system/;
        }
	# 认证中心
	 location /auth/ {
            	proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		client_max_body_size 10m;
		client_body_buffer_size 128k;
		proxy_connect_timeout 20;
		proxy_send_timeout 30;
		proxy_read_timeout 30;
		proxy_buffer_size 4k;
		proxy_buffers 4 32k;
		proxy_busy_buffers_size 64k;
		proxy_temp_file_write_size 64k;
            	proxy_pass http://jarsxweb-gateway:8080/auth/;
        }

	

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

四、常用代码

1、网络

命令说明
docker network create 网络名创建一个网络
docker network ls查看所有网络
docker network rm 网络名删除指定网络
docker network prune清除未使用的网络
docker network connect 网络名 容器名使指定容器连接加入某网络
docker network disconnect 网络名 容器名使指定容器连接离开某网络
docker network inspect 网络名查看网络详细信息

2、创建mysql

docker run -d \
  --name mysql \
  -p 3307:3306 \
  --log-opt max-size=10m \
  --log-opt max-file=50 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=sx123456 \
  -v /docker/mysql/data:/var/lib/mysql \
  -v /docker/mysql/conf:/etc/mysql/conf.d \
  -v /docker/mysql/init:/docker-entrypoint-initdb.d \
  --network sxweb \
  mysql:5.7.36

修改密码:

修改挂载的.cnf文件,添加无密码模式

请添加图片描述

skip-grant-tables

重启MySQL服务

service mysql restart

接着就可以免密登录了:敲入

mysql -u root -p

修改密码

use mysql
update user set authentication_string=password("你的密码") where user="root"; 
flush privileges;

退出mysql,重启MySQL服务

quit
service mysql restart

3、创建redis

docker run \
--restart=always \
--log-opt max-size=100m \
--log-opt max-file=5 \
-p 16379:6379 \
--name redis \
-v /docker/redis/conf/redis.conf:/etc/redis/redis.conf  \
-v /docker/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes

4、镜像容器常用命令

命令说明
docker pull拉取镜像
docker images / dis查看本地镜像
docker rmi删除本地镜像
docker run创建并运行容器(不能重复创建)
docker stop停止指定容器
docker start启动指定容器
docker restart重新启动容器
docker rm删除指定容器
docker ps / dps查看容器
docker logs查看容器运行日志
docker exec -it 容器名 bash进入容器
docker save保存镜像到本地压缩文件
docker load加载本地压缩文件到镜像
docker inspect 容器名查看容器详细信息

5、docker启动、重启、关闭、开机自启

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# Docker容器开机自启
docker update --restart=always [容器名/容器id]

# 删除所有未使用的资源,包括未使用的镜像、容器、网络和数据卷
docker system prune -a

6、防火墙

#关闭防火墙命令:
systemctl stop firewalld

#查看防火墙状态
systemctl status firewalld

#查看所有永久开放的端口(默认为空)
firewall-cmd --list-ports --permanen

#在防火墙中,添加开放端口命令:
firewall-cmd --add-port=8888/tcp --permanent

#关闭永久端口
firewll-cmd --remove-port=80/tcp --permanent

#重载命令并重启防火墙以生效配置
firewall-cmd --reload
systemctl restart firewalld
  • 17
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值