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 是否安装成功
配置 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 存在两种情况
第一种
- 使用命令 docker exec -it mysql /bin/bash 进入容器
- 使用命令 mysql -uroot -p 按下 enter 再按 enter 直接登录到 Mysql 里面去,因为里面 root 用户对应的密码是空的
- 给 root 用户设置密码
# 修改用户对应的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
flush privileges;
- 需要远程连接时,执行如下命令
CREATE USER 'root'@'%' IDENTIFIED BY '用户密码';
flush privileges;
- 创建出来的用户是没有任何创建数据库权限的,需要执行如下命令进行授权
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
第二种
- 在执行生成 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
- 创建数据库
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命名空间
记住命名空间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控制台查看配置是否已添加成功
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