草庐IT

阿里云服务器linux CentOS 安装docker容器,并部署一个springCloud项目

我咋不瞌睡 2023-10-12 原文

简介:mysql,redis(单节点),consul(单节点),nginx,在docker内。springboot不在docker内,也就是在docker宿主机器上。
docker官网:https://docs.docker.com/engine/install/centos/
docker仓库:https://hub.docker.com/_/mysql?tab=description

1.安装docker

1.1卸载老的版本

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

1.2安装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.3安装最新版本的 Docker Engine 和 containerd,或者进入下一步安装特定版本:

 sudo yum install docker-ce docker-ce-cli containerd.io

1.4启动 Docker。

sudo systemctl start docker

1.5设置开机自启

sudo systemctl enable docker

1.6阿里云镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://rn2ij708.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2安装mysql

2.1安装mysql临时镜像

docker run -p 3369:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0

2.2需要远程登录mysql 需要做一下操作

#进入mysql bin目录
docker exec -it mysql /bin/bash
#登录mysql
mysql -u root -p
#切换数据库
use mysql
#修改账号host
update user set host = '%' where user = 'root';
#修改账号密码 
alter user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#查看用户当前信息
select user,host,plugin from user;
#刷新
flush privileges;

2.3查看docker mysql镜像的目录 以便准确挂载到雇主机器

#进入docker容器内
docker exec -it mysql /bin/bash
# 查找Docker内,MySQL配置文件my.cnf的位置
mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 

#查找数据文件位置 exit 退出docker容器以后
docker inspect mysql
 "Mounts": [
            {
                "Type": "volume",
                "Name": "89586be25ba94bb049e72271fbc59d51741920781ed9e29e4dc20c7db90a59fc",
                "Source": "/var/lib/docker/volumes/89586be25ba94bb049e72271fbc59d51741920781ed9e29e4dc20c7db90a59fc/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],



docker exec -it mysql  bash
配置文件在
/etc/mysql/my.cnf
拷贝文件到之指定目录
docker cp mysql:/etc/mysql/my.cnf  /home/mysql/conf
# 删除临时容器
docker rm -f mysql

2.4创建本地路径并挂载Docker内数据

docker run --restart=always \
-p 3369:3306  --name mysql \
-v /home/mysql/data:/var/lib/mysql   \
-v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf   \
-v /home/mysql/log:/var/log/mysql  \
-v /home/mysql/mysql-files:/var/lib/mysql-files \
-e TZ=Asia/Shanghai  \
-e MYSQL_ROOT_PASSWORD=123456  \
-d mysql:8.0 
--name:为容器指定一个名字
-p:指定端口映射,格式为:主机(宿主)端口:容器端口
-d:后台运行容器,并返回容器 id

3安装redis

#配置文件目录   和  数据目录
注意:docker redis 默认无redis.conf 文件,如果需要,自行去下载
mkdir -p /home/docker/redis/conf && mkdir -p /home/docker/redis/data

#准备配置文件
cd /home/docker/redis/conf
wget https://raw.githubusercontent.com/antirez/redis/6.2.2/redis.conf

#运行
docker run -p 6379:6379 --name redis \
-v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis/data:/data \
--restart=always  \
--privileged=true \
-d redis:6.2.2 /etc/redis/redis.conf --appendonly yes

参数解释
--restart=always                                            -> 开机启动容器,容器异常自动重启
-d                                                          -> 以守护进程的方式启动容器
--privileged=true                                           -> 提升容器内权限
-p 6379:6379                                                -> 绑定宿主机端口
-v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf  -> 映射配置文件
-v /home/docker/redis/data:/data                              -> 映射数据目录
--name redis                                                -> 指定容器名称
--appendonly yes                                            -> 开启数据持久化

如果搞不懂挂载目录,可以像安装mysql 先默认安装,然后查看目录。

#安装
docker run -p 6379:6379 --name redis  -d redis:6.2.2 redis-server

#查看
docker inspect redis

 "Mounts": [
            {
                "Type": "volume",
                "Name": "ffef00095809f501fe4b7c0835820e6bff3752274bfda4b5dff548f5711da1be",
                "Source": "/var/lib/docker/volumes/ffef00095809f501fe4b7c0835820e6bff3752274bfda4b5dff548f5711da1be/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

4安装nginx

#创建临时容器
docker run --name nginx  -p 80:80 -d nginx:1.20.0
#进入nginx目录
docker exec -it nginx bash

#查看nginx.cnf
cat /etc/nginx/nginx.conf
nginx.cnf

从这个配置文件可以看出
nginx的日志文件在 /var/log/nginx 目录下
很重要的一点 最后一行 引入了 /etc/nginx/conf.d/ 文件下所有的配置文件
通过查看default.conf 文件的信息 默认的页面路径 /usr/share/nginx/html


#创建挂载目录
mkdir -p /home/docker/nginx/conf
#然后将nginx的一些配置信息 copy到刚创建的目录中去
docker cp nginx:/etc/nginx/nginx.conf /home/docker/nginx
docker cp nginx:/etc/nginx/conf.d/default.conf /home/docker/nginx/conf
# 删除临时容器
docker rm -f nginx
#重新安装容器
docker run  --name nginx  -p 80:80 -p 443:443 \
--restart=always \
-v /home/docker/nginx/html:/usr/share/nginx/html \
-v /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker/nginx/logs:/var/log/nginx \
-v /home/docker/nginx/conf:/etc/nginx/conf.d \
-v /home/docker/nginx/cert:/etc/nginx/cert \
-d nginx:1.20.0

注:
1.nginx反向代理 不可以在使用127.0.0.1或者localhost访问宿主机器服务。可以使用ifconfig查看docker监听的ip。然后替代127.0.0.1。

5单节点consul

docker run -d -p 8500:8500 --restart=always --name=consul consul:1.10.2 agent -server -bootstrap -ui -node=consul-node1 -client='0.0.0.0'
-d: 后台运行容器,并返回容器ID;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-name consul  指定容器名称,自定义
consul:1.10.2 指定镜像, 镜像名:标签名
agent: 表示启动 Agent 进程。
server:表示启动 Consul Server 模式。
client:表示启动 Consul Cilent 模式。
bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。
技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导 
Leader,在引导群集后,建议不要使用此标志。

6安装rabbitmq

docker pull rabbitmq:management 
#rabbitmq:management (镜像配有控制台)。
#创建挂载目录  mkdir...
docker run  --restart=always \
-p 5673:5672 -p 15673:15672 --name rabbitmq \
-v /home/rabbitmq/data:/var/lib/rabbitmq \
-v /home/rabbitmq/conf:/etc/rabbitmq  \
-v /home/rabbitmq/log:/var/log/rabbitmq  \
-d rabbitmq
#进入docker rabbitmq
docker exec -it rabbitmq bash
#开启控制台
rabbitmq-plugins enable rabbitmq_management
#guest 不支持远程访问,最好添加一个用户管理
#如果使用阿里云或者腾讯云 记得开放15673端口
#创建账号
rabbitmqctl add_user admin admin
#授权角色
rabbitmqctl set_user_tags admin administrator
#添加权限  成功输出 Setting permissions for user "admin" in vhost "/" ...
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

7常用命令

docker exec -it mysql /bin/bash
docker rmi -f 镜像名:删除镜像
docker start 容器名/容器id:启动容器
docker stop 容器名/容器id:停止容器
docker ps :查看运行的容器
docker ps -a:查看所用容器(已运行、已停止的都有)
docker rm -f 容器名/容器id:删除容器
docker exec -it 容器名/容器id bash:进入容器
docker logs 镜像名:常看日志
docker images 查看本地镜像

有关阿里云服务器linux CentOS 安装docker容器,并部署一个springCloud项目的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  8. 阿里云国际版免费试用:如何注册以及注意事项 - 2

    作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。​关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐

  9. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  10. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

随机推荐