使用Docker搭建新服务器应用


说明:第一次使用docker,要求在两台新服务器上搭建应用,做下记录,有问题欢迎指出。因内网环境,所有操作均为离线安装。 以下为AMD服务器搭建步骤,ARM服务器搭建略有不同

第一台服务器版本为华为欧拉,内核为AMD-X86,如下:
服务器版本
第二台服务器版本为麒麟V10,内核为ARM-64,如下:
在这里插入图片描述
注意:在线使用docker pull的时候对于AMD64架构的系统,通常不需要指定标签,因为AMD64是Docker默认的架构。其他架构例 docker pull ubuntu:arm64

1、Docker安装

1、下载Docker
https://download.docker.com/linux/static/stable
选择自己对应版本的安装包
下载后将安装包复制到服务器内
2、执行以下命令

#解压 
	tar -zxvf docker-20.10.18.tgz
#将解压目录赋权限
	chmod +x docker/*
#将二进制文件拷贝到/usr/bin/
	cp docker/* /usr/bin/
#注册到系统服务
	vi /etc/systemd/system/docker.service

3、docker.service内容如下

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
#运行 /usr/bin/dockerd 可执行文件,指定指定 Docker 的根目录
ExecStart=/usr/bin/dockerd --graph /data/docker/lib 
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
asksMax=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target

4、继续执行以下命令

#重载系统配置
	systemctl daemon-reload
#启动服务
	systemctl start docker
#检查
	systemctl status docker
#重启 Docker 服务
	sudo systemctl restart docker
#设置开启自启
	systemctl enable docker.service

在这里插入图片描述

至此,docker安装完成

2、构建centos自定义镜像

说明:因离线环境且构建JDK镜像需要基础镜像,所以需手动下载centos后构建为自定义的基础镜像。如果是ARM服务器则需要下载ubuntu镜像,CentOS 官方并没有直接提供支持 ARM64 架构的 Docker 镜像,Ubuntu 提供了支持 ARM64 架构的 Docker 镜像

1、下载centos的docker镜像包
是docker的镜像包!!!
下载地址找不到了。。。
2、编写Dockerfile文件,内容如下

FROM scratch
ADD centos-7-docker.tar.xz  /
CMD ["/bin/sh"]

在这里插入图片描述

3、构建镜像
在当前目录执行

docker build -t centos:7 .

4、查看镜像
在这里插入图片描述
说明:该镜像无需启动,仅作为基础镜像用于构建jdk镜像,当jdk镜像完成后该镜像可以随时删除,并不影响基于centos镜像构建完成的jdk镜像。 这是因为 Docker 镜像是分层存储的,每个镜像都是由多个层组成。当构建一个新镜像时,Docker 会创建一个新的层叠在基础镜像之上,而不会修改基础镜像本身。 删除基础镜像后,Docker 仍然保留着新镜像的所有层,因此新镜像可以独立于基础镜像存在和运行。
至此,centos镜像制作完成

3、构建JDK自定义镜像

1、下载jdk
官网:https://www.oracle.com/java/technologies/downloads/#license-lightbox
2、编写Dockerfile,内容如下

FROM centos:7

MAINTAINER qgw

WORKDIR /opt/openjdk

ADD jdk-8u161-linux-x64.tar.gz /opt/openjdk

ENV JAVA_HOME=/opt/openjdk/jdk1.8.0_161
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

VOLUME /tmp

注意:选择自己构建的centos基础镜像
在这里插入图片描述
在这里插入图片描述
3、构建镜像
在当前目录执行

docker build -t jdk:1.8  .

4、运行镜像
以特权模式运行容器:

docker run -di --privileged --restart=always  --name jdk  jdk:1.8

在这里插入图片描述

命令说明
-d:表示以分离模式运行容器,即在后台运行容器,并输出容器的 ID
-i:表示以交互模式运行容器,即使没有连接终端,也保持容器的 STDIN 打开
–privileged:以特权模式运行容器
–restart=always:开启自启
–name jdk1.8:容器名
jdk:1.8:选择版本为1.8的jdk镜像
5、进入容器内查看java版本

#查看日志
docker logs -f jdk
#进入容器
docker exec -it jdk bash
docker exec -it jdk /bin/sh
java -version

在这里插入图片描述
至此,jdk镜像制作完成

4、安装mysql镜像

1、下载mysql镜像
2、加载镜像

docker load -i mysql-amd64.tar.gz

3、预启动镜像

#启动镜像
 docker run -p 3306:3306 --name  mysql -e MYSQL_ROOT_PASSWORD=PasswOrd@1206 -d mysql:latest
 #查看是否启动成功

在这里插入图片描述
4、正式启动镜像
①创建挂载目录
②复制容器内的配置文件至宿主机器进行挂载
③删除刚启动的容器
④正式启动容器
在这里插入图片描述
至此,mysql镜像安装完成

5、安装nacos镜像

注意:安装nacos之前需先安装mysql,nacos基于mysql数据库运行
1、下载nacos镜像
2、加载镜像

docker load -i nacos-server-2.1.1-slim-arm.tar

在这里插入图片描述
3、预启动镜像
重命名镜像
在这里插入图片描述

#启动镜像
docker run --privileged --name nacos -d -p 8848:8848 -e MODE=standalone  nacos:2.1.1
#查看是否启动成功
docker ps

在这里插入图片描述

4、复制容器内的配置文件到宿主机
在这里插入图片描述
5、执行conf目录下的sql脚本创建库表
在这里插入图片描述
注意:每个版本的sql脚本名称可能不同,运行sql脚本时可能报错,我这边sql脚本无法执行,所以去网上重新下载了一个脚本
6、修改application.properties配置文件
我的修改内容如下
在这里插入图片描述
在这里插入图片描述
7、重新启动
在这里插入图片描述
8、访问http://ip:port/nacos

账号:root
密码:root
在这里插入图片描述
至此,nacos镜像安装完成

6、安装postgreSQL镜像

1、下载镜像
2、加载镜像
在这里插入图片描述

3、预启动镜像

docker run --privileged --name pgsql -e POSTGRES_PASSWORD=PasswOrd@1206  -p 5432:5432 -d postgres:latest

在这里插入图片描述

4、复制配置文件至宿主机

docker cp pgsql:/var/lib/postgresql/data /opt/docker/postgreSql/

5、启动镜像

#先删除刚才启动的镜像
docker rm -f pgsql
#启动镜像
docker run --privileged --name pgsql -e POSTGRES_PASSWORD=PasswOrd@1206  -p 5432:5432 -v /opt/postgres/data:/var/lib/postgresql/data -d postgres:latest

在这里插入图片描述
6、测试连接
使用navicat登录
用户名:postgres
密码:自己启动时设置的密码
端口:5432

至此,pgsql镜像安装完成

7、安装nginx镜像

1、下载镜像
2、加载镜像

docker load -i nginx-1.21.4-aarch64.tar

在这里插入图片描述

3、预运行镜像

docker run --privileged --name nginx -p 9001:80 -d nginx:1.21.4

在这里插入图片描述

4、复制容器内的配置文件至宿主机

docker cp nginx:/etc/nginx/nginx.conf /opt/docker/nginx/conf/
docker cp nginx:/etc/nginx/conf.d /opt/docker/nginx/conf/
docker cp nginx:/usr/share/nginx/html /opt/docker/nginx/

在这里插入图片描述

5、启动镜像

#停止并删除原容器
docker rm -f nginx
#创建并启动新容器
docker run \
--privileged \
-p 9002:80 \
--name nginx \
-v /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/docker/nginx/logs:/var/log/nginx \
-v /opt/docker/nginx/html:/usr/share/nginx/html \
-d nginx:1.21.4

在这里插入图片描述
6、测试连接
访问:http://ip:9002/
在这里插入图片描述
至此,nginx镜像安装完成

8、安装redis镜像

1、下载镜像
2、加载镜像

docker load -i redis-arm64.tar.gz

在这里插入图片描述

3、创建redis配置文件

vi redis.conf

配置信息如下:

#redis服务器配置 
 
# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1  
#bind 127.0.0.1  
 
# 服务器端口号  
port 6379 
 
#配置密码,不要可以删掉
requirepass PasswOrd@1206
 
#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no
 
#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /opt/docker/redis/logs/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

4、启动容器
注意挂载目录创建
在这里插入图片描述

docker run \
-d \
--privileged \
--restart=always \
-p 6379:6379 \
--name redis \
-v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/docker/redis/data:/data \
-v /opt/docker/redis/logs:/var/log/redis \
redis:latest redis-server /etc/redis/redis.conf

在这里插入图片描述

5、测试连接
密码为redis.conf中配置的密码
在这里插入图片描述

至此,redis镜像安装完成

9、使用docker-compose

说明:将以上服务重新使用docker-compose部署,在启动前需要删除原容器
1、下载地址
https://github.com/docker/compose/releases
2、安装
执行以下命令

#复制到该目录并重命名
cp docker-compose-linux-aarch64 /usr/local/bin/docker-compose
#添加权限
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose -v

在这里插入图片描述
2、新建docker-compose.yml

vi docker-compose.yml

3、配置与docker run命令相对应,内容如下:

version: "1.1.1"
services:
 mysql-service:
    image: mysql:latest
    restart: always
    container_name: mysql
    security_opt:
      - seccomp:unconfined
    ports:
      - 3306:3306
    volumes:
      - /opt/docker/mysql/logs:/var/log/mysql
      - /opt/docker/mysql/data:/var/lib/mysql
      - /opt/docker/mysql/conf:/etc/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      MYSQL_ROOT_PASSWORD: PasswOrd@1206

 nacos-service:
    image: nacos:2.1.1
    restart: always
    container_name: nacos
    security_opt:
      - seccomp:unconfined
    ports:
      - 8848:8848
    depends_on:
      - mysql-service
    volumes:
      - /opt/docker/nacos/conf:/home/nacos/conf
      - /opt/docker/nacos/logs:/home/nacos/logs
      - /opt/docker/nacos/data:/home/nacos/data
    environment:
      MODE: standalone
      NACOS_AUTH_ENABLE: true

 pgsql-service:
    image: postgres:latest
    restart: always
    container_name: pgsql
    security_opt:
      - seccomp:unconfined
    ports:
      - 5432:5432
    volumes:
      - /opt/postgres/data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: PasswOrd@1206

 nginx-service:
    image: nginx:1.21.4
    restart: always
    container_name: nginx
    security_opt:
      - seccomp:unconfined
    ports:
      - 9002:80
    volumes:
      - /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d
      - /opt/docker/nginx/logs:/var/log/nginx
      - /opt/docker/nginx/html:/usr/share/nginx/html

 redis-service:
    image: redis:latest
    restart: always
    container_name: redis
    command: redis-server /etc/redis/redis.conf
    privileged: true
    ports:
      - 6379:6379
    volumes:
      - /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf
      - /opt/docker/redis/data:/data
      - /opt/docker/redis/logs:/var/log/redis

4、创建并启动
#创建并启动所有服务
docker-compose -f docker-compose.yml up -d
#启动单个服务
docker-compose up mysql-service -d
#暂停并删除所有服务
docker-compose -f docker-compose.yml down

10、经常遇到的问题

1、启动提示无权限

docker run -di --restart=always  --name jdk  jdk:1.8

遇到问题,提示无权限
在这里插入图片描述
解决:
以特权模式运行容器:

docker run -di --privileged --restart=always  --name jdk  jdk:1.8

2、启动容器提示该容器已存在
在这里插入图片描述
解决:
只要你执行docker run命令不管成不成功都会生成容器,再次执行时会报错,需使用docker rm -f 删除该容器重新启动

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值