likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 4

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

前言

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

一、docker的安装

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

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

1   [Errno 14] curl#35 - TCP connection reset by peer
2   [Errno 12] curl#35 - Timeout

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

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

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,执行以下命令:
sudo yum install docker-ce docker-ce-cli containerd.io

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

yum list docker-ce --showduplicates | sort -r

版本号从高到低列出:

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)加上版本字符串(第二列),从第一个冒号(:)开始,直到第一个连字符(-)分隔

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

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

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

二、 安装jdk

①查找docker的openjdk镜像
docker search openjdk

查找后会显示以下信息

[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 拉取镜像
[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

[root@iZwz9a7h0wpv09u64ucwt2Z /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
openjdk      latest         b273004037cc   19 months ago   526MB
③编写dockerfile文件
# 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的属性

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

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

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(容器名)]

docker start blogsserve
blogsserve

三、安装mysql

①首先拉取mysql镜像
#直接拉取最新的,如果要带版本就 mysql:@版本号
docker pull mysql 
②然后在docker 中创建对应的数据盘
docker volume create mysql-data #存放数据的
docker volume create mysql-config #存放配置的
docker volume create mysql-log #存放日志的
③创建mysql容器
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无法存放中文内容

这样容器就配置好了。

④如果需要修改配置文件
首先使用命令:`docker volume inspect mysql-config`查看数据卷`mysql-config`的位置:

# 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容器

docker exec -it mysql bash
bash-4.4#

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

mysql -u root -p

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

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

然后再查询用户表

 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用户域属性,'%'表示允许外部访问。

update user set host='%' where user ='root';

1 rows in set (0.01 sec)

最后再更新mysql的配置

FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

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

四、redis的安装部署

①首先查找docker的容器
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的版本,我这里直接装最新的
#如果要装指定版本的 执行 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的容器
# --requirepass是redis的密码,我这边没有使用密码,如果要使用直接在双引号里面加就行了
docker run --name redis -p 6379:6379 -id redis --requirepass ""

ddaaee23b92ec78a4271bbca05420f4c72fd4ac118a7f281266b8a3b872bbecd

这样redis就安装好了

五、安装nginx

①按照惯例使用docker search nginx
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
docker pull nginx
③然后在你需要的位置创建三个文件夹
mkdir ./html #前端文件存放位置
mkdir ./conf #nginx配置文件
mkdir ./logs #nginx日志文件

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

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

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

 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安装说明中一样,把文件映射出来,修改对应的配置文件。

转载自:https://juejin.cn/post/7347617618511036470
评论
请登录