Loading

Linux 系统 Docker 安装与使用

下载/安装 Docker

centos 安装 docker 官方网址:https://docs.docker.com/engine/install/centos/

1、卸载已经安装的docker旧版本

如果机器之前已经安装过 docker,需要先执行命令,清除旧 docker

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

2、设置 docker 镜像(阿里云镜像)

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装 docker

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

4、启动 docker

sudo systemctl start docker

5、配置 docker 自启动

sudo systemctl enable docker

6、验证 docker 是否安装成功

image-20201129225348847

配置 Docker 阿里云镜像

这里使用的是 阿里云提供的镜像加速 ,登录并且设置密码之后在左侧的 Docker Hub 镜像站点 可以找到专属加速器地址,复制下来。

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

Docker 常用命令

docker 服务相关命令

# 重启 docker 服务
service docker restart
# 关闭 docker 服务
service docker stop
# 启动 docker 服务
service dockers start

docker 镜像相关命令

# 拉取镜像
docker pull <镜像名:tag>
# 查看镜像
docker images
# 删除镜像
docker rmi 镜像ID
# 强制删除镜像
docker rmi -f 镜像ID
docker rm <容器名 或者 容器ID>

docker 容器相关命令

# 查看当前运行的容器
docker ps
# 查看所有存在的容器
docker ps -a
# 启动容器
docker start 容器名称/容器ID
# 停止容器
docker stop 容器名称/容器ID
# 删除容器
docker rm 容器名称/容器ID
# 强制删除容器
docker rm -f 容器名称/容器ID
# 删除所有容器(谨慎操作)
docker rm $(docker ps -a -q)
# 查看容器日志
docker logs -f 容器名称/容器ID
# 进入容器
docker exec -it 容器名称/容器ID /bin/bash

docker 运行相关命令

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

上面给出了一段 docker 容器运行命令,我们对其中一些关键参数进行分析:

  • 端口映射 -p:-p 3306:3306 表示将服务器 3306 端口映射到容器3306端口
  • 指定容器名称 --name
  • 数据卷映射 -v:例如,-v /mydata/mysql/log:/var/log/mysql 则表示将服务器上 /mydata/mysql/log 文件夹下的内容与容器中 /var/log/mysql 进行映射,这样改变容器外文件内容就会同步到容器中,更方便的对容器进行操作,是常用参数
  • 后台启动 -d

Docker 安装 Mysql 5.7

1、下载 mysql 镜像

docker pull mysql:5.7

2、启动 mysql 容器

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

3、创建mysql配置文件

vi /mydata/mysql/conf/my.cnf

# 添加如下内容
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

4、重启 mysql

docker restart mysql

5、设置 mysql 自启动

docker update mysql --restart=always

Docker 安装 Mysql 8.0

1、下载 mysql 镜像

docker pull mysql

2、启动 mysql 容器

不建议将虚拟机端口映射设置为 3306,为了减少被攻击的风险

正式的生成环境中建议将数据库密码设置复杂

docker run -p 33308:3306 --name mysql8 \
-v /mydata/mysql8/log:/var/log/mysql \
-v /mydata/mysql8/data:/var/lib/mysql \
-v /mydata/mysql8/conf:/etc/mysql \
-v /mydata/mysql8/mysql-files:/var/lib/mysql-files/ \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

3、创建mysql配置文件

vi /mydata/mysql/conf/my.cnf

# 添加如下内容
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

4、重启 mysql

docker restart mysql8

5、设置 mysql 自启动

docker update mysql8 --restart=always

Mysql8 远程工具连接配置

登录 Docker 中的 Mysql 存在两种情况

第一种

  1. 使用命令 docker exec -it mysql /bin/bash 进入容器
  2. 使用命令 mysql -uroot -p 按下 enter 再按 enter 直接登录到 Mysql 里面去,因为里面 root 用户对应的密码是空的
  3. 给 root 用户设置密码
# 修改用户对应的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
flush privileges;
  1. 需要远程连接时,执行如下命令
CREATE USER 'root'@'%' IDENTIFIED BY '用户密码';
flush privileges;
  1. 创建出来的用户是没有任何创建数据库权限的,需要执行如下命令进行授权
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;

第二种

  1. 在执行生成 mysql 容器的时候,我们设置了 mysql 初始密码的,使用那个密码,即可直接登录到 mysql

说明一下 Mysql 的配置 my.cnf

[mysqld]
# 禁止表名大小写验证
lower_case_table_names=1
# 禁用dns解析,所以在mysql的授权表中就不能使用主机名了,只能使用IP
skip-name-resolve
# mysql8的安全机制升级而需要修改的配置,不配置的话将无法登录管理
default_authentication_plugin= mysql_native_password

Docker 安装 Redis

1、下载 redis 镜像

docker pull redis

2、创建配置文件

# 创建文件夹,与容器内部文件进行映射
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf

3、启动容器

docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

4、运行 redis 客户端

docker exec -it redis redis-cli

5、开启 aof 持久化

vi /mydata/redis/conf/redis.conf
# 添加如下内容
appendonly yes

6、重启 redis

docker restart redis

7、设置 redis 自启动

docker update redis --restart=always

Docker 安装 ELK

1、下载 elasticsearch 和 kibana

docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2

2、配置

# 创建文件夹,与容器内部文件夹映射
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
mkdir -p /mydata/elasticsearch/data

# 允许任意客户端连接es
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

# 修改 /mydata/elasticsearch 文件夹下所有内容读写权限
chmod -R 777 /mydata/elasticsearch/

3、启动 elasticsearch 容器

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e  "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx562m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v  /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2 

4、设置开机启动 elasticsearch

docker update elasticsearch --restart=always

5、启动 kibana 容器

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 -d kibana:7.4.2

6、设置开机启动 kibana

docker update kibana --restart=always

Docker 安装 nginx

1、随便启动一个 nginx 实例,只是为了复制出配置

sudo docker run -p 80:80 --name nginx -d nginx:1.10

2、将容器内的配置文件拷贝到 /mydata/nginx/conf/ 下

sudo mkdir -p /mydata/nginx/html
sudo mkdir -p /mydata/nginx/logs
sudo mkdir -p /mydata/nginx/conf
sudo docker container cp nginx:/etc/nginx/   /mydata/nginx/conf/ 
#由于拷贝完成后会在config中存在一个nginx文件夹,所以需要将它的内容移动到conf中
sudo mv /mydata/nginx/conf/nginx/* /mydata/nginx/conf/
sudo rm -rf /mydata/nginx/conf/nginx
# 修改 /mydata/nginx 文件夹读写权限
sudo chmod -R 777 /mydata/nginx

3、终止原容器

sudo docker stop nginx

4、删除原容器

sudo docker rm nginx

5、创建新的 nginx 容器

sudo docker run -p 80:80 --name nginx \
 -v /mydata/nginx/html:/usr/share/nginx/html \
 -v /mydata/nginx/logs:/var/log/nginx \
 -v /mydata/nginx/conf/:/etc/nginx \
 -d nginx:1.10

6、设置开机启动 nginx

sudo docker update nginx --restart=always

7、创建/mydata/nginx/html/index.html文件,测试是否能够正常访问

#添加文件 index.html
sudo echo '<h2>hello nginx!</h2>' >> /mydata/nginx/html/index.html

#访问 http://nginx所在主机的IP:80/index.html

Docker 安装 nacos

1、拉取nacos镜像

docker pull nacos/nacos-server
  1. 创建数据库

MySQL创建数据库名为 nacos_config 并导入官方脚本
nacos-db.sql

3、配置

mkdir -p /mydata/nacos/logs                
mkdir -p /mydata/nacos/init.d
touch /mydata/nacos/init.d/custom.properties
chmod -R 777 /mydata/nacos

4、启动 nacos 容器

docker run -d --name nacos --network=host \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=localhost \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_DATABASE_NUM=1 \
-v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
-v /mydata/nacos/logs:/home/nacos/logs \
-p 8848:8848 \
nacos/nacos-server

Docker 安装 seata-server

一、准备工作

1、Nacos安装和配置

进入Nacos控制台,创建seata命名空间

image-20210109161626697

记住命名空间ID自定义为seata_namespace_id,后面需要

2、 Seata数据库创建

创建数据库名为seata,执行Seata的Github官方源码中提供的的MySQL数据库脚本

MySQL脚本地址: https://github.com/seata/seata/blob/1.4.1/script/server/db/mysql.sql

二、 seata-server安装

1、随便启动一个 seata-server实例,只是为了复制出配置

docker run -d --name seata -p 8091:8091 seataio/seata-server

2、将容器内的配置文件拷贝到 /mydata/seata/ 下

sudo mkdir -p /mydata/seata
sudo docker cp seata:/seata-server  /mydata/seata

3、修改配置

修改registry.conf配置,类型选择nacos,namesapce为上文中在nacos新建的命名空间id即seata_namespace_id,精简如下:

vim /mydata/seata/seata-server/resources/registry.conf

registry {
  type = "nacos"
  loadBalance = "RandomLoadBalance"
  loadBalanceVirtualNodes = 10

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    namespace = "seata_namespace_id"
    cluster = "default"
  }
}
config {
  type = "nacos"
  
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = "seata_namespace_id"
    group = "SEATA_GROUP"
  }
}

4、终止原容器

sudo docker stop seata

5、删除原容器

sudo docker rm -f seata

6、推送Seata依赖配置至Nacos

从Seata的GitHub官方源码获取配置文件(config.txt)和推送脚本文件(nacos/nacos-config.sh),复制到服务器

地址:https://github.com/seata/seata/blob/develop/script/config-center

因为脚本的关系,文件存放目录如下

/mydata/seata/script
└── config-center
    ├── config.txt
    └── nacos
        └── nacos-config.sh

修改配置文件 config.txt

vi /mydata/seata/script/config-center/config.txt

修改事务组MySQL连接信息,修改信息如下:

# 修改默认事务组
service.vgroupMapping.mall_tx_group=default

#修改mysql连接信息
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://lcoalhost/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=root

执行推送命令

sh /mydata/seata/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t seata_namespace_id -u nacos -w nacos
  • -t seata_namespace_id 指定Nacos配置命名空间ID
  • -g SEATA_GROUP 指定Nacos配置组名称

如果有 init nacos config fail. 报错信息,请检查修改信息,如果有属性修改提示failure,请修改config.txt中属性。

如果出现类似 cat: /tmp/tmp.rRGz1B7MUP: No such file or directory 的错误不用慌,重新执行推送命令直至成功。

推送执行完毕,到Nacos控制台查看配置是否已添加成功

image-20210109170320475

7、启动Seata容器

docker run -d --name seata --restart=always -p 8091:8091  \
-e SEATA_IP=localhost \
-e SEATA_CONFIG_NAME=file:/seata-server/resources/registry.conf \
-v /mydata/seata/seata-server/resources/registry.conf:/seata-server/resources/registry.conf \
-v /mydata/seata/logs:/root/logs \
seataio/seata-server
  • 如果云主机不支持tcp6监听的,使用 --network=host 替代 -p 8091:8091 指定Docker网络模式为Host模式

Docker 安装 RabbitMQ

1、拉取 RabbitMQ 镜像

sudo docker pull rabbitmq:management

2、启动 RabbitMQ 容器

sudo mkdir -p /mydata/rabbitmq

sudo docker run -d --name rabbitmq \
-v /mydata/rabbitmq:/var/lib/rabbitmq \
-p 5671:5671 \
-p 5672:5672 \
-p 4369:4369 \
-p 25672:25672 \
-p 15671:15671 \
-p 15672:15672 \
rabbitmq:management

3、设置开机启动 RabbitMQ

sudo docker update rabbitmq --restart=always
posted @ 2020-11-29 23:22  PinGoo  阅读(1058)  评论(2编辑  收藏  举报