
前言
从安装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
①按照惯例使用docker search 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安装说明中一样,把文件映射出来,修改对应的配置文件。