目录
一、Docker安装
二、Docker常见命令
2.1 镜像命令
2.2 容器命令
2.3 总结
2.4 容器挂载-容器卷技术
三、Docker安装mysql容器
3.1 下载镜像文件
3.2 创建实例并启动
3.3 MySQL 配置
3.4 进入容器文件系统
四、Docker安装Redis
一、Docker安装
官网安装指引:Install Docker Engine on CentOS | Docker Documentation
# 0. 安装前先更新yum,不然有可能出现本机无法连接虚拟机的mysql、redis等
sudo yum update
# 1. 卸载之前的docker (注意:\复制的时候可能存在问题,建议手敲这部分)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2. 需要的安装包
yum install -y yum-utils
# 3. 设置镜像的仓库
# 默认是从国外的,不推荐
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 推荐使用国内的,访问速度快
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache
# 4. 安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io
# 5. 启动docker
systemctl start docker
# 6. 使用docker version查看是否按照成功
docker version
# 7. 设置开机自启动docker服务
systemctl enable docker
配置阿里云镜像加速
地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
# 配置阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://n6lhbngn.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
二、Docker常见命令
官网:docker | Docker Documentation
2.1 镜像命令
docker images #查看所有本地主机上的镜像
docker pull 镜像名称[:tag] #下载镜像,如果不写tag,默认就是latest最新版本
docker rmi -f 镜像id #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id #删除指定的镜像
docker rmi -f $(docker images -aq) #删除全部的镜像
docker拉取的镜像默认都来自https://hub.docker.com/
举例:
#查看所有本地主机上的镜像 [root@VM-16-11-centos mydata]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 c20987f18b13 9 months ago 448MB mysql 8.0 3218b38490ce 9 months ago 516MB #删除指定镜像 [root@VM-16-11-centos mydata]# docker rmi -f 3218b38490ce Untagged: mysql:8.0 Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5 Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9 Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3 Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff #查看所有本地主机上的镜像 [root@VM-16-11-centos mydata]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 c20987f18b13 9 months ago 448MB #下载镜像 [root@VM-16-11-centos mydata]# docker pull mysql:8.0 8.0: Pulling from library/mysql 72a69066d2fe: Already exists #分层下载: docker image 的核心 联合文件系统 93619dbc5b36: Already exists 99da31dd6142: Already exists 626033c43d70: Already exists 37d5d7efb64e: Already exists ac563158d721: Already exists d2ba16033dad: Already exists 688ba7d5c01a: Pull complete 00e060b6d11d: Pull complete 1c04857f594f: Pull complete 4d7cfa90e6ea: Pull complete e0431212d27d: Pull complete Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 Status: Downloaded newer image for mysql:8.0 docker.io/library/mysql:8.0 #查看所有本地主机上的镜像 [root@VM-16-11-centos mydata]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 c20987f18b13 9 months ago 448MB mysql 8.0 3218b38490ce 9 months ago 516MB
2.2 容器命令
docker run 镜像id/容器名称 #新建容器并启动
docker ps #列出所有运行的容器
docker ps -a #列出所有的容器,包括未运行的
docker rm 容器id #删除指定容器
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
docker start 容器id/容器名称 #启动容器
docker restart 容器id/容器名称 #重启容器
docker stop 容器id/容器名称 #停止当前正在运行的容器
docker kill 容器id/容器名称 #强制停止当前容器
docker exec -it 容器id/容器名称 /bin/bash #进入当前正在运行的容器(注意:特殊的,当前使用exit退出容器不会停止容器)
exit # 停止容器并退出(后台方式运行则仅退出)
Ctrl+P+Q # 不停止容器退出
详解
docker run [可选参数] image #参数说明 --name="Name" #容器名字 tomcat01 tomcat02 用来区分容器 -d #后台方式运行 -it #使用交互方式运行,进入容器查看内容(注意:使用这个参数表示还进入了容器中) -p #指定容器的端口 -p ip:主机端口:容器端口 -p 主机端口:容器端口(常用) -p 容器端口 -P(大写) #随机指定端口
举例:
docker run -p 3306:3306 --name test-mysql -v /mydata/test-mysql/log:/var/log/mysql -v /mydata/test-mysql/data:/var/lib/mysql -v /mydata/test-mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=SZDXsht2015 -d mysql:5.7
docker run --name nginx -d -p 7777:80 nginx
2.3 总结
拉取(下载)镜像
docker pull 镜像名称[:version]
查看本地镜像:
docker images
新建容器并运行
docker run [可选参数] 镜像名称
可选参数 --name 容器别名 -->> 给容器起别名 -d -->> 后台方式运行 -it -->> 使用交互方式运行,进入容器查看内容 -p 主机端口:容器端口 -->> 建立主机与容器端口映射 -P(大写) -->> 随机指定端口 -v 主机目录:容器目录 -->> 实现容器挂载
进入容器(适用于运行的容器)
docker exec -it 容器别名(或容器id) /bin/bash
PS: 进入容器的方法有多种,但是常用的方法如上这种,此方法要求容器必须启动,否则不能进入容器中。
退出容器
exit
查看所有容器
docker ps -->> 当前正在运行的所有容器
docker ps -a -->> 所有容器
docker ps -l -->> 查看最新创建的容器
docker ps --help -->> 查看docker ps的相关参数
启动、重启、停止容器
docker start 容器id -->> 启动容器
docker restart 容器id -->> 重启容器
docker stop 容器id -->> 停止当前正在运行的容器
docker kill 容器id -->> 强制停止当前容器
删除容器
docker rm 容器id -->> 删除指定的容器,不能删除正在运行的容器,如果要强制删除docker rm -rf 容器id
docker rm -f $(docker ps -aq) #删除指定的容器
docker ps -a -q|xargs docker rm #删除所有的容器
2.4 容器挂载-容器卷技术
前言
我们进入容器之后,想对容器中某个配置文件进行修改,发现使用vim命令并不生效,提示:bash: vim: command not found。
这是因为docker容器中仅仅提供了最小的Linux系统内核。只有一些基本的指令,如果想要使用vim这些命令是需要单独下载安装的。
但是通常情况下,我们并不会选择在容器内部进行安装。而是通过挂载,将容器内的目录映射到我们Linux服务器中。
然后在Linux服务器对应的挂载路径中修改之后,就会自动映射到容器内部,实现动态修改。
这样做的好处很多:
一是减小容器的体积,
二是如果容器删除了,不至于数据丢失,实现容器的持久化和同步共享。
挂载方法
具体挂载方法前面提到过一种,就是在新建并运行容器的时候,添加参数 -v 主机目录:容器目录,此为指定路径挂载。
下面系统介绍常见的几种容器挂载方法:
docker run -d --name nginx_01 -v /etc/nginx nginx #匿名挂载 docker run -d --name nginx_02 -v nginx_my02:/etc/nginx nginx #具名挂载 docker run -d --name nginx_03 -v /home/nginx_my03/nginx:/etc/nginx nginx #指定路径挂载 -v 容器内路径 #匿名挂载 -v 卷名:容器内路径 #具名挂载 -v /宿主内路径:容器内路径 #指定路径挂载
示例
docker run -p 3306:3306 --name test-mysql \ -v /mydata/test-mysql/log:/var/log/mysql \ -v /mydata/test-mysql/data:/var/lib/mysql \ -v /mydata/test-mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7 其它参数解释: -e MYSQL_ROOT_PASSWORD=123456 -->> 初始化root用户的密码
查看挂载路径
之后如果我们想查看系统中某个容器它挂载了哪些路径,应该如何查看?
docker inspect 容器别名(或容器id)
注意
挂载的路径内外是共享的,如果原本容器的某个路径中包含其他内容,外部挂载是没有将内部文件复制出来的。
挂载最好是在创建容器的时候就进行。
思考:如果容器创建时没有挂载,如何给已有容器进行挂载呢?
三、Docker安装mysql容器
3.1 下载镜像文件
docker pull mysql:5.7
3.2 创建实例并启动
docker run -p 3306:3306 --name mysql5.7 \
-v /mydata/mysql5.7/log:/var/log/mysql \
-v /mydata/mysql5.7/data:/var/lib/mysql \
-v /mydata/mysql5.7/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明 -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口 -v /mydata/mysql5.7/conf:/etc/mysql:将配置文件夹挂载到主机 -v /mydata/mysql5.7/log:/var/log/mysql:将日志文件夹挂载到主机 -v /mydata/mysql5.7/data:/var/lib/mysql/:将配置文件夹挂载到主机 -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
3.3 MySQL 配置
vi /mydata/mysql5.7/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 NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
3.4 进入容器文件系统
docker exec -it mysql5.7 /bin/bash
我们也可以通过可视化工具连接当前mysql了。
如果是云服务器的话,需要开放对应的端口。
💡安装Mysql8.0版本遇到的问题:
Docker启动mysql8.0版本自动退出?
答案:[转]Docker启动mysql8.0版本自动退出,Supplied value : /var/lib/mysql-files(转载请删除括号里的内容)_docker启动mysql自动退出_树根朽木的博客-CSDN博客
云服务器通过docker镜像安装的mysql8.0容器不能远程连接?
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。
答案:Docker安装Mysql 8.0_docker安装mysql8.0_Cherry_King的博客-CSDN博客
mysql5.7无需设置即可远程访问,是因为在mysql数据库中已经配置好了规则。而8.0版本需要我们手动更改规则,更改方法见上面链接。
安装mysql8.0无法启动,还有可能是没有完全挂载上,可以使用如下命令新建容器并运行
docker run -p 3309:3306 --name test-mysql8.0 \ -v /mydata/test-mysql8.0/log:/var/log/mysql \ -v /mydata/test-mysql8.0/data:/var/lib/mysql \ -v /mydata/test-mysql8.0/conf:/etc/mysql \ -v /mydata/test-mysql8.0/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:8.0
四、Docker安装Redis
如下步骤依次执行:
docker pull redis
docker images
新建容器并运行
需要提前新建
如果不提前创建文件名称的话,一会在挂载的时候它可能误认为是文件夹
mkdir -p /mydata/myredis/conf
touch /mydata/myredis/conf/redis.conf
新建容器并运行
docker run -p 6379:6379 --name myredis -v /mydata/myredis/data:/data \ -v /mydata/myredis/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-server
使用docker安装的redis默认是没有配置文件的。因此需要去官网下载相同版本的redis,然后把redis.conf配置文件复制到目录中,修改相关配置。
如果你的redis是安装在云服务器上的,那么是一定要配置文件的。
需要在配置文件中设置redis的密码,否则当我们将云服务器的redis对应端口号开放以后,又没有密码,那么意味着任何人都能直接进入我们的redis中。安全问题直接拉满!
配置完成密码以后,需要重启redis才能生效。docker restart myredis
以后,当我们建立客户端链接的时候,就需要密码才可以。auth redis密码
[root@VM-16-11-centos conf]# docker exec -it myredis redis-cli 127.0.0.1:6379> keys * (error) NOAUTH Authentication required. 127.0.0.1:6379> auth abc123 OK
配置密码的方式也很简单:参考:redis如何设置密码_redis2.4.6.0 加密码_普通网友的博客-CSDN博客