从安装docker到完成环境搭建,最后上线服务,一步完成

前言

从安装docker到docker中拉取jdk,nginx,redis,mysql镜像,并完成容器搭建部署。并完成对项目的部署上线 本人服务器用的阿里的,环境是CentOS7.6系统

一、docker的安装

①首先使用yum工具去拉取一些相关的工具包(ps:如果没有服务器很干净没有yum的话自己去百度搜一下吧,一般linux服务器都会带有yum工具的)
sh 复制代码
# 拉取 yum-utils管理工具,用他提供的 yum-config-manager 工具
sudo yum install -y yum-utils
②然后,建立稳定仓库,执行以下命令:
sh 复制代码
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

需要注意的是,在建立稳定仓库时,可能会出现以下报错:

sh 复制代码
1   [Errno 14] curl#35 - TCP connection reset by peer
2   [Errno 12] curl#35 - Timeout

其中主要原因是因为,docker 服务器在国外,国内访问时可能会因为网络连接问题超时等待。

这时,只需要换成国内的镜像就可以了,例如阿里云镜像:

sh 复制代码
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

之后,更新 yum 软件包索引,执行以下命令

复制代码
yum makecache fast

这样做是为了在安装软件包的时候,生成索引缓存,提高安装速度。

③安装最新版的 docker-engine(新版本换了个叫法,称为 docker-ce) 和 docker-container,执行以下命令:
sh 复制代码
sudo yum install docker-ce docker-ce-cli containerd.io

如果想要安装指定版本的 docker-engine,可以先查询当前仓库中可以获取的版本,进行选择并安装,执行以下命令:

sh 复制代码
yum list docker-ce --showduplicates | sort -r

版本号从高到低列出:

sh 复制代码
docker-ce.x86_64               3:20.10.9-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.8-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.7-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.6-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.5-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.4-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.3-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.2-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.14-3.el8                docker-ce-stable 
docker-ce.x86_64               3:20.10.14-3.el8                docker-ce-stable
docker-ce.x86_64               3:20.10.1-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:20.10.13-3.el8                docker-ce-stable 
docker-ce.x86_64               3:20.10.12-3.el8                docker-ce-stable 
docker-ce.x86_64               3:20.10.11-3.el8                docker-ce-stable 
docker-ce.x86_64               3:20.10.10-3.el8                docker-ce-stable 
docker-ce.x86_64               3:20.10.0-3.el8                 docker-ce-stable 
docker-ce.x86_64               3:19.03.15-3.el8                docker-ce-stable 
docker-ce.x86_64               3:19.03.14-3.el8                docker-ce-stable 
docker-ce.x86_64               3:19.03.13-3.el8                docker-ce-stable

通过完全限定的包名安装特定的版本,包名(docker-ce)加上版本字符串(第二列),从第一个冒号(:)开始,直到第一个连字符(-)分隔

sh 复制代码
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

例如,安装 docker-ce-19.03.13 版本,执行以下命令:

sh 复制代码
sudo yum install docker-ce-19.03.13 docker-ce-cli-19.03.13 containerd.io
④安装完成之后,执行以下命令启动 docker:
sh 复制代码
sudo systemctl start docker
⑤设置开机自启动
sh 复制代码
sudo systemctl enable docker 
⑥测试是否正确安装了 docker-ce,查看版本:
sh 复制代码
docker -v

二、 安装jdk

①查找docker的openjdk镜像
sh 复制代码
docker search openjdk

查找后会显示以下信息

sh 复制代码
[root@iZwz9a7h0wpv09u64ucwt2Z /]# docker search openjdk
NAME                            DESCRIPTION                                     STARS     OFFICIAL
openjdk                         Pre-release / non-production builds of OpenJ...   3878      [OK]
eclipse-temurin                 Official Images for OpenJDK binaries built b...   523       [OK]
sapmachine                      Official SapMachine Docker Image, SAP's buil...   48        [OK]
ibm-semeru-runtimes             IBM Semeru Runtimes Official Images for Open...   41        [OK]
cimg/openjdk                    The CircleCI OpenJDK (Java) Docker Convenien...   8         
adoptopenjdk/openjdk11          Docker Images for OpenJDK Version 11 binarie...   228       
adoptopenjdk/openjdk8           Docker Images for OpenJDK Version 8 binaries...   142       
adoptopenjdk/openjdk14          Docker Images for OpenJDK Version 14 binarie...   11        
adoptopenjdk/openjdk16          Docker Images for OpenJDK Version 16 binarie...   18        
adoptopenjdk/openjdk11-openj9   Docker Images for Eclipse OpenJ9 Version 11 ...   56        
adoptopenjdk/openjdk15          Docker Images for OpenJDK Version 15 binarie...   10        
adoptopenjdk/openjdk8-openj9    Docker Images for Eclipse OpenJ9 Version 8 b...   53        
adoptopenjdk/openjdk13          Docker Images for OpenJDK Version 13 binarie...   12        
adoptopenjdk/openjdk12          Docker Images for OpenJDK Version 12 binarie...   17        
adoptopenjdk/openjdk15-openj9   Docker Images for Eclipse OpenJ9 Version 15 ...   2         
adoptopenjdk/openjdk16-openj9   Docker Images for Eclipse OpenJ9 Version 16 ...   2         
adoptopenjdk/openjdk14-openj9   Docker Images for Eclipse OpenJ9 Version 14 ...   1         
adoptopenjdk/openjdk10          Docker Images for OpenJDK Version 10 binarie...   3         
adoptopenjdk/openjdk13-openj9   Docker Images for Eclipse OpenJ9 Version 13 ...   2         
adoptopenjdk/openjdk9           Docker Images for OpenJDK Version 9 binaries...   3         
adoptopenjdk/openjdk12-openj9   Docker Images for Eclipse OpenJ9 Version 12 ...   4         
clearlinux/openjdk              OpenJDK implementation of the Java Platform ...   3         
adoptopenjdk/openjdk9-openj9    Docker Images for Eclipse OpenJ9 Version 9 b...   3         
adoptopenjdk/openjdk10-openj9   Docker Images for Eclipse OpenJ9 Version 10 ...   4         
noenv/openjdk                   OpenJDK Docker Image                            1 
②选择需要的版本,使用docker pull 拉取镜像
sh 复制代码
[root@iZwz9a7h0wpv09u64ucwt2Z /]# docker pull openjdk
8: Pulling from library/openjdk
001c52e26ad5: Pull complete 
d9d4b9b6e964: Pull complete 
2068746827ec: Pull complete 
9daef329d350: Pull complete 
d85151f15b66: Pull complete 
52a8c426d30b: Pull complete 
8754a66e0050: Pull complete 

查看对应的镜像 docker images

sh 复制代码
[root@iZwz9a7h0wpv09u64ucwt2Z /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
openjdk      latest         b273004037cc   19 months ago   526MB
③编写dockerfile文件
sh 复制代码
# FROM上跟jdk的名字,冒号后面是TAG的名字
FROM openjdk:latest

#RUN 镜像构建的时候需要运行的命令
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#ADD [文件位置(ps:当前文件夹下面就不用加斜杠)] [镜像内的别名]
ADD blogs-serve-0.0.1-SNAPSHOT.jar blogsserve.jar

#EXPOSE 端口
EXPOSE 8000

#ENTRYPOINT 可追加的启动命令
ENTRYPOINT ["java", "-jar","blogsserve.jar"]

其他dockerfile的属性

sh 复制代码
FROM 			# 基础镜像,一切从这里开始构建
MINTAINER		# 镜像是谁写的,姓名+邮箱
LABEL			# 现在推荐写 LABEL,代替上面的那个
RUN		        # 镜像构建的时候需要运行的命令
ADD			# 步骤:如果要加一个tomcat镜像,就是加这个tomcat压缩包!1、添加内 2、添加同目录
WORKDIR			# 镜像的工作目录
VOLUME			# 挂载的目录
EXPOSE			# 保留的端口配置
CMD			# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT		# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD			# 当构建一个被继承的DockerFile 时,这时就会运行ONBUILD的指令,触发别的指令。
COPY			# 类似ADD,将我们的文件拷贝到镜像中
ENV			# 构建的时候设置环境变量
④打包jar镜像,并启动容器
sh 复制代码
打包镜像,使用镜像里的别名
docker build -t blogsserve:1.0 .
创建启动容器
docker run -d --name=blogsserve blogsserve:1.0

容器已经创建过的话,使用docker ps -a 查找创建的容器名

sh 复制代码
docker ps -a
CONTAINER ID   IMAGE            COMMAND                  CREATED             STATUS                      PORTS     NAMES
20710d1335f6   blogsserve:1.0   "java -jar blogsserv..."   42 minutes ago      Exited (1) 42 minutes ago             blogsserve
8c0e4cd8580f   openjdk:latest   "jshell"                 About an hour ago   Up About an hour                      openjdk

然后再用docker start [NAMES(容器名)]

sh 复制代码
docker start blogsserve
blogsserve

三、安装mysql

①首先拉取mysql镜像
sh 复制代码
#直接拉取最新的,如果要带版本就 mysql:@版本号
docker pull mysql 
②然后在docker 中创建对应的数据盘
sh 复制代码
docker volume create mysql-data #存放数据的
docker volume create mysql-config #存放配置的
docker volume create mysql-log #存放日志的
③创建mysql容器
sh 复制代码
docker run -id --name=mysql -v mysql-config:/etc/mysql/conf.d -v mysql-log:/logs -v mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e LANG=C.UTF-8 mysql

这其中的配置信息是:

  • -id 将MySQL容器挂在后台运行

  • --name=mysql 将容器起名为mysql,大家可以自己起名,该参数可以省略

  • -v mysql-config:/etc/mysql/conf.d 把MySQL容器中的配置文件目录挂载至上述创建的名为mysql-config的数据卷上面,还有两个-v挂载数据卷的参数同理

  • -p 3306:3306 把容器的3306端口映射到宿主机的3306端口,这样才能从外网访问这台机器上的MySQL,若你的数据库只需要从本机访问,就可以去除这个参数

  • -e MYSQL_ROOT_PASSWORD=123456 设置容器环境变量MYSQL_ROOT_PASSWORD的值为123456,这个环境变量表示MySQL的root用户的密码,一定要设置,这里设置了密码为123456,大家可以自定义

  • -e LANG=C.UTF-8 设置容器的语言环境变量LANG值为C.UTF-8,这个必须要设置,否则容器内默认是英文环境,使得MySQL无法存放中文内容

这样容器就配置好了。

④如果需要修改配置文件
arduino 复制代码
首先使用命令:`docker volume inspect mysql-config`查看数据卷`mysql-config`的位置:
sh 复制代码
# Mountpoint 就是mysql-config的位置
 docker volume inspect mysql-config
[
 {
     "CreatedAt": "2024-03-18T11:25:07+08:00",
     "Driver": "local",
     "Labels": null,
     "Mountpoint": "/var/lib/docker/volumes/mysql-config/_data",
     "Name": "mysql-config",
     "Options": null,
     "Scope": "local"
 }
]

然后进入该文件下修改mysql.cnf文件,修改文之后再用docker restart mysql 重启mysql服务就行了

####### ⑤允许数据可以远程连接,以及配置用户

使用docker exec -it mysql bash命令进入mysql容器

sh 复制代码
docker exec -it mysql bash
bash-4.4#

出现bash#就代表成功了,然后在使用mysql -u root -p就可以连接数据可以了

sh 复制代码
mysql -u root -p

进入mysql之后使用,use mysql;获取用户表信息

sql 复制代码
use mysql;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

然后再查询用户表

sql 复制代码
 select host,user from user;
 
 +-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

更新user表中root用户域属性,'%'表示允许外部访问。

sql 复制代码
update user set host='%' where user ='root';

1 rows in set (0.01 sec)

最后再更新mysql的配置

sql 复制代码
FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

至此mysql的配置已经完成了,可以用Nacicat去链接就行了,注意要打开服务器的端口

四、redis的安装部署

①首先查找docker的容器
sh 复制代码
docker search radis
NAME                                DESCRIPTION                                     STARS     OFFICIAL
redis                               Redis is an open source key-value store that...   12729     [OK]
redislabs/redisinsight              RedisInsight - The GUI for Redis                99
redislabs/redisearch                Redis With the RedisSearch module pre-loaded...   63
redis/redis-stack-server            redis-stack-server installs a Redis server w...   68
redis/redis-stack                   redis-stack installs a Redis server with add...   102
redislabs/rebloom                   A probablistic datatypes module for Redis       26
redislabs/rejson                    RedisJSON - Enhanced JSON data type processi...   53
redislabs/redis                     Clustered in-memory database engine compatib...   40
redislabs/redismod                  An automated build of redismod - latest Redi...   44
redislabs/redisgraph                A graph database module for Redis               26
redislabs/redistimeseries           A time series database module for Redis         12
redislabs/operator                                                                  7
redislabs/operator-internal         This repository contains pre-released versio...   1
redislabs/redis-webcli              A tiny Flask app to provide access to Redis ...   5
redislabs/redis-py                                                                  5
redislabs/redisgears                An automated build of RedisGears                4
redislabs/k8s-controller-internal                                                   0
redislabs/memtier_benchmark         Docker image to run memtier_benchmark           0
redislabs/ng-redis-raft             Redis with redis raft module                    0
redislabs/k8s-controller                                                            2
redislabs/olmtest                   Test artefact for OLM CSV                       1
redislabs/redisai                                                                   6
redis/redisinsight                  RedisInsight - our best official GUI for Red...   4
redislabs/olm-bundle                                                                0
bitnami/redis                       Bitnami Redis Docker Image                      276
②然后根据自己的需求安装需要的redis的版本,我这里直接装最新的
sh 复制代码
#如果要装指定版本的 执行 docker pull redis:版本号
docker pull redis   

Using default tag: latest
latest: Pulling from library/redis
8a1e25ce7c4f: Pull complete
8ab039a68e51: Pull complete
2b12a49dcfb9: Pull complete
cdf9868f47ac: Pull complete
e73ea5d3136b: Pull complete
890ad32c613f: Pull complete
4f4fb700ef54: Pull complete
ba517b76f92b: Pull complete
Digest: sha256:3134997edb04277814aa51a4175a588d45eb4299272f8eff2307bbf8b39e4d43
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
③最后创建并启动redis的容器
sh 复制代码
# --requirepass是redis的密码,我这边没有使用密码,如果要使用直接在双引号里面加就行了
docker run --name redis -p 6379:6379 -id redis --requirepass ""

ddaaee23b92ec78a4271bbca05420f4c72fd4ac118a7f281266b8a3b872bbecd

这样redis就安装好了

五、安装nginx

sh 复制代码
NAME                               DESCRIPTION                                     STARS     OFFICIAL
nginx                              Official build of Nginx.                        19708     [OK]
unit                               Official build of NGINX Unit: Universal Web ...   25        [OK]
nginx/nginx-ingress                NGINX and  NGINX Plus Ingress Controllers fo...   89
nginxinc/nginx-unprivileged        Unprivileged NGINX Dockerfiles                  144
nginx/nginx-prometheus-exporter    NGINX Prometheus Exporter for NGINX and NGIN...   38
nginxinc/nginx-s3-gateway          Authenticating and caching gateway based on ...   6
nginx/unit                         This repository is retired, use the Docker o...   64
nginx/nginx-ingress-operator       NGINX Ingress Operator for NGINX and NGINX P...   2
nginxinc/amplify-agent             NGINX Amplify Agent docker repository           1
nginx/nginx-quic-qns               NGINX QUIC interop                              1
nginxinc/ingress-demo              Ingress Demo                                    4
nginxproxy/nginx-proxy             Automated nginx proxy for Docker containers ...   132
nginxproxy/acme-companion          Automated ACME SSL certificate generation fo...   130
bitnami/nginx                      Bitnami nginx Docker Image                      183
bitnami/nginx-ingress-controller   Bitnami Docker Image for NGINX Ingress Contr...   32
ubuntu/nginx                       Nginx, a high-performance reverse proxy & we...   112
nginxproxy/docker-gen              Generate files from docker container meta-da...   16
nginxinc/nginmesh_proxy_debug                                                      0
kasmweb/nginx                      An Nginx image based off nginx:alpine and in...   7
nginxinc/mra-fakes3                                                                0
rancher/nginx-ingress-controller                                                   12
nginxinc/nginmesh_proxy_init                                                       0
nginxinc/mra_python_base                                                           0
nginxinc/ngx-rust-tool                                                             0
② 然后使用docker pull nginx拉取nginx
sh 复制代码
docker pull nginx
③然后在你需要的位置创建三个文件夹
sh 复制代码
mkdir ./html #前端文件存放位置
mkdir ./conf #nginx配置文件
mkdir ./logs #nginx日志文件

创建之后把你的前端文件放在html文件夹里,配置文件放在conf文件夹里

④最后挂载映射文件到nginx容器里,并启动容器

-p是代表端口映射 [服务器的端口]:[容器中的端口] -v是代表文件映射 [服务器的文件位置]:[容器中的文件位置] 最后一个nginx是容器的名字

sh 复制代码
 docker run -d -p 80:80 --name nginx -v ./html:/usr/share/nginx/html -v ./conf/nginx.conf:/etc/nginx/nginx.conf -v ./logs:/var/log/nginx nginx

这样浏览器输入IP就可以访问项目了

结语

主要是记录了docker的一个基础项目部署,很多配置使用的都是默认的,如果要修改默写配置,可以将需要的文件像nginx安装说明中一样,把文件映射出来,修改对应的配置文件。

相关推荐
一嘴一个橘子13 分钟前
mybatis - 动态语句、批量注册mapper、分页插件
java
组合缺一14 分钟前
Json Dom 怎么玩转?
java·json·dom·snack4
危险、30 分钟前
一套提升 Spring Boot 项目的高并发、高可用能力的 Cursor 专用提示词
java·spring boot·提示词
kaico201835 分钟前
JDK11新特性
java
钊兵35 分钟前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
jiayong2340 分钟前
Tomcat性能优化面试题
java·性能优化·tomcat
秋刀鱼程序编程44 分钟前
Java基础入门(五)----面向对象(上)
java·开发语言
纪莫1 小时前
技术面:MySQL篇(InnoDB的锁机制)
java·数据库·java面试⑧股
Remember_9931 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode
Filotimo_1 小时前
在java开发中,cron表达式概念
java·开发语言·数据库