Docker为什么会出现?
问题:环境配置最初开发上线都需要配置,并且非常麻烦。每一个机器都需要部署环境——费时费力、我在我的电脑上可以运行、版本更新,导致服务不可用
传统:开发打包jar包交给运维来做
现在:开发打包部署上线,一套流程做完
手机软件:java --apk --发布(手机商店)--用户下载apk --使用
系统项目:java --jar(环境) --Docker --下载我们发布的镜像 --直接使用
什么是容器?
容器是计算机上的沙盒进程,与主机上的所有其他进程隔离,这种隔离利用内核命名空间和cgroups。
容器特点:
是图像的可运行实例,可以受用DockerAPI或CLI创建、启动、停止、移动和删除容器
可以在本地计算机、虚拟机上运行或部署到云上
是可移植的
与其他容器隔离,并运行自己的软件、二进制文件和配置
什么是容器映像?
运行容器时使用隔离的文件系统由容器映像提供,由于映像包含容器的文件系统,因此它必须包含运行应用程序所需的一切-所有依赖项、配置、脚本、二进制文件等。该映像还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据
Docker基本命令
docker pull [options] NAME [:TAG] => 将远程仓库拉取镜像到本地
[options]:拉取的一些参数
[:TAG]:可选,如果不选默认最新版本,选填指定版本
NAME:镜像的名称
docker images [options] [REPOSITORY[:TAG]] => 查看本地镜像
[options]:拉取的一些参数
docker run [options] IMAGE[:TAG] [COMMAND] [ARG..] =>把镜像运行起来成为容器
[IMAGE]:镜像的名字
[COMMAND]:运行起来的时候要执行什么命令
[ARG]:表示这条命令运行需要的参数
Docker拉取MySQL镜像并运行
拉取MySQL镜像docker pull mysql:8.0.26
docker run -p 3306:3306 --name mysql --privileged=true
-v /mydata/mysql/log:/var/log/mysql
-v /mydata/mysql/data:/var/lib/mysql
-v /mydata/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=root
-d mysql:8.0.26
-p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口
-v /root/mysql/logs:/logs:将主机目录(/root/mysql)下的 logs 目录挂载到容器中的
/logs 日志目录
-v /root/mysql/data:/var/lib/mysql :将宿主机目录(/root/mysql)下的data目录挂载到容
器的 /var/lib/mysql 数据目录
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码
使用拉取的镜像启动成容器,一个镜像可以启动多个容器,每一次启动容器会自动保存,下次启动容器可以使用docker ps -a查看之前启动过的容器,使用命令docker start [容器id]进行启动
3.查看正在运行的容器:docker ps (-a可以查看已关闭的容器)
4.进入容器:docker exec -it mysql /bin/bash
运行问题如下:
问题一:Error response from daemon: Container xxx is restarting, wait until the container is running
当执行进入mysql容器命令时,出现容器正在重启需要等待容器运行完成,但是会发现一直在报错,一直处于重启中
使用docker log 容器id查看该容器运行的日志
发现挂载权限失败,容器并没有运行起来,因为虚拟机系统是centos7版本,而centos7的安全Selinux禁止了一些安全权限,导致挂载信息时权限不足。
解决方案为:在将镜像变成容器时,应该加入-privileged=true加上特定权限
docker run -p 3306:3306 --name mysql --privileged=true
-v /mydata/mysql/log:/var/log/mysql
-v /mydata/mysql/data:/var/lib/mysql
-v /mydata/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=root
-d mysql:8.0.26
(3条消息) chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied_mischen520的博客-CSDN博客
问题二:外部Windows连接不上Docker中的MySQL
首先确认容器是否启动docker ps
进入容器docker exec -it mysql /bin/bash
进入mysql:mysql -uroot -p
非本机ip访问mysql则需要修改密码:
use mysql;
alter user 'root'@'%' identified with mysql_native_password by '123456';
flush privileges;
select host,user,plugin,authentication_string from mysql.user;
再次远程连接,问题解决