centos7 docker安装容器

8 篇文章 0 订阅
2 篇文章 0 订阅

一、docker

1、安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

实际就是执行以下几步:

sh -c 'yum install -y -q yum-utils'
sh -c 'yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo'
sh -c 'yum makecache'
sh -c 'yum install -y -q docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin'

2、启动:systemctl start docker

教程参考:https://www.runoob.com/docker/centos-docker-install.html

3、【注】若出现"Peer’s Certificate has expired"问题
删除/etc/yum.repos.d/docker-ce.repo镜像仓库文件

rm /etc/yum.repos.d/docker-ce.repo

同步时钟信息

yum install ntp -y
ntpdate ntp.aliyun.com

参考解决

二、安装MySQL

1、拉取镜像

docker pull mysql

2、创建以及运行mysql容器

docker run -p 3307:3306 --name mysql -v /data/docker/mysql/conf:/etc/mysql/conf.d -v /data/docker/mysql/data:/var/lib/mysql -v /data/docker/mysql/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 -d mysql

备注:
-p: 设置主机与容器的端口映射【主机端口:容器端口】,一般一样即可,如【-p 3306:3306】
–name:指定容器别名【–name 容器名称】
-v:指定主机挂载容器目录【主机目录:容器目录】
-d:指后台运行
最后一个是容器的镜像,最新本可以不指定版本【容器[:版本号]】

挂载容器目录说明
1、/etc/mysql/conf.d 该目录下可以设置mysql的启动配置(xxx,cnf),如关闭ssl【tls-version=invalid】
2、/var/lib/mysql 该目录下保存是数据库文件
3、/var/lib/mysql-files 作用不清楚,如果不映射挂载,会出现【Error on realpath() on ‘/var/lib/mysql-files’ (Error 2 - No such file or directory)】错误

3、进入mysql容器
a、登录mysql

进入容器以及登录mysql
docker exec -it mysql bash
mysql -uroot -p123456

或者直接登录mysql
docker exec -it mysql mysql -uroot -p123456

b、修改支持远程

mysql>use mysql
mysql> select user, plugin, host from user;
+------------------+-----------------------+-----------+
| user             | plugin                | host      |
+------------------+-----------------------+-----------+
| root             | mysql_native_password | %         |
| mysql.infoschema | caching_sha2_password | localhost |
| mysql.session    | caching_sha2_password | localhost |
| mysql.sys        | caching_sha2_password | localhost |
| root             | caching_sha2_password | localhost |
+------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>

问题见问题1~4

4、脚本创建多个不同端口mysql容器

# run_mutil_mysql_docker.sh
# 创建多个mysql容器
#!/bin/bash

function show_log () {
    local curTime=`date +"%Y-%m-%d %H:%M:%S"`
    echo "$curTime ---- $1";
}

function run_list () {
    local name port dir;
    for cf in `cat mysqlNameList.txt`
    do
        name=`echo $cf | awk -F"[ ,|]" '{print $1}'`;
        port=`echo $cf | awk -F"[ ,|]" '{print $2}'`;
        dir="/data/docker/mysql/$name";
        
        if [ ! -e "$dir/conf" ]; then
            mkdir -p "$dir/conf"
        fi
        cp /data/docker/mysql/conf/mysql.cnf "$dir/conf"

        if [ ! -e "$dir/data" ]; then
            mkdir -p "$dir/data"
        fi

        if [ ! -e "$dir/mysql-files" ]; then
            mkdir -p "$dir/mysql-files"
        fi
        
        show_log $dir;
        docker run -p $port:3306 --name $name -v "$dir/conf":/etc/mysql/conf.d -v "$dir/data":/var/lib/mysql -v "$dir/mysql-files":/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    done
}

function op_list () {
    local name;
    for cf in `cat mysqlNameList.txt`
    do
        name=`echo $cf | awk -F"[ ,|]" '{print $1}'`;
        show_log "$1 $name"
        docker $1 $name
    done
}


for arg in $*
do
    if [[ $arg = 'run' ]]; then
        run_list;
    elif [[ $arg = 'start' ]]; then
        op_list "start";
    elif [[ $arg = 'stop' ]]; then
        op_list "stop";
    elif [[ $arg = 'restart' ]]; then
        op_list "restart";
    elif [[ $arg = 'rm' ]]; then
        op_list "rm";
    else
        show_log "Unsupport!";
    fi
done  

mysqlNameList.txt(不要出现空格,否则for遍历时会以空格来分离数据)

mysql2,3308
mysql3,3309
mysql4|3310
mysql1|3307

/data/docker/mysql/conf/mysql.cnf

[mysqld]
# 【ERROR 2026 (HY000): SSL connection error: unknown error number】
tls-version=invalid
# default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password
[root@localhost ~]# chmod 777 run_mutil_mysql_docker.sh
[root@localhost ~]# ./run_mutil_mysql_docker.sh run

备注:
多个指令顺序一起使用:./run_mutil_mysql_docker.sh stop rm run

三、端口转发

目的其他机器通过宿主机访问到虚拟机
说明其他机器宿主机是局域网,即网段(如192.168.0.105和192.168.0.189)一样;宿主机虚拟机是网络适配器是NAT模式(两者网段不一样,如192.168.0.189和192.168.157.129)。
1、打开VMware虚拟网络编辑器
VMware虚拟网络编辑器
2、端口转发设置
端口转发设置

备注说明:
a、主机端口:指的是宿主机的端口,需要确保该端口已经开放出去。否则其他机器依旧无法访问
b、虚拟机IP地址、端口:指的是VMware中的虚拟机系统(如centos7)的IP地址、端口

3、关系

机器【192.168.0.105】访问宿主机【192.168.0.189】的虚拟机【192.168.157.129】中的mysql容器【3306】
mysql -uroot -p123456 -h192.168.0.189 -P3307

其他机器(192.168.0.105)–访问–》宿主机IP和端口(192.168.0.189:3307)–转发–》虚拟机IP和端口(192.168.157.129:3307)–映射–》容器端口(192.168.157.129:3306)

四、笔记

查询容器镜像:docker search 容器
拉取镜像:docker pull 容器[:版本]
查看已拉取镜像:docker images

查看容器信息:docker inspect 容器名称
查看容器启动日志: docker logs -f --details -t 启动的容器ID;docker logs 容器名称
查看已运行容器的Pid:docker inspect --format “{{.State.Pid}}” 容器ID

容器配置位置:/var/lib/docker/containers/容器ID/hostconfig.json
说明:每个容器的该配置文件,存储的就是创建容器时填写参数以及相关配置信息,适合修改已创建容器的信息。如映射端口(修改前一定要先关闭docker,否则修改还是会被覆盖,修改后再启动docker)
备注:hostconfig.json修改的是映射关系,config.v2.json才是容器的启动配置、如MySQL端口3326是在config.v2.json,hostconfig.json是对config.v2.json的映射

关闭/开启/重启容器:docker stop/start/restart 容器名称
移除容器:docker rm 容器名称
进入后台运行的容器: docker exec -it 启动的容器名称 bash

防火墙:
批量添加开放端口:firewall-cmd --zone=public --add-port=3306-3330/tcp --permanent
更新防火墙:firewall-cmd --reload
查看开放端口(规则):firewall-cmd --zone=public --list-ports
查询:firewall-cmd --zone=public --query-port=3308/tcp
删除:firewall-cmd --zone=public --remove-port=3308/tcp --permanent

五、问题:

1、如果创建MySQL(8.x)容器时,指定映射目录,导致MySQL登录失败【ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)】

解决方式:在MySQL启动自定义配置文件(/etc/mysql/conf.d/xxx.cnf)指定跳过密码登录(在文件中的[mysqld]下添加skip-grant-tables),登录MySQL后修改登录密码。
参考:https://blog.csdn.net/Ayue1220/article/details/120350809

2、自定义MySQL配置(/etc/mysql/conf.d/xxx.cnf)时,无法启动容器,错误【Different lower_case_table_names settings for server (‘1’) and data dictionary (‘0’).】

解决方式:是在配置文件中添加【lower_case_table_names=2】

3、修改密码【alter user ‘root’@‘%’ identified by ‘123456’】出现问题

a、出现ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
解决:刷新权限【flush privileges】
b、出现ERROR 1396 (HY000): Operation ALTER USER failed for ‘root’@‘%’
解决:查看用户的host【select user,host from user】,如果root的host是localhost,则修改其host【update user set host=‘%’ where user=‘root’】并刷新权限【flush privileges】,最后再执行密码更新和权限刷新。
查看密码加密方式【select user,plugin from user】,默认是caching_sha2_password,如果需要更改加密方式【ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’】

4、设置MySQL可被远程连接

a、授权【GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’】并刷新权限
b、更改密码加密方式【ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’】,即修改密码时添加【WITH mysql_native_password】,就能将加密方式改为mysql_native_password

5、远程连接是出现【ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0】
解决:在MySQL自定义配置文件(/etc/mysql/conf.d/xxx.cnf)的[mysqld]下添加skip-name-resolve
参考:https://blog.csdn.net/jallin2001/article/details/6776943

6、远程连接出现【ERROR 2026 (HY000): SSL connection error: unknown error number】

解决:在配置文件的[mysqld]下添加skip-ssl(丢弃)或tls-version=invalid(建议使用)

7、出现【ERROR 2003 (HY000): Can’t connect to MySQL server on ‘192.168.0.189’ (10060)】无法连接

a、可能是宿主机防火墙问题,端口未开放。解决:添加指定端口到防火墙或者关闭防火墙(注意:包含虚拟机、宿主机的端口,刚开始关注点在虚拟机,没有关注宿主机的端口开放,导致其他机器一直无法连接)
b、连接地址无法连通。虚拟机的地址需要通过VMware设置转发,由宿主机地址作为转接,从而其他机器连接到虚拟机
(VMware设置 》虚拟网络编辑器 》选中“VMnet8” 》点击“NAT设置” 》端口转发下进行添加。设置宿主机端口【其他机器连接时使用】、虚拟机ip和端口【使用的是映射端口,如创建容器时使用 “-p 3307:3306”,此时端口应为3307】)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值